调用外部函数
此机制可用于通过 Unix 域套接字调用 IEC 应用程序中的外部函数。这允许您创建自己的功能。同时,实现了流程分离。作为 IEC 的一个接口, EXTAPI.UDSExternalFunction
功能块提供在 ExtensionAPI
库。在 Python 中, ExternalFunctionBase
类用于此目的,在提供的示例中提供。
还使用此示例解释了该机制的使用。该示例包含一个 IEC 项目,其中实现了外部函数的调用。该示例还包含被调用函数的实现 myExternalFunction
在Python中。
CODESYS Control Extension Package 安装完成后,您可以在以下目录中找到 UDSExternalCallExample.project
示例和 Python 脚本 uds_external_function.py
: C:\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
将脚本
uds_external_function.py
(安装 CODESYS Control Extension Package 后位于目录C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall
中)复制到目标设备。运行脚本
uds_external_function.py
。然后启动
UDSExternalCallExample.project
示例项目位于 CODESYS。可以看到项目调用了
myExternalFunction()
添加了Python脚本的函数和两个输入参数。
接口的使用仅作为 Linux 的成员 | 是的 |
流程分离 | 是的 |