作为 DUT 对象进行声明的语法:
TYPE <name>: <Inttype> (<ug>..<og>) END_TYPE;
|
有效的 IEC 标识符 |
|
以下数据类型中的一种:SINT, USINT, INT, UINT, DINT, UDINT, BYTE, WORD, DWORD (LINT, ULINT, LWORD) |
|
与基本类型兼容的常量,设置范围类型的下限 此范围中包含下限。 |
|
与基本类型兼容的常量,设置范围类型的上限。 此基本类型中包含上限。 |
VAR
i : INT (-4095..4095);
ui : UINT (0..10000);
END_VAR
如果为某个子范围类型分配了一个值(在声明中或者在实现中),但是与此范围不匹配(例如,以上所显示的声明示例中的 i:=5000
),则会发出一条消息。
为了在运行期间不超出子范围类型的范围边界,必须将函数CheckRangeSigned
、CheckLRangeSigned
或 CheckRangeUnsigned
、CheckLRangeUnsigned
添加到应用程序。关于插入函数的信息,请参阅 函数的说明。
此检查函数的目的是正确处理子范围违例(例如,通过设置错误标志或更改值)。将在分配子范围类型的变量后隐式调用此函数。
警告 | |
---|---|
分配属于某个已签名子范围类型的变量会涉及到隐式调用 CheckRangeSigned
。该函数的默认实现(将某个值修建为允许的范围)按如下所示提供:
声明部分:
// Implicitly generated code : DO NOT EDIT
FUNCTION CheckRangeSigned : DINT
VAR_INPUT
value, lower, upper: DINT;
END_VAR
实现部分:
// Implicitly generated code : Only an Implementation suggestion
IF (value < lower) THEN
CheckRangeSigned := lower;
ELSIF(value > upper) THEN
CheckRangeSigned := upper;
ELSE
CheckRangeSigned := value;
END_IF
调用时,此函数将获取以下输入参数:
value
:要分配给范围类型的值
lower
:范围的下限
upper
:范围的上限
只要分配的值在有效范围内,则将会用作该函数的返回值。否则,作为范围违例的响应,将返回范围的上限或下限。
现在,分配 i:=10*y
将被隐式替换为
i := CheckRangeSigned(10*y, -4095, 4095);
例如,如果 y
具有值 1000
,则变量 i
将不会被分配给 10*1000=10000(如由原始实现提供),而是分配给范围的上限(即,4095)。
同样情况还适用于函数 CheckRangeUnsigned
。