比较
一.比较数值
比较指令可以对两个数据类型相同的数值进行比较。 您可以比较字节、整数、双整数和实数。
对于 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 使用的类型
数据类型标识符
所需 IN1IN2 数据类型
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
所有比较指令的有效操作数
输入/输出
数据类型
操作数
IN1IN2
BYTE
IBQBVBMBSMBSBLBAC*VD*LD*AC、常数
INT
IWQWVWMWSMWSWTCLWACAIW*VD*LD*AC、常数
DINT
IDQDVDMDSMDSDLDACHC*VD*LD*AC、常数
REAL
IDQDVDMDSMDSDLDAC*VD*LD*AC、常数
OUT
BOOL
LAD 能流
FBD IQVMSMSTCL、逻辑流
说明
以下条件会导致非致命错误,将能流设置为 OFFENO = 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
VBLB*VD*LD*AC、常数字符串
IN2
STRING
VBLB*VD*LD*AC
OUT
BOOL
LAD:能流
FBDIQVMSMSTCL、逻辑流
说明
以下条件会导致非致命错误,将能流设置为 OFFENO = 0),并且使用值 0 作为比较结果
遇到非法间接地址(任意比较指令)
遇到长度大于 254 个字符的变量字符串(比较字符串指令)
变量字符串的起始地址和长度使其不适合所指定的存储区(比较字符串指令)
为了避免这些情况的发生,首先应确保正确初始化指针以及用于保留 ASCII 字符串的存储单元,然后再执行使用这些值的比较指令。 确保为 ASCII 字符串预留的缓冲区能够完全放入指定的存储区。
不管能流的状态如何,都会执行比较指令。
STRING 数据类型的格式
字符串变量是一个字符序列,其中的每个字符都以字节的形式存储。 STRING 数据类型的第一个字节定义字符串的长度,即字符字节数。
下图显示在存储器中以变量形式存储的 STRING 数据类型。 字符串的长度可以是 0 254 个字符。 变量字符串的最大存储要求为 255 个字节(长度字节加上 254 个字符)。
如果直接在程序编辑器中输入常数字符串参数(最多 126 个字符),或在数据块编辑器中初始化变量字符串(最多 254 个字符),则字符串赋值必须以双引号字符开始和结束。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。