Skip to main content

POU:CheckLRangeSigned

用于监视 LINT 类型的子范围类型的范围限制的功能

有关范围监控的实现示例,请参阅帮助页面 检查范围签名 功能。

监测范围限制

监控功能 负责适当处理违反范围限制的行为。对违规的反应示例包括设置错误标志和更改值。当将值分配给子范围类型变量时,会隐式调用这些函数。

小心

要获得监控功能的特性,请不要编辑声明部分。但是,您可以添加局部变量。

. 调用该函数时,它接收以下输入参数:
  • value:应该分配给子范围类型变量的值

  • lower:范围下限

  • upper:范围上限

只要在有效范围内,返回值就是赋值值。如果不是,则返回上限或下限,具体取决于违反的阈值。

例如,赋值 i := 10*y 被隐式替换为 i := CheckRangeSigned(10*y, -4095, 4095);

如果 y 为“1000”,则“10*1000=10000”未分配给 i 就像在原始代码中一样。而是分配了“4095”的范围上限。

对于 CheckRangeUnsigned 功能。

重要

如果函数不可用,则不会在运行时检查子范围的各个变量。在这种情况下,您可以将介于 -2147483648 和 +2147483648(或 0 和 4294967295 之间)之间的任何值分配给子范围类型 DINT/UDINT 的变量。您可以将介于 -9223372036854775808 和 +9223372036854775807 之间(或介于 0 和 18446744073709551615 之间)的任何值分配给子范围类型 LINT/ULINT 的变量。

小心

链接区域监控功能可能导致无限循环。例如,如果 FOR 循环的计数器变量是子范围类型并且循环的计数范围退出定义的子范围,则可能发生无限循环。

535. 无限循环示例:
VAR
        ui : UINT (0..10000);
 ...
END_VAR
FOR ui:=0 TO 10000 DO
        ...
END_FOR

程序永远不会退出 FOR 循环,因为监视器功能 CheckRangeSigned 防止 ui 设置为大于 10000 的值。