运算符
CODESYS V3 支持所有 IEC 61131-3 运算符。这些运算符在整个项目中都得到隐式识别。除了这些 IEC 运算符之外, CODESYS 还支持一些非IEC 61131-3操作员。
运算符用于块中,例如函数。
提示
有关 ST 运算符的处理顺序(结合强度)的信息,请参阅“ST 表达式”一章。
小心
对于浮点数据类型的运算,计算结果取决于所应用的目标系统硬件。
小心
对于数据类型溢出或下溢的运算,计算结果取决于所应用的目标系统硬件。
数据类型的上溢/下溢
这 CODESYS 编译器为目标设备生成代码,并始终使用目标设备定义的本机大小计算临时结果。例如,在 x86 和 ARM 系统上至少使用 32 位临时值执行计算,在 x64 系统上始终使用 64 位临时值执行计算。这在计算速度方面提供了相当大的优势,并且通常还会产生所需的结果。但这也意味着在某些情况下数据类型的溢出或下溢不会被截断。
示例 1
此加法的结果不会被截断,并且结果为 dwVar
是 65536
。
VAR wVar : WORD; dwVar: DWORD; END_VAR wVar := 65535; dwVar := wVar + 1;
示例 2
数据类型的上溢和下溢不会被截断,结果(bVar1, bVar2
)两个比较的结果都是 FALSE
在 32 位和 64 位硬件上。
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := (wVar1 + 1) = wVar2; bVar2 := (wVar2 - 1) = wVar1;
示例 3
通过分配给 wVar3
,该值将被截断为目标数据类型 WORD
结果 bvar1
是 TRUE
。
VAR wVar1 : WORD; wVar2 : WORD; wVar3 : WORD; bVar1 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; wVar3 := (wVar1 + 1); bVar1 := wVar3 = wVar2;
示例 4
为了强制编译器截断临时结果,可以插入转换。
类型转换确保两个比较都是 16 位的,并且结果(bVar1, bVar2
)两个比较的 TRUE
。
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := TO_WORD(wVar1 + 1) = wVar2; bVar2 := TO_WORD(wVar2 - 1) = wVar1;
算术运算符
位串运算符
移位运算符
选择运算符
比较运算符
比较运算符是比较两个输入(第一个和第二个操作数)的布尔值。
地址运算符
呼叫操作员
类型转换运算符
您可以显式调用类型转换运算符。下面描述的类型转换运算符可用于从一种基本类型到另一种基本类型的类型转换,以及重载。从“较大”类型到“较小”类型的转换也是隐式可能的(例如,从 INT
到 BYTE
或来自 DINT
到 WORD
)。
类型转换: <elementary data type> _TO_ another elementary data type>
重载转换: TO_ <elementary data type>
基本数据类型
<elementary data type> = __UXINT | __XINT | __XWORD | BIT | BOOL | BYTE | DATE | DATE_AND_TIME | DINT | DT | DWORD | INT | LDATE | LDATE_AND_TIME | LDT | LINT | LREAL | LTIME | LTOD | LWORD | REAL | SINT | TIME | TOD | UDINT | UINT | ULINT | USINT | WORD
关键词 T
, TIME_OF_DAY
和 DATE_AND_TIME
是数据类型的替代形式 TIME
, TOD
, 和 DT
。 T
, TIME_OF_DAY
和 DATE_AND_TIME
不表示为类型转换命令。
重要
如果类型转换运算符的操作数值超出目标数据类型的值范围,则结果输出取决于处理器类型,因此未定义。例如,当负操作数值从 LREAL
目标数据类型 UINT
。
从较大的数据类型转换为较小的数据类型时,信息可能会丢失。
转换为时的字符串操作 STRING
或者 WSTRING
将类型转换为 STRING
或者 WSTRING
,输入的值作为字符串左对齐,如果太长会被截断。因此,声明类型转换运算符的返回变量 <>_TO_STRING
和 <>_TO_WSTRING
足够长,使得字符串有足够的空间而无需进行任何操作。
数字运算符
命名空间运算符
命名空间运算符是从 IEC 61131-3 运算符扩展而来。它们使您能够提供对变量和模块的唯一访问,即使您在项目中多次对变量或模块使用相同的名称。
多核运算符
处理不同的任务需要同步这些任务。在多核平台上工作时尤其如此。 CODESYS 提供了一些特殊的操作符来支持这种同步。
这些运算符是 IEC-61131-3 的扩展。运算符 TEST_AND_SET
和 __COMPARE_AND_SWAP
用于类似的任务。