消息处理CODESYS Scripting脚本
要求:CODESYS V3.5 SP17 或更高版本,已安装CODESYS Scripting版本 4.2.0.0
准备工作:将所需的代码示例复制到文件并以任意名称保存为 Python 脚本。
要执行已保存的 Python 脚本,请按照以下步骤操作:
开始CODESYS。
点击工具→脚本→执行脚本文件菜单命令。
在选择脚本文件对话框中,选择要执行的Python脚本。
所有输出均显示在消息查看脚本类别。
Message Service:自动化平台的功能是显示不同的提示,然后可以根据需要自动处理
Message Key:通过message service生成的提示的唯一标识符。并非每个提示都有message key。提示的消息键通常是隐藏的,但可以使用属性
system.log_prompt_details(见下文:财产:system.log_prompt_details)。
财产:system.script_prompt_handling
您可以使用该属性system.script_prompt_handling指定是否以及如何自动处理message service提示。
价值观ScriptPromptHandling.LogPrompts和ScriptPromptHandling.ForwardUnknownPrompts被分配。
价值
ScriptPromptHandling.ForwardUnknownPrompts指定所有没有匹配条目的提示system.prompt_answers转发到底层message service。价值
ScriptPromptHandling.LogPrompts指定对于所有提示和进入system.prompt_answers显示在消息视图中,通过该值确认提示。
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts
价值观ScriptPromptHandling.LogPrompts和ScriptPromptHandling.AlwaysForwardPrompts被分配。
价值
ScriptPromptHandling.AlwaysForwardPrompts指定全部提示会被转发到底层message service。“system.prompt_answers”中的匹配条目将被忽略。ScriptPromptHandling.LogPrompts在这种情况下没有效果,因为ScriptPromptHandling.AlwaysForwardPrompts具有最高优先级并覆盖所有其他选项。
system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.AlwaysForwardUnknown
重要
以下附加条件适用于所有需要额外用户交互(例如,选择复选框)的提示,仅当ScriptPromptHandling.SuppressPrompts或者ScriptPromptHandling.LogPrompt已设置:
所有没有message key的提示都会转发到底层message service。
所有带有message key的提示都需要输入
system.prompt_answers。
财产:system.process_script_prompts
随着system.process_script_prompts属性,您可以指定是否通过生成的提示system.ui也应该由message handling来处理CODESYS Scripting。
在以下示例中,处理通过以下方式生成的提示CODESYS Scripting,已启用。
当执行此脚本时,生成的message handling提示由CODESYS Scripting并将结果显示在消息视图中。
system.process_script_prompts = True
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")在以下示例中,处理通过以下方式生成的提示CODESYS Scripting,已禁用。
执行此脚本时,会打开一个信息提示,该提示不会被message handling程序处理CODESYS Scripting。
system.process_script_prompts = False
system.script_prompt_handling = ScriptPromptHandling.LogPrompts
system.ui.info("my info message", "message_key")财产:system.log_prompt_details
随着system.log_prompt_details属性,您可以指定是否在处理之前在消息视图中显示提示的所有详细信息。如果要将更复杂提示的响应存储在system.prompt_answers。由于提示的message key也会输出,因此该方法可用于确定匹配的message key以供使用system.prompt_answers, 例如。
在以下示例中,记录提示详细信息已启用。之后,会生成带有附加选项的提示。
当执行此脚本时,会出现提示,并且有关此提示的所有信息都会显示在消息视图中。
system.log_prompt_details = True
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.ui.select_many("my info message", PromptChoice.OKCancel, PromptResult.Cancel, options, "message_key")在以下示例中,记录提示详细信息禁用。之后,会生成带有附加选项的提示。
执行此脚本时,会出现提示。消息视图中不显示有关提示的任何信息。
system.log_prompt_details = False
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.ui.select_many("my info message", PromptChoice.OKCancel, PromptResult.Cancel, options, "message_key")财产:system.prompt_answers
随着system.prompt_answers属性,您可以指定如何响应特定提示。
这是必要的
当提示不应使用设置的默认值来回答时
对于需要额外用户交互的提示(例如,选择复选框)
重要
仅可存储带有message key的提示的响应。
没有附加选择选项的提示
在下面的例子中,对提示的响应方式message_key_1 message key应该存储在system.prompt_answers。在本例中,所有带有此message key的提示都会被回答OK回答道。
当执行此脚本时,会相继生成两个提示。
第一个提示符
message_key_1message key会自动处理,结果显示在消息视图中。第二个提示符
message_key_2显示message key。
system.process_script_prompts = True
system.prompt_answers["message_key_1"] = PromptResult.OK
system.ui.prompt("automatically processed prompt", PromptChoice.OKCancel, PromptResult.Cancel, message_key="message_key_1")
system.ui.prompt("shown prompt", PromptChoice.OKCancel, PromptResult.Cancel, message_key="message_key_2")带有附加单选的提示
对于需要从可能的选项列表中选择一个选项的提示,应该选择的选项必须存储在system.prompt_answers对应message key。
对此有两种选择:
指定所需选项的从零开始的索引
存储类型的委托
MultipleChoiceSelector
在以下示例中,索引存储在system.prompt_answers,应该用于所有带有message_key_1 message key。
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.prompt_answers["message_key_1"] = 1
system.ui.choose("single choice prompt", options, message_key="message_key_1")在下面的示例中,类型为MultipleChoiceSelector存储在system.prompt_answers适用于所有带有message_key_1 message key。
from System import Array
# filter function
def my_filter(choices):
return Array.IndexOf(choices, "Option 2")
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.prompt_answers["message_key_1"] = MultipleChoiceSelector(my_filter)
system.ui.choose("single choice prompt", options, message_key="message_key_1")带有附加多选的提示
对于需要从可能的选项列表中选择多个选项的提示,应该选择的选项以及提示应该响应的结果必须保存在system.prompt_answers对应message key。
对此有两种选择:
指定所需选项的从零开始的索引
存储类型的委托
MultipleChoiceSelector
在以下示例中,元组存储在system.prompt_answers其中首先包含PromptResult要使用的,其次包含一个类型的委托PromptChoiceFilter。
脚本执行时,系统会自动回答提示,并将结果显示在消息视图中。对于各个选项,Boolean用于指定它们是否已被选中。
# filter function
def my_filter(choice):
return choice in ("Option 1", "Option 3")
system.process_script_prompts = True
options = ["Option 1", "Option 2", "Option 3"]
system.prompt_answers["message_key_1"] = (PromptResult.OK, PromptChoiceFilter(my_filter))
system.ui.select_many("select many prompt", PromptChoice.OKCancel, PromptResult.OK, options, message_key="message_key_1")提示附加特定于应用程序的选择选项
在以下示例中,元组存储在system.prompt_answers其中首先包含PromptResult要使用的,其次包含一个类型的委托PromptCustomControlValueProvider。
下面的例子展示了如何实现和存储这样的委托system.prompt_answers。可以通过以下方式读取各个子控件的 ID system.log_prompt_details。
# filter function def my_filter(control_id): if control_id = id_1: return "value_for_id_1" if control_id = id_2: return "value_for_id_2" return None system.prompt_answers["message_key_1"] = (PromptResult.OK, PromptCustomControlValueProvider(my_filter))