脚本钩子管理器

概述

脚本钩子管理器为在运行 EcoStruxure Machine Expert 时可以执行的多个命令和事件提供接口。命令执行或事件删除可能触发对特定 Python 脚本的执行。您可以对自己的 Python 脚本编程,也可以使用 EcoStruxure Machine Expert 随附的其中一个 Python 模板。

比如,AutomaticProjectArchiveCreation.py 模板为创建项目存档提供了 Python 脚本。如果多个不同的用户同时操作同一项目,那么,这就有助于确保每当有人更改项目时,便会创建项目存档。因此,如果使用最新的项目存档,则每个用户都能够获得项目的最新状态。

有关更多信息,请参阅 EcoStruxure Machine Expert 在线帮助软件 - 编程部分中的以下脚本引擎用户指南

  • CODESYS 脚本引擎 - 用户指南

  • EcoStruxure Machine Expert 脚本引擎 - 用户指南

创建脚本钩子管理器对象

如要创建脚本钩子管理器对象,请执行以下操作:

步骤

操作

注释

1

右键单击应用程序树全局节点,然后执行命令添加对象 > 脚本钩子管理器

结果添加脚本钩子管理器对话框随即打开。

2

选择合适的选项以创建 Python 脚本。

  • 选择新建脚本选项,以在 Logic Builder 中从头创建新 Python 脚本。

  • 选择从模板选项,然后选择 EcoStruxure Machine Expert 随附的 Python 模板作为 Python 基本创建的基础。不同模板所涉及的用例由脚本自身中的注释来描述。

  • 选择从现有脚本选项,打开在其他工具中完成编程的 Python 脚本文件。单击选择按钮,打开文件打开对话框,找到 .py 文件。

3

单击添加按钮。

结果

  • 脚本钩子管理器节点和 Python 脚本节点被添加作为应用程序树全局节点。

  • 脚本钩子管理器编辑器随即打开。

脚本钩子管理器编辑器

脚本钩子管理器编辑器在左侧列出了可用于触发 Python 脚本执行的命令事件

  • 如要激活某个命令或事件,请选择相应的项,然后单击启用钩子按钮

  • 如要禁用某个命令或事件,请选择相应的项,然后单击禁用钩子按钮

这些状态设置被保存到项目。例如,如果在启用了 BeforeProjectSave 钩子的情况下打开先前保存的项目,则这个钩子会保持激活,一旦事件/命令生效,便会触发这个钩子。

在右侧,显示了有关所选命令或事件的其他信息:

声明语法部分提供了在 EcoStruxure Machine Expert 执行了事件或命令之后由系统调用的方法的签名。单击复制代码按钮,将代码插入 Python 脚本编辑器的 Python 代码中,然后通过要执行的 Python 命令来扩展这个方法。

重命名函数按钮让您能够在单独的对话框中修改 Python 函数的名称。在保存了不同的名称之后,务必在 Python 代码中使用修改后名称的确切字符串。

参数部分列出了在执行 Python 方法时,此方法内部可用的参数。

Python 脚本编辑器

Python 脚本编辑器让您能够直接在 Logic Builder 中对 Python 脚本编程。此编辑器支持所有 Python 编程特性,即使 Autocomplete (IntelliSense) 函数中不提供所有可用 Python 关键字以供选择。

根据在添加脚本钩子管理器对话框中的选择,可以选用以下方式在 Python 脚本中创建 Python 脚本:

  • 从头创建 - 从空 Python 脚本开始,输入代码,并使用从脚本钩子管理器编辑器的声明语法部分中复制的代码片段。

  • 从模板创建 - 以所选模板提供的脚本为基础,并用特定 Python 代码扩展此脚本。

  • 导入在其他工具中完成编程的 Python 脚本。

注: 在对 Python 脚本编程之后,单击更新脚本范围 按钮,同步脚本并应用修改。如果在不执行同步的情况下退出 Python 脚本编辑器,仍会保存修改,因此编辑器中仍包含这些修改,但不会应用这些修改。但依然会改为执行先前的不含修改的脚本。如果加载别的项目或者创建新项目,将有不同的脚本可用,或者根本没有脚本可用。

利用更新脚本范围程序,可验证 Python 代码。如果检测到错误,将在消息视图中予以指示,代码将不被执行。

在登录/注销期间忽略多个事件

注: 由于技术限制,AfterDeviceLogin 和/或 AfterDeviceLogout 事件可能被多次触发。

例如,通过在脚本中使用标志,可以忽略 AfterDeviceLogin 事件的多次执行:

def after_device_login():
    if session_store.get("loginHandled", False) == False:
        print("after_device_login")
        session_store.set("loginHandled", True)
    pass

def after_device_logout():
    print("after_device_logout")
    session_store.set("loginHandled", False)
    pass

消息视图中的脚本钩子消息

Python 代码中使用print 命令编程的文本显示在消息视图脚本钩子区域中。