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
数据类型中的溢出和下溢不会被截断,在 32 位和 64 位硬件上,两种比较的结果 (bVar1, bVar2
) 都是FALSE
。
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
用于类似的任务。