图5-18 例5-12题图
注意:因为VD100包含:VW100和VW102两个字,VD200包含:VW200和VW202两个字,所以在语句表指令中不需要使用数据传送指令。
3. 实数加减乘除指令
实数加法(ADD-R)、减法(SUB-R)指令:将两个32位实数相加或相减,并产生一个32位实数结果,从OUT指定的存储单元输出。
实数乘法(MUL-R)、除法(DIV-R)指令:使能输入有效时,将两个32位实数相乘(除),并产生一个32位积(商),从OUT指定的存储单元输出。
操作数:IN1/IN2: VD, ID, QD, MD, SMD, SD, LD, AC, 常量, *VD, *LD, *AC。
OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, *LD, *AC 。
数据类型:实数。
指令格式如表5-16所示。
表5-16 实数加减乘除指令
LAD STL 功能 ENO=0的错误条件 对标志位的影响 MOVD IN1,OUT +R IN2,0UT IN1+IN2=OUT MOVD IN1,OUT -R IN2,0UT IN1-IN2=OUT MOVD IN1,OUT *R IN2,0UT IN1*IN2=OUT MOVD IN1,OUT /R IN2,0UT IN1/IN2=OUT 0006 间接地址, SM4.3 运行时间, SM1.1 0006 间接地址 ,SM1.1 溢出,SM4.3 运行时间,溢出 SM1.3 除数为0 SM1.0(零),SM1.1(溢出) , SM1.2(负数),SM1.3 (被0除) 【例5-13】实数运算指令的应用,程序如图5-19所示。
LD I0.0 +R AC1, VD100 /R VD100, AC0
图5-19 例5-13题图
4. 数学函数变换指令
数学函数变换指令包括平方根、自然对数、指数、三角函数等。 (1)平方根(SQRT)指令:对32位实数(IN)取平方根,并产生一个32位实数结果,从OUT指定的存储单元输出。
(2)自然对数(LN)指令:对IN中的数值进行自然对数计算,并将结果置于OUT指定的存储单元中。
求以10为底数的对数时,用自然对数除以2.302585(约等于10的自然对数)。
(3)自然指数(EXP)指令:将IN取以e为底的指数,并将结果置于OUT指定的存储单元中。
将“自然指数”指令与“自然对数”指令相结合,可以实现以任意
数为底,任意数为指数的计算。求yx,输入以下指令:EXP (x * LN (y))。
例如:求23=EXP(3*LN(2))=8;27的3次方根=271/3=EXP(1/3*LN(27))=3。
(4)三角函数指令:将一个实数的弧度值IN分别求SIN、COS、TAN,得到实数运算结果,从OUT指定的存储单元输出。
函数变换指令格式及功能如表5-17所示。
表5-17 函数变换指令格式及功能
LAD STL SQRT IN,OUT 功能 SQRT(IN)=OUT IN: VD, ID, QD, MD, SMD, SD, LD, AC, 常量, *VD, *LD, *AC OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, *LD, *AC 数据类型:实数 LN IN,OUT EXP IN,OUT SIN IN,OUT COS IN,OUT TAN IN,OUT LN(IN)=OUT EXP(IN)=OUT SIN(IN)=OUT COS(IN)=OUT TAN(IN)=OUT 操作数及数据类型 使ENO = 0的错误条件:0006(间接地址),SM1.1(溢出)SM4.3(运行时间) 对标志位的影响:SM1.0(零),SM1.1(溢出),SM1.2(负数) 【例5-14】求45o正弦值。 分析:先将45o转换为弧度:(3.14159/180)*45,再求正弦值。程序如图5-20所示。
LD I0.1
MOVR 3.14159, AC1 /R 180.0, AC1 *R 45.0, AC1 SIN AC1, AC0
图5-20 例5-14题图
5.2.2 逻辑运算指令
逻辑运算是对无符号数按位进行与、或、异或和取反等操作。操作数的长度有B、W、DW。指令格式如表5-18所示。
1. 逻辑与(WAND)指令:将输入IN1,IN2按位相与,得到的逻辑运算结果,放入OUT指定的存储单元。
2. 逻辑或(WOR)指令:将输入IN1,IN2按位相或,得到的逻辑运算结果,放入OUT指定的存储单元。
3. 逻辑异或(WXOR)指令:将输入IN1,IN2按位相异或,得到的逻辑运算结果,放入OUT指定的存储单元。
4. 取反(INV)指令:将输入IN按位取反,将结果放入OUT指定的存储单元。
表5-18 逻辑运算指令格式
LAD ANDB IN1,OUT STL 功能 B 操作数 DW W ANDW IN1,OUT ANDD IN1,OUT IN1,IN2按位相与 ORB IN1,OUT ORW IN1,OUT ORD IN1,OUT IN1,IN2按位相或 XORB IN1,OUT XORW IN1,OUT XORD IN1,OUT IN1,IN2按位异或 INVB OUT INVW OUT INVD OUT 对IN取反 IN1/IN2:VB, IB, QB, MB, SB, SMB, LB, AC, 常量, *VD, *AC, *LD OUT:VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD IN1/IN2:VW, IW, QW, MW, SW, SMW, T, C, AC, LW, AIW, 常量, *VD, *AC, *LD OUT:VW, IW, QW, MW, SW, SMW, T, C, LW, AC, *VD, *AC, *LD OUT:VD, ID, QD, MD, SMD, LD, AC, *VD, *AC, SD, *LD IN1/IN2:VD, ID, QD, MD, SMD, AC, LD, HC, 常量, *VD, *AC, SD, *LD 说明:
(1)在表5-18中,在梯形图指令中设置IN2和OUT所指定的存储单元相同,这样对应的语句表指令如表中所示。若在梯形图指令中,IN2(或IN1)和OUT所指定的存储单元不同,则在语句表指令中需使用数据传送指令,将其中一个输入端的数据先送入OUT,在进行逻辑运算。如MOVB IN1,OUT ANDB IN2,OUT
(2)ENO=0的错误条件:0006 间接地址,SM4.3 运行时间
(3)对标志位的影响:SM1.0(零)
【例5-15】逻辑运算编程举例,程序如图5-21所示。
//字节与操作 LD I0.0 ANDB VB1, VB2 //字或操作
MOVW VW100, VW300 ORW VW200, VW300 //双字异或操作 XORD AC0, AC1 //字节取反操作 MOVB VB5, VB6 INVB VB6
图5-21 例5-15题图
运算过程如下:
VB1 VB2 VB2 0001 1100 WAND 1100 1101 → 0000 1100 VW100 VW200 VW300
0001 1101 1111 1010 WOR 1110 0000 1101 1100→ 1111 1101 1111 1110 VB5 VB6 0000 1111 INV 1111 0000
5.2.3 递增、递减指令
递增、递减指令用于对输入无符号数字节、符号数字、符号数双字进行加1或减1的操作。指令格式如表5-19所示。
1. 递增字节(INC-B)/递减字节(DEC-B)指令
递增字节和递减字节指令在输入字节(IN)上加1或减1,并将结果置入OUT指定的变量中。递增和递减字节运算不带符号。
2. 递增字(INC-W)/递减字(DEC-W)指令
递增字和递减字指令在输入字(IN)上加1或减1,并将结果置入OUT。递增和递减字运算带符号(16#7FFF > 16#8000)。
3.递增双字(INC-DW)/递减双字(DEC-DW)指令
递增双字和递减双字指令在输入双字(IN)上加1或减1,并将结果置入OUT。递增和递减双字运算带符号(16#7FFFFFFF > 16#80000000)。
表5-19 递增、递减指令格式
LAD STL 功能 操作及数据类型 INCB OUT 字节加1 DECB OUT 字节减1 INCW OUT 字加1 DECW OUT 字减1 INCD OUT 双字加1 DECD OUT 双字减1 IN:VB, IB, QB, MB, SB, IN: VW, IW, QW, MW, SW, SMB, LB, AC, 常量, *VD, SMW, AC, AIW, LW, T, C, 常量, *LD, *AC SMB, LB, AC, *VD, *LD, *AC IN/OUT数据类型:字节 *VD, *LD, *AC SMW, LW, AC, T, C, *VD, *LD, *AC 数据类型:整数 OUT:VB, IB, QB, MB, SB, OUT:VW, IW, QW, MW, SW, IN:VD, ID, QD, MD, SD, SMD, LD, AC, HC, 常量, *VD, *LD,*AC OUT;VD, ID, QD, MD, SD, SMD, LD, AC, *VD, *LD, *AC 数据类型:双整数 说明: (1)使ENO = 0的错误条件:SM4.3(运行时间),0006(间接地址),SM1.1溢出) (2)影响标志位:SM1.0 (零),SM1.1(溢出),SM1.2(负数)。
(3)在梯形图指令中,IN和OUT可以指定为同一存储单元,这样可以节省内存,在语句表指令中不需使用数据传送指令。
5.2.4 运算单位转换实训
1. 实训目的
(1)掌握算术运算指令和数据转换指令的应用。 (2)掌握建立状态表及通过强制调试程序的方法。
(3)掌握在工程控制中,进行运算单位转换的的方法及步骤。 2. 实训内容
将英寸转换成厘米,已知C10的当前值为英寸的计数值,1英寸=2.54厘米。 3. 写入程序、编译并下载到PLC
分析:将英寸转换为厘米的步骤为:将C10中的整数值英寸→双整数英寸→实数英寸→实数厘米→整数厘米。参考程序如图5-22所示。