Skip to main content

消息处理CODESYS Scripting脚本

要求CODESYS V3.5 SP17 或更高版本,已安装CODESYS Scripting版本 4.2.0.0

准备工作:将所需的代码示例复制到文件并以任意名称保存为 Python 脚本。

要执行已保存的 Python 脚本,请按照以下步骤操作:

  1. 开始CODESYS

  2. 点击工具脚本执行脚本文件菜单命令。

  3. 选择脚本文件对话框中,选择要执行的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提示。

34. 示例 1

价值观ScriptPromptHandling.LogPromptsScriptPromptHandling.ForwardUnknownPrompts被分配。

  • 价值ScriptPromptHandling.ForwardUnknownPrompts指定所有没有匹配条目的提示system.prompt_answers转发到底层message service。

  • 价值ScriptPromptHandling.LogPrompts指定对于所有提示进入system.prompt_answers显示在消息视图中,通过该值确认提示。

system.script_prompt_handling = ScriptPromptHandling.LogPrompts | ScriptPromptHandling.ForwardUnknownPrompts


35. 示例 2

价值观ScriptPromptHandling.LogPromptsScriptPromptHandling.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

36. 示例 1

在以下示例中,处理通过以下方式生成的提示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")


37. 示例 2

在以下示例中,处理通过以下方式生成的提示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, 例如。

38. 示例 1

在以下示例中,记录提示详细信息已启用。之后,会生成带有附加选项的提示。

当执行此脚本时,会出现提示,并且有关此提示的所有信息都会显示在消息视图中。

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")


39. 示例 2

在以下示例中,记录提示详细信息禁用。之后,会生成带有附加选项的提示。

执行此脚本时,会出现提示。消息视图中不显示有关提示的任何信息。

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_1 message 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

40. 示例 1

在以下示例中,索引存储在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")


41. 示例 2

在下面的示例中,类型为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

42. 例子

在以下示例中,元组存储在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

43. 例子

下面的例子展示了如何实现和存储这样的委托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))