Skip to main content

调用外部函数

此机制可用于通过 Unix 域套接字调用 IEC 应用程序中的外部函数。这允许您创建自己的功能。同时,实现了流程分离。作为 IEC 的一个接口, EXTAPI.UDSExternalFunction 功能块提供在 ExtensionAPI 库。在 Python 中, ExternalFunctionBase 类用于此目的,在提供的示例中提供。

还使用此示例解释了该机制的使用。该示例包含一个 IEC 项目,其中实现了外部函数的调用。该示例还包含被调用函数的实现 myExternalFunction 在Python中。

CODESYS Control Extension Package 安装完成后,您可以在以下目录中找到 UDSExternalCallExample.project 示例和 Python 脚本 uds_external_function.pyC:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall.

示例,IEC 应用

在里面 UDSExternalCallExample.project 示例项目,一个新的 myExternalFunction 功能块被创建。这扩展了 EXTAPI.UDSExternalFunction 具有输入和输出类型的 FB DINT.其他数据类型也是可以的。一开始要传入Python中要调用的函数的名字。这个地址必须是唯一的。

以下代码用于添加接口外部函数的输入:

Result := THIS^.AddParameter('parameterIn1', 'DINT', TO_STRING(diIn1));

然后使用以下代码调用外部函数:

Result := THIS^.Call();

以下代码用于查询Python实现的函数的返回值:

Result := THIS^.GetParameter('parameterOut', 'DINT', ADR(sValue));

参数的类型 string.因此,它必须转换为所需的数据类型。

示例,Python 脚本

重要

为扩展 API 提供的 Python 示例需要 Python 3.0。

包含的 uds_external_function.py 样品提供 ExternalFunctionBase 类,它为此功能提供与运行时系统的 Unix 域套接字通信。

myExternalFunction 示例中实现的类扩展了 ExternalFunctionBase 类。 Call() 函数是必需的,从IEC的机制中调用。输入和输出参数以字符串元组的形式传递。

例子: {'parameterIn1': ('DINT', '11'), 'parameterIn2': ('DINT', '22')}

在示例中, Call()函数实现了两个输入参数的简单相加:

def Call(self, dictParams):
    in1 = int(dictParams['parameterIn1'][1])
    in2 = int(dictParams['parameterIn2'][1])

    dictRetParams = {}
    dictRetParams['parameterOut'] = 'DINT', in1 + in2

    return dictRetParams
  1. 将脚本 uds_external_function.py(安装 CODESYS Control Extension Package 后位于目录 C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall 中)复制到目标设备。

  2. 运行脚本 uds_external_function.py

  3. 然后启动 UDSExternalCallExample.project 示例项目位于 CODESYS

    可以看到项目调用了 myExternalFunction() 添加了Python脚本的函数和两个输入参数。

接口的使用仅作为 Linux 的成员 codesysuser 用户组

是的

流程分离

是的