



注意

如果类型转换运算符的操作数值超出了目标数据类型的值范围,那么结果输出将取决于处理器类型,因此是未定义的。例如,当操作数负值从LREAL
转换为目标数据类型UINT
时,就会出现这种情况。
从较大的数据类型转换为较小的数据类型时,可能会丢失信息。




注意

边界情况下的四舍五入逻辑取决于目标系统或目标系统的 FPU(浮点运算单元)。例如,一个-1.5
的值在不同控制器上的转换可能不同。
捕获整个应用程序的溢出值范围,使其与目标系统的程序代码无关。
IEC61131-3 规范没有规定过载功能。
如果要严格按照 IEC61131-3 进行编程,则应使用语法<type> _TO_ <another type>
中的运算符,如下文所述。
类型转换的规则同样适用于重载。
运算符将数值转换为其他数据类型,只明确指定目标数据类型,而不指定初始数据类型(操作数的数据类型)("重载转换")。过载不是 IEC 61131-3 规范的一部分。
调用语法
<variable name> := <TO operator> ( <operand> ); <operand> = <variable name> | <literal>
操作符
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 *)