使用编程命令

SAC 和程序块

当 SAC 扫描某个程序块时,通常会在一个扫描周期内运行该块的所有命令。扫描程序块之后,除非发生以下情况,否则 SAC 不会再次扫描该块:

  • 该块由操作员或另一个块(如事件操作块或另一个程序块)重新放入到扫描项中。
  • 重新加载了数据库。
  • 块包含测试或等待命令,并且不满足指定的条件。例如,如果某个 IF 命令将测试特定的级别,并在达不到该级别时发出 GOTO 命令以转到上一步骤,那么,SAC 将继续扫描块,直至满足条件为止。
  • GOTO 0 是程序块的最后一条语句。在此情况下,块将持续循环,SAC 将根据指定的扫描时间扫描块。

延迟程序命令

某些命令会限制测试命令的持续时间。例如,您可能需要使用 WAITFOR 命令来让程序块等到模拟输入块收到值 50 之后才继续执行下一条命令。但是,如果模拟输入块永远都不能收到值 50,则永远也不会执行余下的命令。为了避免这种结果,您可以使用 MAXWAIT 命令。此命令指定块在等待多久之后自动转到下一条命令。然后,您可以使用 GOTO 命令,让程序块跳到位于编程序列后面位置的特定命令。例如:

09 MAXWAIT 60
10 WAITFOR AI1 = 50
11 GOTO 16

在此示例中,块将等待 60 秒,然后执行 GOTO 命令。GOTO 命令指定步骤 16 是下一个要执行的步骤。

如果设置的命令需要等待较长时间才能完成,则还应该包含一条命令用于通知您已结束等待。此方法可让您确定是否发生了事件。例如:

04 WAITFOR AI1 = 50
05 MSG AI1 IS NOW 50

在此示例中,仅当 AI1 成功达到值 50 时,才输出消息“AI1 IS NOW 50”。如果 AI1 永远不会达到 50,则不会将该消息发送到启用的报警目标。

限定值

如果程序块将值发送到另一个块,而该值超出了目标块的 EGU 范围,则 iFIX 会将该值限制在块的 EGU 上限和下限范围。例如,如果您使用 SETOUT 将值 150 发送到 EGU 范围为 0 到 100 的块,则发出的值将被限定为 100。

执行错误

程序块只要无法执行某条命令,就会关闭扫描。在关闭扫描之前,块将向其报警区中所有启用的报警服务发送消息。关闭扫描消息解释了块在哪一行上停止以及原因。

在将程序块投入实际使用之前,请确保对它进行全面测试。在将程序块联机之前,可以使用调试命令 SETDEBUG 和 CLRDEBUG 来帮助测试程序块。

 

您最近了解过 iFIX 吗 ?

查看最新版 iFIX 的所有新功能。

让 iFIX 帮助您提高效率,降低成本。