用户定义的函数

FactoryTalk Design Workbench
支持创建和管理用户定义的函数 (User-Defined Functions, UDF),以重新使用程序逻辑并使程序更易读。对只需要一个输出的简单计算使用 UDF。
UDF 无法访问调用程序中的局部变量。调用程序中的局部变量必须作为输入参数传递到 UDF。
重要提示:
由于输入参数只能启用或禁用 UDF 中的指令,因此用户定义的输入参数不能启用或禁用 UDF。
要启用或禁用 UDF,请在“
属性
”窗格中启用或禁用“
EN/ENO
”。
当禁用“
EN/ENO
”时,UDF 不会执行,而且不会覆盖输出参数。
如果在每次扫描程序时多次执行某个 UDF,则不建议使用需要多次程序扫描才能完成的指令,如计时器、运动、消息和计数器指令。这些指令可在各次程序扫描之间保持状态。

使用 UDF 而非用户定义的功能块 (User-Defined Function Blocks, UDFB)

  • 适用于只需要一个输出的简单计算,例如
    Y=MX+B.
  • 适用于无需在每次执行时都保存局部变量值的无状态指令,例如 SIN。
  • 当输出参数不需要数组或结构化数据类型时。
  • 尽可能使用 UDF,因为 UDF 耗用的内存更少。
    需要多个实例时,如果使用 UDFB,则可以使用少于 UDF 的内存,因为 UDFB 在被实例化为变量之前不存在于程序中。

使用 UDFB 而非 UDF

  • 适合具有多个输出的复杂计算。
  • 每次执行都需要保存局部变量值(保存状态)时。
  • 需要多个实例时。如果使用 UDFB,则可以使用少于 UDF 的内存,因为项目中的 UDFB 在被实例化为变量之前不存在于程序中。
  • 当输出参数需要数组或结构化数据类型时。
  • 同时发送多条消息时。
    当 UDF 包含消息指令(如 MSG_CIPGENERIC)时,UDF 一次只发送一个消息,即使在每次程序扫描时多次调用 UDF。

使用 UDF 时请考虑以下最佳实践

  • 使用数据封装。
    UDF 可访问全局变量。不建议从 UDFB 访问全局变量。
  • 在项目中多次调用 UDF 之前对 UDF 程序进行调试,原因是:
    • 在多次调用 UDF 时,很难监视 UDF 的逻辑。
    • 不支持监控从中断程序调用的 UDF。
  • 每次执行时初始化局部变量。
    默认情况下,每次调用 UDF 时,UDF 程序中的局部变量不会自动重新初始化。由于 UDF 不支持多个实例,因此建议在每次执行时使用输入参数或常量初始化 UDF 局部变量。
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal