若(AC2)=2,执
行译码指令,则将输出字VW40的第二位置1,VW40中的二进制数为2#0000 0000 0000 0100;若(AC3)=2#0000 0000 0000 0100,执行编码指令,则输出字节VB50中的错误码为2。
6. 七段显示译
图5-12 与七段显示码
码指令
对应的代码
七段显示器的abcdefg段分别对应于字节的第0位~第6位,字节的某位为1时,其对应的段亮;输出字节的某位为0时,其对应的段暗。将字节的第7位补0,则构成与七段显示器相对应的8位编码,称为七段显示码。数字0~9、字母A~F与七段显示码的对应如图5-12所示。
七段译码指令SEG将输入字节16#0~F转换成七段显示码。指令格如表5-12所示。
表5-12七段显示译码指令
LAD STL 功能及操作数 功能:将输入字节(IN)的低四位确定的16进制数(16#0~F),产生相应的七段显示码,送入输出字节OUT IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。 OUT:VB, IB, QB, MB, SMB, LB, AC。IN/OUT的数据类型:字节 SEG IN,OUT 使ENO = 0的错误条件:0006 间接地址,SM4.3 运行时间。
【例5-9】编写显示数字0的七段显示码的程序。程序实现如图5-13所示。
LD I0.1 SEG 0, AC1
图5-13 例5-9题图
程序运行结果为AC1中的值为16#3F(2#0011 1111)。 7. ASCII码与十六进制数之间的转换指令
ASCII码与十六进制数之间的转换指令指令格式和功能如表5-13所示。
表5-13 ASCII码与十六进制数之间转换指令的格式和功能
LAD STL ATH IN,OUT,LEN HTA IN,OUT,LEN 操作数及数据类型 IN/ OUT: VB, IB, QB, MB, SB, SMB, LB。数据类型:字节 LEN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。数据类型:字节。最大值为255 ASCII至HEX(ATH)指令将从IN功能及 说明 开始的长度为LEN 的ASCII字符转换成十六进制数,放入从OUT开始的存储单元 HEX至ASCII (HTA)指令将从输入字节(IN)开始的长度为LEN的十六进制数转换成ASCII字符,放入从OUT开始的存储单元 ENO=0的错误条件 0006 间接地址, SM4.3 运行时间 ,0091 操作数范围超界 SM1.7 非法ASCII数值(仅限ATH) 注意:合法的ASCII码对应的十六进制数包括30H到39H,41H到46H。如果在ATH指令的输入中
包含非法的ASCII码,则终止转换操作,特殊内部标志位SM1.7置位为1。
【例5-10】将VB10~VB12中存放的3个ASCII码33、45、41,转换成十六进制数。 梯形图和语句表程序如图5-14所示。
LD I1.0
ATH VB10, VB20, 3
图5-14 例5-10题图
程序运行结果如下:
可见将VB10~VB12中存放的3个ASCII码33、45、41,转换成十六进制数3E和Ax ,放在VB20和VB21中,“x”表示VB21的“半字节”即低四位的值未改变。
5.1.5 天塔之光的模拟控制实训
1. 实训目的
(1)掌握移位寄存器指令的应用方法
(2)用移位寄存器指令实现天塔之光控制系统 (3)掌握PLC的编程技巧和程序调试的方法 2. 控制要求
如图5-15所示的天塔的灯光,可以用PLC控制灯光的闪耀移位及时序的变化等。控制要求如下:按起动按钮,L12→L11→L10→L8→L1→L1、L2、L9→L1、L5、L8→L1、L4、L7→L1、L3、L6→L1→L2、L3、L4、L5→L6、L7、L8、L9→L1、L2、L6→L1、L3、L7→L1、L4、L8→L1、L5、L9→L1→L2、L3、L4、L5→L6、L7、L8、L9→L12→L11→L10 ……循环下去,直至按下停止按钮。
3. I/O分配
输入 输出
起动按钮:I0.0 L1:Q0.0 L4 Q0.3 L7:Q0.6 L10 Q1.1 停止按钮:I0.1 L2:Q0.1 L5 Q0.4 L8:Q0.7 L11 Q1.2
L3:Q0.2 L6 Q0.5 L9:Q1.0 L12 Q1.3 4. 程序设计
分析:根据灯光闪亮移位,分为19步,因此可以指定一个19位的移位寄存器(M10.1~M10.7,M11.0~M11.7,M12.0~M12.3),移位寄存器的每一位对应一步。而对于输出,如:L1(Q0.0)分别在“5、6、7、8、9、10、13、14、15、16、17”步时被点亮,即其对应的移位寄存器位“M10.5、M10.6、M10.7、M11.0、M11.1、M11.2、M11.5、M11.6、M12.0、M12.1”置位为1时,Q0.0置位为1,所以需要将这些位所对应的常开触点并联后输出Q0.0,以此类推其它的输出。参考程序如图5-16所示。
图5-16天塔之光控制梯形图
图5-16 天塔之光控制梯形图(续)
5. 输入、调试程序并运行程序 6. 思考题
如果控制要求改为L12→L11→L10→L8→L1→L2、L3、L4、L5→L6、L7、L8、L9,循环如何修改程序。输入程序,调试观察现象。
5.2 算术运算、逻辑运算指令
算术运算指令包括加、减、乘、除运算和数学函数变换,逻辑运算包括逻辑与或非指令等。
5.2.1 算术运算指令
1. 整数与双整数加减法指令
整数加法(ADD-I)和减法(SUB-I)指令是:使能输入有效时,将两个16位符号整数相加或相减,并产生一个16位的结果输出到OUT。
双整数加法(ADD-D)和减法(SUB-D)指令是:使能输入有效时,将两个32位符号整数相加或相减,并产生一个32位结果输出到OUT。
整数与双整数加减法指令格式如表5-14所示。
表5-14 整数与双整数加减法指令格式
LAD STL 功能 MOVW IN1,OUT +I IN2,0UT IN1+IN2=OUT MOVW IN1,OUT -I IN2,0UT IN1-IN2=OUT MOVD IN1,OUT +D IN2,0UT IN1+IN2=OUT MOVD IN1,OUT +D IN2,0UT IN1-IN2=OUT IN1/IN2:VW, IW, QW, MW, SW, SMW, T, C, IN1/IN2: VD, ID, QD, MD, SMD, SD, LD, AC, HC, 操作数及数据类型 AC, LW, AIW, 常量, *VD, *LD, *AC AC, *VD, *LD, *AC IN/OUT数据类型:整数 常量, *VD, *LD, *AC *LD, *AC IN/OUT数据类型:双整数 OUT:VW, IW, QW, MW, SW, SMW, T, C, LW, OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, ENO=0的错误条件 0006 间接地址, SM4.3 运行时间, SM1.1 溢出 说明: (1)当IN1、IN2和OUT操作数的地址不同时,在STL指令中,首先用数据传送指令将IN1中的数值送入OUT,然后再执行加、减运算即:OUT+IN2=OUT、OUT-IN2=OUT。为了节省内存,在整数加法的梯形图指令中,可以指定IN1或IN2=OUT,这样,可以不用数据传送指令。如指定INI=OUT,则语句表指令为:+I IN2,OUT;如指定IN2=OUT,则语句表指令为:+I IN1,OUT。在整数减法的梯形图指令中,可以指定IN1=OUT,则语句表指令为:-I IN2,OUT。这个原则适用于所有的算术运算指令,且乘法和加法对应,减法和除法对应。
(2)整数与双整数加减法指令影响算术标志位SM1.0(零标志位),SM1.1(溢出标志位)和SM1.2(负数标志位)。
【例5-11】求5000加400的和,5000在数据存储器VW200中,结果放入AC0。程序如图5-17所示。
LD I0.0
MOVW VW200, AC0 //VW200→AC0
+I +400, AC0 //VW200+400=AC0
图5-17 例5-11题图
2. 整数乘除法指令
整数乘法指令(MUL-I)是:使能输入有效时,将两个16位符号整数相乘,并产生一个16位积,从OUT指定的存储单元输出。
整数除法指令(DIV-I)是:使能输入有效时,将两个16位符号整数相除,并
产生一个16位商,从OUT指定的存储单元输出,不保留余数。如果输出结果大于一个字,则溢出位SM1.1置位为1。
双整数乘法指令(MUL-D):使能输入有效时,将两个32位符号整数相乘,并产生一个32位乘积,从OUT指定的存储单元输出。
双整数除法指令(DIV-D):使能输入有效时,将两个32位整数相除,并产生一个32位商,从OUT指定的存储单元输出,不保留余数。
整数乘法产生双整数指令(MUL):使能输入有效时,将两个16位整数相乘,得出一个32位乘积,从OUT指定的存储单元输出。
整数除法产生双整数指令(DIV):使能输入有效时,将两个16位整数相除,得出一个32位结果,从OUT指定的存储单元输出。其中高16位放余数,低16位放商。
整数乘除法指令格式如表5-15所示。
整数双整数乘除法指令操作数及数据类型和加减运算的相同。 整数乘法除法产生双整数指令的操作数:IN1/IN2:VW, IW, QW, MW, SW, SMW, T, C, LW, AC, AIW, 常量, *VD, *LD, *AC。数据类型:整数。
OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, *LD, *AC 。数据类型:双整数。 使ENO = 0的错误条件:0006(间接地址),SM1.1(溢出),SM1.3(除数为0)。 对标志位的影响:SM1.0(零标志位),SM1.1(溢出),SM1.2(负数),SM1.3(被0除)。
表5-15 整数乘除法指令格式
LAD STL 功能 MOVW IN1,OUT MOVW IN1,OUT MOVD IN1,OUT MOVD IN1,OUT MOVW IN1,OUT MOVW IN1,OUT *I IN2,0UT IN1*IN2=OUT /I IN2,0UT *D IN2,0UT /D IN2,0UT MUL IN2,OUT IN1/IN2=OUT IN1*IN2=OUT IN1/IN2=OUT IN1*IN2=OUT DIV IN2,OUT IN1/IN2=OUT 【例5-12】乘除法指令应用举例,程序如图5-18所示。 LD I0.0 MUL AC1 VD100 DIV VW10 VD200
图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题图