说明 算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达式组合而成。 算术运算符可以处理当前 CPU 所支持的各种数据类型。如果在该运算中有 2 个操作数,那么可根据以下条件来确定结果的数据类型:
如果这 2 个操作数均为有符号的整数,但长度不同,那么结果将采用长度较长的那个整数数据类型(例如,INT + DINT = DINT)。
如果这 2 个操作数均为无符号整数,但长度不同,那么结果将采用长度较长的那个整数数据类型(例如,USINT + UDINT = UDINT)。
如果一个操作数为有符号整数,另一个为无符号整数,那么结果将采用另一个长度较大的有符号数据类型(其包含此无符号整数)(例如,SINT + USINT = INT) 只有在未设置 IEC 检查时,才能执行具有此类操作数的运算。
如果一个操作数为整数,另一个为浮点数,那么结果将采用浮点数的数据类型(例如,INT + REAL = REAL)。
如果 2 个操作数均为浮点数,但长度不同,结果将采用长度较长的那个浮点数的数据类型(例如,REAL + LREAL = LREAL)。
对于操作数为“时间”和“日期和时间”数据类型组,运算结果的数据类型请参见“算术表达式的数据类型”部分的表格。 设置了 IEC 检查时,不能使用数据类型组“时间”和“日期和时间”的数据类型。
算术表达式的数据类型
下表列出了在算术表达式中可使用的数据类型:
运算 | 运算符 | 个操作数 | 第二个操作数 | 结果 |
---|---|---|---|---|
幂运算 | ** | 整数/浮点数 | 整数/浮点数 | 浮点数 |
一元加 | + | 整数/浮点数 TIME, LTIME | - | 整数/浮点数 TIME, LTIME |
一元减 | - | 整数/浮点数 TIME, LTIME | - | 整数/浮点数 TIME, LTIME |
乘法 | * | 整数/浮点数 | 整数/浮点数 | 整数/浮点数 |
TIME, LTIME | 整数 | TIME, LTIME | ||
除法 | / | 整数/浮点数 | 整数/浮点数(不等于 0) | 整数/浮点数 |
TIME, LTIME | 整数 | TIME, LTIME | ||
模运算 | MOD | 整数 | 整数 | 整数 |
加法 | + | 整数/浮点数 | 整数/浮点数 | 整数/浮点数 |
TIME | TIME | TIME | ||
TIME | DINT | TIME | ||
LTIME | TIME, LTIME | LTIME | ||
LTIME | LINT | LTIME | ||
TOD | TIME | TOD | ||
TOD | DINT | TOD | ||
LTOD | TIME, LTIME | LTOD | ||
LTOD | LINT | LTOD | ||
DATE | LTOD | DTL | ||
DATE | TOD | S7-300/400:DT S7-1200/1500:DTL | ||
DT | TIME | DT | ||
LDT | TIME, LTIME | LDT | ||
DTL | TIME, LTIME | DTL | ||
减法 | - | 整数/浮点数 | 整数/浮点数 | 整数/浮点数 |
TIME | TIME | TIME | ||
TIME | DINT | TIME | ||
LTIME 1) | TIME、LTIME | LTIME | ||
LTIME | LINT | LTIME | ||
TOD | TIME | TOD | ||
TOD | DINT | TOD | ||
TOD | TOD | TIME | ||
LTOD | TIME、LTIME | LTOD | ||
LTOD | LINT | LTOD | ||
LTOD | LTOD | LTIME | ||
DATE | DATE | S7-300/400/1200:TIME S7-1500:LTIME | ||
DT | TIME | DT | ||
DT | DT | TIME | ||
LDT | TIME, LTIME | LDT | ||
DTL | TIME, LTIME | DTL | ||
DTL | DTL | S7-1200:TIME S7-1500:LTIME | ||
1) 表达式中不允许同时使用纳秒和毫秒。 |
有关有效数据类型的更多信息,请参见“另请参见”。
示例
以下为一个算术表达式的示例:
SCL
“MyTag1”:= “MyTag2” * “MyTag3”;