TA的每日心情 | 奋斗 2021-4-29 09:49 |
---|
签到天数: 46 天 连续签到: 1 天 [LV.5]常住居民I
|
本帖最后由 安宏宁 于 2020-7-20 23:33 编辑
版权声明:本文为CSDN博主「安宏宁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/anhongning123/article/details/105696632
原文稍微全一点
使用平台是 TIA Portal 15.1 ,文章内容都经过项目测试,不喜勿喷。
注意:
1.部分数据类型在1200中不被支持或者有限支持,具体可以查看博图的帮助文档。
2.本教程在举例的时候也会对部分函数进行标记。
3.本教程为扩展资料,并不和竞赛资料相呼应,这点注意!
算数运算: 算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达式组合而成。
基本的数据类型转换,
基本规律:基本依据隐式转换规则,即多类型的运算结果总是数据类型级别较高或者范围较大的数据类型。
具体区分如下:
算术运算符可以处理当前 PLC 所支持的各种数据类型。操作中有两个操作数,可根据以下条件来确定结果的数据类型:如果这 2 个操作数均为有符号的整数,但长度不同,那么结果将采用长度较长的那个整数数据类型(例如,INT + DINT = DINT)。
1.如果这 2 个操作数均为无符号整数,但长度不同,那么结果将采用长度较长的那个整数数据类型(例如,USINT + UDINT = UDINT)。
2.如果一个操作数为有符号整数,另一个为无符号整数,那么结果将采用另一个长度较大的有符号数据类型(其包含此无符号整数)(例如,SINT + USINT = INT)
3.只有在未设置 IEC 检查时,才能执行具有此类操作数的运算;
4.如果一个操作数为整数,另一个为浮点数,那么结果将采用浮点数的数据类型(例如,INT + REAL = REAL);
5.如果 2 个操作数均为浮点数,但长度不同,结果将采用长度较长的那个浮点数的数据类型(例如,REAL + LREAL = LREAL);
6.对于操作数为“时间”和“日期和时间”数据类型组,运算结果的数据类型请参见下面的表格;
7.设置了 IEC 检查时,不能使用数据类型组“时间”和“日期和时间”的数据类型。
[/url]
算术表达式的数据类型
[td] 运算 | 运算符 | 第一个操作数 | 第二个操作数 | 结果 | 幂运算 | ** | 整数/浮点数 | 整数/浮点数 | 浮点数 | 一元加 | + | 整数/浮点数 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
|
逻辑表达式的数据类型
运算 | 运算符 | 第一个操作数 | 第二个操作数 | 结果 | 取反(求反码) | NOT | BOOL | - | BOOL | 位字符串 | - | 位字符串 | “与”运算 | AND 或 & | BOOL | BOOL | BOOL | 位字符串 | 位字符串 | 位字符串 | “或”运算 | OR | BOOL | BOOL | BOOL | 位字符串 | 位字符串 | 位字符串 | “异或”运算 | XOR | BOOL | BOOL | BOOL | 位字符串 | 位字符串 | 位字符串 |
基本运算符的优先级
运算符 | 运算 | 优先级 | 算术表达式 | | 一元加 | 2 | | 一元减 | 2 | | 幂运算 | 3 | | 乘法 | 4 | | 除法 | 4 | | 模运算 | 4 | | 加法 | 5 | | 减法 | 5 | | 组合赋值运算 | 11 | 关系表达式 | | 小于 | 6 | | 大于 | 6 | | 小于等于 | 6 | | 大于等于 | 6 | | 等于 | 7 | | 不等于 | 7 | 逻辑表达式 | | 取反 | 3 | | “与”运算 | 8 | | “异或”运算 | 9 | | “或”运算 | 10 | 引用表达式 | | 引用 | | | 取消引用 | 1 | | 赋值尝试 | 11 | 其它运算 | | 括号 | 1 | | 赋值 | 11 |
关系表达式的数据类型
[td]运算 | 运算符 | 第一个操作数 | 第二个操作数 | 结果 | 比较:等于、不等于 | =、<> | 整数/浮点数 | 整数/浮点数 | BOOL | 位字符串 | 位字符串 | BOOL | 字符串 | 字符串 | BOOL | TIME、LTIME | TIME、LTIME | BOOL | 日期和时间 | 日期和时间 | BOOL | VARIANT/ANY | VARIANT/ANY | BOOL | 任何数据类型(但必须与 VARIANT 的变量数据类型相对应) | VARIANT/ANY | BOOL | VARIANT/ANY | 任何数据类型 | BOOL | PLC 数据类型 | PLC 数据类型 | BOOL | ARRAY of <数据类型>,ARRAY 限值固定/可变 | ARRAY of <数据类型>,ARRAY 限值固定/可变 | BOOL | STRUCT | STRUCT | BOOL | 比较:小于、小于等于、大于、大于等于 | <、<=、>、>= | 整数/浮点数 | 整数/浮点数 | BOOL | 位字符串 (仅 S7-1200/1500) | 位字符串 (仅 S7-1200/1500) | BOOL | 字符串 | 字符串 | BOOL | TIME、LTIME | TIME、LTIME | BOOL | 日期和时间 | 日期和时间 | BOOL |
*使用默认数据类型的 SCL 指令 用来执行块编程的 SCL 指令使用特定的数据类型来计算函数值。某些 SCL 指令仅支持使用特定的数据类型。无法更改这些指令的数据类型。但是,大部分 SCL 指令都支持使用多种数据类型,此等指令区分为以下两种类型:
- 函数值数据类型由输入参数数据类型确定的指令。大部分指令都属于这种情况。
- 使用默认数据类型的指令。下表列出的指令便属于此类型。
指令 | 默认数据类型 | CEIL | DINT | DECO | DWORD | FLOOR | DINT | NORM_X | REAL | PEEK | BYTE | SCALE_X | INT | TRUNC | DINT | CONCAT | STRING | T_DIFF | TIME |
|
|