如果类型转换运算符的操作数值超出目标数据类型的值范围,则结果输出取决于处理器类型,因此未定义。例如,当将负操作数值从LREAL 转换为目标数据类型UINT时,就是这种情况。 从较大的数据类型转换为较小的数据类型时,可能会丢失信息。 |
边界情况的舍入逻辑取决于目标系统或目标系统的FPU(浮点单元)。例如,可以在不同的控制器上以不同的方式转换-1.5的值。 捕获值范围在整个应用程序中溢出,与目标系统的程序代码无关。 |
IEC61131-3规范不提供重载功能。 如果要严格按照IEC61131-3进行编程,则应使用以下各节所述的语法 <type> _TO_ <another type>的运算符。 |
类型转换的规则在这里也适用于重载。 |
运算符将值转换为其他数据类型,显式仅指定目标数据类型,而不指定初始数据类型(操作数的数据类型)(“重载转换”)。重载不是IEC 61131-3规范的一部分。
<变量名> := <TO 运算符> ( <操作数> );
<操作数> = <变量名> | <文字>
.运算符
TO___UXINT
TO___XINT
TO___XWORD
TO_BIT
TO_BYTE
TO_BOOL
TO_DATE
TO_DINT
TO_DT
TO_DWORD
TO_INT
TO_LDATE
TO_LDT
TO_LINT
TO_LREAL
TO_LTIME
TO_LTOD
TO_LWORD
TO_REAL
TO_SINT
TO_STRING
TO_TIME
TO_TOD
TO_UDINT
TO_UINT
TO_ULINT
TO_USINT
TO_WORD
TO_WSTRING
.ST实现语言:
VAR
iNumber_1 : INT;
rNumber_2 : REAL := 123.456;
iNumber_2 : INT;
xIsTrue : BOOL;
sOutputText : STRING;
sText : STRING := 'Hello World!';
wsText: WSTRING;
dateEvent : DATE := D#2019-9-3;
uiEvent : UINT;
uxiData : __UXINT;
END_VAR
iNumber_1 := TO_INT(4.22); (* Result: 4 *)
iNumber_2 := TO_INT(rNumber_2); (* Result: 123 *)
xIsTrue := TO_BOOL(1); (* Result: TRUE *)
sOutputText := TO_STRING(342); (* Result: '342' *)
wsText := TO_WSTRING(sText); (* Result: "Hello World!"*)
uiEvent := TO_UINT(dateEvent); (* Result: 44288 *)
uxiData := TO___UXINT(iNumber_2); (* Result: 123 *)