BOOL 类型变量可以具有值 TURE (1) 和 FALSE (0)。保留 8 位存储器空间。
有关更多信息,请参阅章节 BOOL 常亮。
该表列出了可用的整数数据类型。每个类型涵盖了不同范围的值。存在下列范围限制。
数据类型 |
下限 |
上限 |
存储器空间 |
---|---|---|---|
BYTE |
0 |
255 |
8 位 |
WORD |
0 |
65,535 |
16 位 |
DWORD |
0 |
4,294,967,295 |
32 位 |
LWORD |
0 |
264-1 |
64 位 |
SINT |
-128 |
127 |
8 位 |
USINT |
0 |
255 |
8 位 |
INT |
-32,768 |
32,767 |
16 位 |
UINT |
0 |
65,535 |
16 位 |
DINT |
-2,147,483,648 |
2,147,483,647 |
32 位 |
UDINT |
0 |
4,294,967,295 |
32 位 |
LINT |
–263 |
263-1 |
64 位 |
ULINT |
0 |
264-1 |
64 位 |
有关更多信息,请参阅此数字常量的描述。
创建适用于不同目标系统的 IEC 代码,使用独立于目标的整数数据类型 __UXINT, __XINT 和 __XWORD。编译器可将这些数据类型转换为目标系统支持的相应标准数据类型。支持具有 32 位和 64 位宽度的地址寄存器的系统。
提供以下类型转换操作符:
独立于目标的数据类型 |
64 位平台上 |
32 位平台上 |
---|---|---|
__UXINT |
ULINT |
UDINT |
__XINT |
LINT |
DINT |
__XWORD |
LWORD |
DWORD |
数据类型 REAL 和 LREAL 是浮点类型。它们代表有理数。
REAL 和 LREAL 数据类型的特性:
数据类型 |
下限 |
上限 |
存储器空间 |
---|---|---|---|
REAL |
-3.402823e+38 |
3.402823e+38 |
32 位 |
LREAL |
-1.7976931348623158e+308 |
1.7976931348623158e+308 |
64 位 |
示例:
PROGRAM PLC_PRG
VAR
rMax: REAL := 3.402823E+38; // Largest number
rPosMin : REAL := 1.0E-44; // Smallest positive number
rNegMax: REAL := -1.0E-44; // Largest negative number
rMin: REAL := -3.402823E+38; // Smallest number
lrMax: LREAL := 1.7976931348623158E+308; // Largest number
lrPosMin : LREAL := 4.94065645841247E-324; // Smallest positve number
lNegMax: LREAL := -4.94065645841247E-324; // Largest negative number
lrMin: LREAL := -1.7976931348623158E+308; // Smallest number
END_VAR
分配 i1 := r1;
时,会检测到错误。因此,在使用转换操作符时,上述注释适用,如下所示:
i1 := REAL_TO_INT(r1);
有关更多信息,请参阅 REAL/LREAL 常量(操作数)。
使用 EcoStruxure Machine Expert V2.2 及更高版本,STRING 数据类型可以编码为 Latin 1 或 UTF-8 格式。对于项目范围解释 UTF-8,在 对话框中启用参数 。有关更多信息,请参阅 项目范围 UTF-8 编码。
STRING 数据类型变量可包含任何字符串。声明中的 size 条目将确定要为变量保留的存储器空间。这一空间指的是字符串中的字节数量并且可以放在圆括号或方括号中。如果未指定大小,则将使用默认大小,即 80 个字节。如果某个变量在初始化时所使用的字符串对于变量数据类型而言过长,则将从右到左对应地剪切字符串。
字符串长度:
对于 Latin 1 编码,类型 STRING 的变量所需的存储器空间为每个字符占 1 个字节加 1 个额外字节。这意味着 "STRING[80]"
声明需要 81 个字节。
使用 UTF-8 编码,一个字符的长度最多可达四个字节。字符串长度指示为 STRING 保留的字节数。因此,字符计数和字符串长度(以字节为单位)之间不再存在 1:1 的关系。
含 35 个字节的字符串声明示例:
str:STRING(35):='This is a String';
通常,字符串的长度不受限制。使用 Standard 库的功能执行字符串操作时,允许长度不超过 255 的字符串。使用 StringUtils 库的功能执行字符串操作时,也允许更长的(>255 个字符)字符串。
当通过复位应用程序重新初始化数据类型 STRING 的变量,将不会覆盖在初始值的终止空字符之后存在的旧字符串的内容。这同时适用于使用初始化值进行初始化和使用缺省初始化值 0 进行初始化。
有关更多信息,请参阅 WSTRING 和 STRING 常量(操作数)。
WSTRING 数据类型与 STRING 类型 (ASCII) 的区别在于:以 Unicode 格式解释,并且每个字符需要 2 个字节以及终止需要 2 字节额外存储器空间(如果是 STRING,则仅需要 1 个字节)。
WSTRING 数据类型编码为 UTF-16 格式的 Unicode。
库 standard64.lib 提供了 WSTRING 字符串的函数。
WSTRING 的字符数取决于所包含的字符。对于 WSTRING,大小为 10 时,表示 WSTRING 的长度最大可达 10 个 WORDS。对于 Unicode 中的某些字符,需要多个 WORDS 来对字符编码,这样字符数就不必与 WSTRING 的长度(在此例中为 10)一致。这种数据类型需要 1 个 WORD 的额外存储空间,因为它以 0
结尾。
如果未定义大小,则分配 80 个 WORDS 外加供终止字符使用的 1 个 0
。
示例:
wstr:WSTRING:="This is a WString";
wstr10 : WSTRING(10) := "1234567890";
有关更多信息,请参阅以下描述:
对数据类型 TIME、TIME_OF_DAY(缩短 TOD)、DATE 和 DATE_AND_TIME(缩短 DT)进行内部处理,类似于 DWORD。对数据类型 LDATE、LDATE_AND_TIME (LDT) 和 LTIME_OF_DAY (LTOD) 进行内部处理,类似于 LWORD。在 TIME 和 TOD 中,时间以毫秒为单位提供。TOD 中的时间以零时开始。DATE 中的时间以秒为单位,且 DT 从 1970 年 1 月 1 日零时开始。
LTIME 是高精度计时器的时基。LTIME 的大小为 64 位,精度为纳秒。
LTIME 的语法:
LTIME#<时间声明>
时间声明可以包含与 TIME 常量一起使用的时间单位,并且形式为:
us:微秒
ns:毫微秒
LTIME 示例:
LTIME1 := LTIME#1000d15h23m12s34ms2us44ns
有关更多信息,请参阅以下描述:
在实现功能并且其中一个功能输入 (VAR_INPUT) 具有一般 IEC 数据类型(ANY 或 ANY_<type>))时,不将调用参数的数据类型定义为具有唯一性。可以将不同数据类型的变量传送至此功能。所传送的值及其类型可以在此功能内通过预定义结构请求获得。
允许为功能输入使用基本数据类型的一般 IEC 数据类型:
一般数据类型的层级 |
基本数据类型 |
||
---|---|---|---|
ANY |
ANY_BIT |
– |
BYTE, WORD, DWORD, LWORD |
ANY_DATE |
– |
DATE_AND_TIME, DATE, TIME_OF_DAY, LDATE_AND_TIME, LDATE, LTIME_OF_DAY, |
|
ANY_NUM |
ANY_REAL |
REAL, LREAL |
|
ANY_INT |
USINT, UINT, UDINT, ULINT SINT, INT, DINT, LINT |
||
ANY_STRING |
– |
STRING, WSTRING |
示例:
FUNCTION ANYBIT_TO_BCD : DWORD
VAR_INPUT
value : ANY_BIT;
END_VAR
如果功能 ANYBIT_TO_BCD 被调用,则可以将数据类型为 BYTE, WORD, DWORD 或 LWORD 的变量作为参数传送到此功能。
预定义结构:
编译代码时,在内部用以下结构替换 ANY 数据类型:
TYPE AnyType :
STRUCT
// the type of the actual parameter
typeclass : __SYSTEM.TYPE_CLASS ;
// the pointer to the actual parameter
pvalue : POINTER TO BYTE;
// the size of the data, to which the pointer points
diSize : DINT;
END_STRUCT
END_TYPE
实际调用参数在运行时分配结构元素。
示例:
此代码示例比较两个传送的变量是否具有相同类型和相同值。
FUNCTION Generic_Compare : BOOL
VAR_INPUT
any1 : ANY;
any2 : ANY;
END_VAR
VAR
icount: DINT;
END_VAR
Generic_Compare := FALSE;
IF any1.typeclass <> any2.typeclass THEN
RETURN;
END_IF
IF any1.diSize <> any2.diSize THEN
RETURN;
END_IF
// Byte comparison
FOR icount := 0 TO any1.diSize-1 DO
IF any1.pvalue[iCount] <> any2.pvalue[iCount] THEN
RETURN;
END_IF
END_FOR
Generic_Compare := TRUE;
RETURN;
// END_FUNCTION
另请参阅 __VARINFO 操作符的说明。