运算功能的加入是现代可编程序控制器与早期可编程逻辑控制器的最大区别,目前各厂 商生产的各种型号PLC 普遍具备较强的运算功能。运算包括算术运算和逻辑运算。
4.2.1~4.2.6 节讲述的都属于算术运算,包括加、减、乘、除和一些常用的数学函数;
其余为逻辑运算,如逻辑与、逻辑或和取反等。
4.2.1 加法
加法指令是对有符号数进行相加操作。包括:整数加法、双整数加法和实数加法。
1.整数加法
+I,整数加法指令。使能输入有效时,将两个单字长(16 位)的符号整数 IN1 和 IN2 相加,产生一个16 位整数结果 OUT。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : IN1+IN2=OUT。
在STL 中,执行结果:IN1+OUT=OUT。
100 可编程序控制器应用教程(第二版)
IN1 和 IN2 的寻址范围:VW、IW、QW、MW、SW、SMW、LW、AIW、T、C、
AC、*VD、*AC、*LD 和常数。
OUT 的寻址范围:VW、IW、QW、MW、SW、SMW、LW、T、C、AC、*VD、*AC 和*LD。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)、SM1.2(负)。
使能流输出ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间接寻址)。
指令格式: +I IN1,OUT 例: +I VW0,VW4
操作数 地址单元 单元长度(字节) 运算前值 运算结果值 IN1 VW0 2 2000 2000 IN2 VW4 2 3028 5028 OUT VW4 2 3028 5028 程序实例:梯形图如图4.22 所示。
LD I0.0 //使能输入端 +I VW0, VW4
//整数加法 //VW0+VW4=VW4
图4.22 整数加法例 2.双整数加法
+D,双整数加法指令。使能输入有效时,将两个双字长(32 位)的符号双整数 IN1 和 IN2 相加,产生一个 32 位双整数结果 OUT。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : IN1+IN2=OUT。
在STL 中,执行结果:IN1+OUT=OUT。
IN1 和 IN2 的寻址范围:VD、ID、QD、MD、SD、SMD、
LD、HC、AC、*VD、*AC、*LD 和常数。
OUT 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC 和*LD。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)、SM1.2(负)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间 接寻址)。
操作数 地址单元 单元长度(字节) 运算前值 运算结果值 IN1 VD0 4 120000 120000 IN2 VD4 4 30281 150281 OUT VD4 4 30281 150281
指令格式: +D IN1,OUT 例: +D VD0,VD4 3.实数加法
+R,实数加法指令。使能输入有效时,将两个双字长(32 位)的实数 IN1 和 IN2 相 加,产生一个32 位实数结果 OUT。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : IN1+IN2=OUT。
在STL 中,执行结果:IN1+OUT=OUT。
IN1 和 IN2 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、
*LD 和常数。
OUT 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC 和*LD。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)、SM1.2(负)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间 接寻址)。
操作数 地址单元 单元长度(字节) 运算前值 运算结果值 IN1 VD0 4 200.03 200.03 IN2 VD4 4 302.815 502.845 OUT VD4 4 302.815 502.815 指令格式:+R IN1,OUT
例: +R VD0,VD4 4.2.2 减法
减法指令是对有符号数进行相减操作,包括整数减法、双整数减法和实数减法。这 3 种 减法指令与所对应的加法指令除运算法则不同之外,其他方面基本相同。
在LAD 和 FBD 中,以指令盒形式编程,执行结果:IN1-IN2=OUT。
在STL 中,执行结果: OUT- IN2=OUT。
指令格式: -I IN2, OUT (整数减法)
-D IN2, OUT (双整数减法)
-R IN2, OUT (实数减法)
例: -I AC0, VW4
102 可编程序控制器应用教程(第二版)
操作数 地址单元 单元长度(字节) 运算前值 运算结果值
IN1 VW4 2 3000 1000
IN2 AC0 2 2000 2000
OUT VW4 2 3000 1000
4.2.3 乘法
乘法指令是对有符号数进行相乘运算,包括整数乘法、完全整数乘法、双整数乘法和实 数乘法。
1.整数乘法
*I,整数乘法指令。使能输入有效时,将两个单字长(16 位)的符号整数 IN1 和 IN2 相 乘,产生一个16 位整数结果 OUT。
运算结果如果大于16 位二进制表示的范围,则产生溢出。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : IN1*IN2=OUT。
在STL 中,执行结果:IN1*OUT=OUT。
IN1 和 IN2 的寻址范围:VW、IW、QW、MW、SW、SMW、
LW、AIW、T、C、AC、*VD、*AC、*LD 和常数。
OUT 的寻址范围:VW、IW、QW、MW、SW、SMW、LW、T、C、AC、*VD、*AC 和*LD。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)、SM1.2(负)、SM1.3
(被0 除)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出);SM4.3(运行时间);0006(间接 寻址)。
指令格式:*I IN1,OUT 例: *I VW0,AC0
操作数 地址单元 单元长度(字节) 运算前值 运算结果值
IN1 VW0 2 20 20
IN2 AC0 2 400 8000
OUT AC0 2 400 8000 2.完全整数乘法
MUL,完全整数乘法指令。使能输入有效时,将两个单字长(16 位)的符号整数 IN1 和IN2 相乘,产生一个 32 位双整数结果 OUT。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : IN1*IN2=OUT。
在 STL 中,执行结果:IN1*OUT=OUT(32 位结果的低 16 位 曾被用作乘数)。
IN1 和 IN2 的寻址范围:VW、IW、QW、MW、SW、SMW、LW、AIW、T、C、
AC、*VD、*AC、*LD 和常数。
OUT 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC 和*LD。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)、SM1.2(负)、SM1.3
(被0 除)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间 接寻址)。
指令格式:MUL IN1,OUT 例: MUL AC0,VD10
操作数 地址单元 单元长度(字节) 运算前值 运算结果值
IN1 AC0 2 20 20
IN2 VW12 2 400 8000
OUT VD10 4 400 8000
注意
在梯形图中用本指令编程时,如果OUT 为存储器单元,则必须考虑到存 储器的编址特点。输入数据IN2 与 OUT 的低 16 位用的是同一单元。
3.双整数乘法
*D,双整数乘法指令。使能输入有效时,将两个双字长(32 位)的符号整数 IN1 和 IN2 相乘,产生一个 32 位双整数结果 OUT。
运算结果如果大于32 位二进制表示的范围,则产生溢出。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : IN1*IN2=OUT。
在STL 中,执行结果:IN1*OUT=OUT。
IN1 和 IN2 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、HC、AC、*VD、
*AC、*LD 和常数。
OUT 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC 和*LD。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)、SM1.2(负)、SM1.3
(被0 除)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间 接寻址)。
指令格式:*D IN1,OUT 例: *D VD0,AC0
操作数 地址单元 单元长度(字节) 运算前值 运算结果值
IN1 VD0 4 200 200
IN2 AC0 4 400 80000 OUT AC0 4 400 80000 4.实数乘法
*R,实数乘法指令。使能输入有效时,将两个双字长(32 位)的实数 IN1 和 IN2 相
104 可编程序控制器应用教程(第二版)
乘,产生一个32 位实数结果 OUT。
运算结果如果大于 32 位二进制表示的范围,则产生溢出。溢出以及输入非法参数,或 运算中产生非法值,都会使特殊标志位SM1.1 置位。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : IN1*IN2=OUT。
在STL 中,执行结果:IN1*OUT=OUT。
IN1 和 IN2 的寻址范围:VD、ID、QD、MD、SD、SMD、
LD、AC、*VD、*AC、*LD 和常数。
OUT 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC 和*LD。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出)、SM1.2(负)、SM1.3
(被0 除)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出);SM4.3(运行时间);0006(间 接寻址)。
指令格式:*R IN1,OUT 例: *R VD0,AC0
操作数 地址单元 单元长度(字节) 运算前值 运算结果值 IN1 VD0 4 20.2 20.2 IN2 AC0 4 0.8 16.16 OUT AC0 4 0.8 16.16 4.2.4 除法
除法指令是对有符号数进行相除操作。包括:整数除法、整数完全除法、双整数除 法和实数除法。这3 种除法指令与所对应的乘法指令除运算法则不同之外,其他方面基 本相同。
在LAD 和 FBD 中,以指令盒形式编程,执行结果:IN1/IN2=OUT。
在STL 中,执行结果: OUT/ IN2=OUT。
指令格式:/I IN2, OUT (整数除法)
DIV IN2, OUT (整数完全除法)
/D IN2, OUT (双整数除法)
/R IN2, OUT (实数除法)
在整数除法中,两个 16 位的整数相除,产生一个 16 位的整数商,不保留余数。双整数除 法也是同样的过程,只是位数变为32 位。
在整数完全除法中,两个 16 位的符号整数相除,产生一个 32 位结果,其中,低 16 位 为商,高16 位为除数。32 位结果的低 16 位在运算前被兼用存放被除数。
例:DIV VW10, VD100 /I VW20, VW200
两条指令的编程及执行情况比较如图4.23 所示。
LD I0.0 //使能输入端 DIV VW10, VD100 //完全除法 //VW102/VW10=VD100
LD I0.1 //使能输入端 /I VW20, VW200 //整数除法 //VW200/VW20=VW200
图4.23 除法指令应用 对于完全除法指令:
操作数 地址单元 单元长度(字节) 运算前值 运算结果值 IN1 VW102 2 2003 50
IN2 VW10 2 40 40
VW100 3 OUT VD100 4 203
VW102 50 对于除法指令:
操作数 地址单元 单元长度(字节) 运算前值 运算结果值
IN1 VW200 2 2003 50
IN2 VW20 2 40 40
OUT VW200 2 400 50
4.2.5 数学函数指令
本小节介绍几个常用的数学函数指令(也称数学功能指令):平方根、自然对数、指 数、正弦、余弦和正切。
这几条指令中的 IN 寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、
*AC、*LD 和常数。
OUT 的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC 和*LD。
运算输入输出数据都为实数。结果如果大于32 位二进制表示的范围,则产生溢出。
1.平方根
SQRT,平方根指令。把一个双字长(32 位)的实数 IN 开平方,得到 32 位的实数结果。
106 可编程序控制器应用教程(第二版)
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : SQRT(IN)=OUT。
在STL 中,执行结果:SQRT(IN)=OUT。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出和非 法值)、SM1.2(负)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间 接寻址)。
指令格式: SQRT IN,OUT
例: SQRT VD0,AC0 2.自然对数
LN,自然对数指令。将一个双字长(32 位)的实数 IN 取自然对数,得到 32 位的实数 结果。
当求解以10 为底的常用对数时,可以用(/R)DIV_R 指令将自然对数除以 2.302585 即 可(LN10 的值约为 2.302585)。
在 LAD 和 FBD 中 , 以 指 令 盒 形 式 编 程 , 执 行 结 果 : LN(IN)=OUT。
在STL 中,执行结果:LN(IN)=OUT。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出和非 法值)、SM1.2(负)、SM4.3(运行时间)。
使能流输出ENO 断开的出错条件:SM1.1(溢出)、0006(间接寻址)。
指令格式: LN IN,OUT 例: LN VD0,AC0
应用实例:求以10 为底的 50(存于 VD0)的常用对数,结果放到 AC0。
本运算程序如图4.24 所示。
LD I0.0 //使能输入 LN VD0, AC0 //
//自然对数 //Ln(VD0)=AC0
LN 10.0, VD100 //
//自然对数 //Ln(10)=VD100
/R VD100, AC0 //
//实数除法指令
//AC0/VD100=VD100
图4.24 自然对数的应用
3.指数
EXP,指数指令。将一个双字长(32 位)的实数 IN 取以 e 为底的指数,得到 32 位的实 数结果OUT。
在LAD 和 FBD 中,以指令盒形式编程,执行结果:EXP(IN)=OUT。
在STL 中,执行结果:EXP(IN)=OUT。
本指令影响的特殊存储器位:SM1.0(零)、SM1.1(溢出和非 法值)、SM1.2(负)、SM4.3(运行时间)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、0006(间 接寻址)。
指令格式: EXP IN, OUT 例: EXP VD0, AC0
若求解以任意常数为底的指数,可以用指数指令和自然对数指令相配合来完成。例如:
18 的 6 次方=18^6=EXP(6*LN(18)) 4.正弦、余弦、正切
SIN、COS、TAN,即正弦、余弦、正切指令。将一个双字长(32 位)的实数弧度值 IN
SIN、COS、TAN,即正弦、余弦、正切指令。将一个双字长(32 位)的实数弧度值 IN