用于监控 UDINT 子量程类型的量程限制。
有关范围监控的实施示例,请参阅CheckRangeSigned
函数的帮助页面。
该监控功能负责适当处理违反范围限制的情况。对违规行为的反应包括设置错误标记和更改数值。为子范围类型变量赋值时会隐式调用这些函数。




小心

要获得监控功能,请勿编辑声明部分。不过,您可以添加本地变量。
调用该函数时,它会接收以下输入参数:
-
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 循环的计数变量是子范围类型,而循环的计数范围超出了定义的子范围,就会出现无尽循环。
无尽循环示例
VAR ui : UINT (0..10000); ... END_VAR
FOR ui:=0 TO 10000 DO ... END_FOR
程序从未退出 FOR 循环,因为CheckRangeSigned
监控功能可防止ui
设置为大于 10000 的值。