比较
一.比较数值
比较指令可以对两个数据类型相同的数值进行比较。 您可以比较字节、整数、双整数和实数。
对于 LAD 和 FBD: 比较结果为 TRUE 时,比较指令将接通触点(LAD 程序段能流)或输出(FBD 逻辑)。
对于 STL: 比较结果为 TRUE 时,比较指令可装载 1、将 1 与逻辑栈顶中的值进行“与”运算或者“或”运算。
有六种比较类型可用
比较类型 | 输出仅在以下条件下为 TRUE |
==(LAD/FBD) | IN1 等于 IN2 |
=(STL) | |
<> | IN1 不等于 IN2 |
>= | IN1 大于或等于 IN2 |
<= | IN1 小于或等于 IN2 |
> | IN1 大于 IN2 |
< | IN1 小于 IN2 |
选择的数据类型决定了需要为 IN1 和 IN2 使用的类型
数据类型标识符 | 所需 IN1、IN2 数据类型 |
B | 无符号字节 |
W | 有符号字整数 |
D | 有符号双字整数 |
R | 有符号实数 |
比较指令(仅显示“等于”LAD/FBD 比较类型)
LAD 触点 FBD 功能框 | STL | 比较结果 |
LDB= IN1, IN2 OB= IN1, IN2 AB= IN1, IN2 | 比较两个无符号字节值: 如果 IN1 = IN2,则结果为 TRUE | |
LDW= IN1, IN2 OW= IN1, IN2 AW= IN1, IN2 | 比较两个有符号整数值: 如果 IN1 = IN2,则结果为 TRUE | |
LDD= IN1, IN2 OD= IN1, IN2 AD= IN1, IN2 | 比较两个有符号双整数值: 如果 IN1 = IN2,则结果为 TRUE | |
LDR= IN1, IN2 OR= IN1, IN2 AR= IN1, IN2 | 比较两个有符号实数值: 如果 IN1 = IN2,则结果为 TRUE | |
所有比较指令的有效操作数
输入/输出 | 数据类型 | 操作数 |
IN1、IN2 | BYTE | IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数 |
INT | IW、QW、VW、MW、SMW、SW、T、C、LW、AC、AIW、*VD、*LD、*AC、常数 | |
DINT | ID、QD、VD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC、常数 | |
REAL | ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC、常数 | |
OUT | BOOL | LAD: 能流 FBD: I、Q、V、M、SM、S、T、C、L、逻辑流 |
说明
以下条件会导致非致命错误,将能流设置为 OFF(ENO 位 = 0),并且使用值 0 作为比较结果
∙ 遇到非法间接地址(任意比较指令)
∙ 遇到非法实数(例如 NaN)(比较实数指令)
为了避免这些情况的发生,首先应确保正确初始化指针以及包含实数的值,然后再执行使用这些值的比较指令。
不管能流的状态如何,都会执行比较指令。
比较值示例
LAD | STL | |
激活 I0.1,以便在 V 存储器地址中装载较小的值,使比较结果为 FALSE,并将状态指示灯设为 OFF。 | Network 1 LD I0.1 MOVW -30000, VW0 MOVD -200000000, VD2 MOVR 1.012E-006, VD6 | |
激活 I0.2 以便在 V 存储器地址中装载较大的值,使比较结果为 TRUE,并将状态指示灯设为 ON。 | Network 2 LD I0.2 MOVW +30000, VW0 MOVD -100000000, VD2 MOVR 3.141593, VD6 | |
激活 I0.3,以执行比较。 整数字比较测试 VW0 > +10000 是否为 TRUE。 还可以比较存储在可变存储器中的两个值,例如 VW0 > VW100。 | Network 3 LD I0.3 LPS AW> VW0, +10000 = Q0.2 LRD AD< -150000000, VD2 = Q0.3 LPP AR> VD6, 5.001E-006 = Q0.4 | |
二.比较字符串
比较字符串指令可比较两个 ASCII 字符串。
对于 LAD 和 FBD: 比较结果为 TRUE 时,比较指令将接通触点 (LAD) 或输出 (FBD)。
对于 STL: 比较结果为 TRUE 时,比较指令可装载 1、将 1 与逻辑栈顶中的值进行“与”运算或者“或”运算。
可以在两个变量或一个常数和一个变量之间进行比较。 如果比较中使用了常数,则它必须为顶部参数(LAD 触点/ FBD 功能框)或第一参数 (STL)。
在程序编辑器中,常数字符串参数赋值必须以双引号字符开始和结束。 常数字符串条目的最大长度是 126 个字符(字节)。
相反,变量字符串由初始长度字节的字节地址引用,字符字节存储在下一个字节地址处。 字符串长度必须大于0变量字符串的最大长度为 254 个字符(字节),并且可在数据块编辑器进行初始化(前后带双引号字符)。
比较字符串指令
LAD 触点 FBD 功能框 | STL | 说明 |
LDS= IN1, IN2 OS= IN1, IN2 AS= IN1, IN2 | 比较两个 STRING 数据类型的字符串: 如果字符串 IN1 等于字符串 IN2,则结果为 TRUE。 | |
LDS<> IN1, IN2 OS<> IN1, IN2 AS<> IN1, IN2 | 比较两个 STRING 数据类型的字符串: 如果字符串 IN1 不等于字符串 IN2,则结果为 TRUE。 | |
有效操作数
输入/输出 | 数据类型 | 操作数 |
IN1 | STRING | VB、LB、*VD、*LD、*AC、常数字符串 |
IN2 | STRING | VB、LB、*VD、*LD、*AC |
OUT | BOOL | LAD:能流 |
FBD:I、Q、V、M、SM、S、T、C、L、逻辑流 | ||
说明 以下条件会导致非致命错误,将能流设置为 OFF(ENO 位 = 0),并且使用值 0 作为比较结果 ∙ 遇到非法间接地址(任意比较指令) ∙ 遇到长度大于 254 个字符的变量字符串(比较字符串指令) ∙ 变量字符串的起始地址和长度使其不适合所指定的存储区(比较字符串指令) 为了避免这些情况的发生,首先应确保正确初始化指针以及用于保留 ASCII 字符串的存储单元,然后再执行使用这些值的比较指令。 确保为 ASCII 字符串预留的缓冲区能够完全放入指定的存储区。 不管能流的状态如何,都会执行比较指令。 |
STRING 数据类型的格式
字符串变量是一个字符序列,其中的每个字符都以字节的形式存储。 STRING 数据类型的第一个字节定义字符串的长度,即字符字节数。
下图显示在存储器中以变量形式存储的 STRING 数据类型。 字符串的长度可以是 0 到 254 个字符。 变量字符串的最大存储要求为 255 个字节(长度字节加上 254 个字符)。
如果直接在程序编辑器中输入常数字符串参数(最多 126 个字符),或在数据块编辑器中初始化变量字符串(最多 254 个字符),则字符串赋值必须以双引号字符开始和结束。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论