如果类型转换运算符的操作数值超出目标数据类型的值范围,则结果输出取决于处理器类型,因此未定义。例如,当将负操作数值从LREAL 转换为目标数据类型UINT时,就是这种情况。 从较大的数据类型转换为较小的数据类型时,可能会丢失信息。 |
运算符将日期和时间值转换为指定的数据类型,并返回类型转换后的值。
<变量名> := <日期和时间转换操作符> ( <操作数> );
<操作数> = <变量名> | <文字>
数据类型DATE和DT在内部使用相同的内存格式,并存储为DWORD。DATE的分辨率为1天。DT的分辨率为1秒两者都从1970年1月1日开始。TOD 以 DWORD 的形式存储,分辨率为1毫秒。
.运算符
DATE_TO___UXINT
DATE_TO___XINT
DATE_TO___XWORD
DATE_TO_BIT
DATE_TO_BOOL
DATE_TO_BYTE
DATE_TO_DINT
DATE_TO_DT
DATE_TO_DWORD
DATE_TO_INT
DATE_TO_LINT
DATE_TO_LREAL
DATE_TO_LTIME
DATE_TO_LWORD
DATE_TO_REAL
DATE_TO_SINT
DATE_TO_STRING
DATE_TO_TIME
DATE_TO_TOD
DATE_TO_UDINT
DATE_TO_UINT
DATE_TO_ULINT
DATE_TO_USINT
DATE_TO_WORD
DATE_TO_WSTRING
DT_TO___UXINT
DT_TO___XINT
DT_TO___XWORD
DT_TO_BIT
DT_TO_BOOL
DT_TO_BYTE
DT_TO_DATE
DT_TO_DINT
DT_TO_DWORD
DT_TO_INT
DT_TO_LINT
DT_TO_LREAL
DT_TO_LTIME
DT_TO_LWORD
DT_TO_REAL
DT_TO_SINT
DT_TO_STRING
DT_TO_TIME
DT_TO_TOD
DT_TO_UDINT
DT_TO_UINT
DT_TO_ULINT
DT_TO_USINT
DT_TO_WORD
DT_TO_WSTRING
TOD_TO___UXINT
TOD_TO___XINT
TOD_TO___XWORD
TOD_TO_BOOL
TOD_TO_BIT
TOD_TO_BYTE
TOD_TO_DATE
TOD_TO_DINT
TOD_TO_DT
TOD_TO_DWORD
TOD_TO_INT
TOD_TO_LINT
TOD_TO_LREAL
TOD_TO_LTIME
TOD_TO_LWORD
TOD_TO_REAL
TOD_TO_SINT
TOD_TO_STRING
TOD_TO_TIME
TOD_TO_UDINT
TOD_TO_UINT
TOD_TO_ULINT
TOD_TO_USINT
TOD_TO_WORD
TOD_TO_WSTRING
.长运算符
LDATE_TO___UXINT
LDATE_TO___XINT
LDATE_TO___XWORD
LDATE_TO_BIT
LDATE_TO_BOOL
LDATE_TO_BYTE
LDATE_TO_DATE
LDATE_TO_DINT
LDATE_TO_DT
LDATE_TO_DWORD
LDATE_TO_INT
LDATE_TO_LDT
LDATE_TO_LINT
LDATE_TO_LREAL
LDATE_TO_LTIME
LDATE_TO_LTOD
LDATE_TO_LWORD
LDATE_TO_REAL
LDATE_TO_SINT
LDATE_TO_STRING
LDATE_TO_TIME
LDATE_TO_TOD
LDATE_TO_UDINT
LDATE_TO_UINT
LDATE_TO_ULINT
LDATE_TO_USINT
LDATE_TO_WORD
LDATE_TO_WSTRING
LDT_TO___UXINT
LDT_TO___XINT
LDT_TO___XWORD
LDT_TO_BIT
LDT_TO_BOOL
LDT_TO_BYTE
LDT_TO_DATE
LDT_TO_DINT
LDT_TO_DWORD
LDT_TO_INT
LDT_TO_LDATE
LDT_TO_LINT
LDT_TO_LREAL
LDT_TO_LTIME
LDT_TO_LTOD
LDT_TO_LWORD
LDT_TO_REAL
LDT_TO_SINT
LDT_TO_STRING
LDT_TO_TIME
LDT_TO_TOD
LDT_TO_UDINT
LDT_TO_UINT
LDT_TO_ULINT
LDT_TO_USINT
LDT_TO_WORD
LDT_TO_WSTRING
LTOD_TO___UXINT
LTOD_TO___XINT
LTOD_TO___XWORD
LTOD_TO_BOOL
LTOD_TO_BIT
LTOD_TO_BYTE
LTOD_TO_DATE
LTOD_TO_DINT
LTOD_TO_DT
LTOD_TO_DWORD
LTOD_TO_INT
LTOD_TO_LDATE
LTOD_TO_LDT
LTOD_TO_LINT
LTOD_TO_LREAL
LTOD_TO_LTIME
LTOD_TO_LWORD
LTOD_TO_REAL
LTOD_TO_SINT
LTOD_TO_STRING
LTOD_TO_TIME
LTOD_TO_UDINT
LTOD_TO_UINT
LTOD_TO_ULINT
LTOD_TO_USINT
LTOD_TO_WORD
LTOD_TO_WSTRING
当且仅当操作数值可以解释为”0”时,运算符才返回FALSE 。
xDate := DATE_TO_BOOL(D#1970-1-1); | xDate = FALSE |
xDateAndTime := DT_TO_BOOL(DT#1970-1-1-0:0:0); | xDateAndTime = FALSE |
xTimeOfDay := TOD_TO_BOOL(TOD#0:0:0); | xTimeOfDay = FALSE |
xDate := DATE_TO_BOOL(D#2019-9-1); | xDate = TRUE |
xDateAndTime := DT_TO_BOOL(DT#2019-9-1-12:0:0); | xDateAndTime = TRUE |
xTimeOfDay := TOD_TO_BOOL(TOD#12:0:0); | xTimeOfDay = TRUE |
数据类型DATE和DT 在内部使用相同的内存格式,即DWORD。DATE的分辨率为1天。DT的分辨率为1秒两者都始于1970年1月1日。
TOD以DWORD 的形式存储,分辨率为1毫秒。
diReturn_0 := DT_TO_DINT(DT#1970-1-1-0:0:0); | diReturn_0 = 0 |
diReturn_1 := DATE_TO_DINT(D#1970-1-1); | diReturn_1 = 0 |
diReturn_2 := TOD_TO_DINT(TOD#0:0:0); | diReturn_2 = 0 |
diReturn_1 := DT_TO_DINT(DT#1970-1-1-0:0:1); | diReturn_3 = 1 |
diReturn_3 := DATE_TO_DINT(D#1970-1-2); | diReturn_4 = 86400 |
diReturn_5 := DT_TO_DINT(DT#2019-9-1-12:0:0.0); | diReturn_5 = 1567339200 |
diReturn_6 := DATE_TO_DINT(D#2019-9-1); | diReturn_6 = 1567339200 |
diReturn_7 := TOD_TO_DINT(TOD#12:0:0); | diReturn_7 = 43200000 |
将类型转换为STRING或WSTRING时,键入的值将作为字符串左对齐,并且如果过长则被截断。因此,为类型转换运算符<>_TO_STRING和<>_TO_WSTRING声明返回变量的长度应足够长,以便在不进行任何操作的情况下字符串有足够的空间。 |
将类型为 DATE, DATE_AND_TIME, TIME_OF_DAY, DT, 或TOD的操作数传递给运算符进行数据和时间转换,然后将其转换为常量语法(文字语法)。生成的字符串包含关键字 D#, DT#或TOD#,然后包含大小及其数据和时间单位,如IEC 61131-3规范所示。