APP下载

算术运算指令在PLC编程中的应用

2019-11-27赵金山

通信电源技术 2019年11期
关键词:彩灯赋值字节

赵金山

(临汾职业技术学院,山西 临汾 041000)

0 引 言

在PLC教学中,流水灯的控制或者彩灯的移位是一个重要内容。传统方法是利用移位指令或者移位寄存器实现,而实际控制中还可以利用算术运算指令实现。

实际教学中,临汾职业技术学院的实训室采用西门子CPU222型PLC,主机自带8个输入端子I0.0~I0.7和6个输出端子Q0.0~Q0.5。由于输入、输出点数较少,不能满足大多数实训项目的要求,故又加了一个EM223扩展模块,扩展出16个光电隔离型输入端子和16个继电器型输出端子。主机与扩展模块之间用扩展电缆连接。此PLC最多可以实现22组彩灯的循环或移位控制。本文将以输出QB0和QB1实现循环控制,实现14组彩灯的控制。

1 算术运算指令

在西门子S7-200型PLC编程软件中,算术运算指令可以解决PLC中出现的各种数学运算问题,常用的有加法运算、减法运算、乘法运算和除法运算。本课题中将使用乘(除)法指令解决流水灯的编程问题,下面将结合梯形图讲解指令的使用方法。

乘/除运算是对符号数的乘法运算和除法运算,包括整数乘/除运算、双整数乘/除运算、整数乘/除双整数输出运算和实数乘/除运算等[1]。

1.1 乘法指令MUL

当使能输入端有效时,将输入IN1、IN2中的数据进行乘法运算,结果存储在OUT指定的数据中[2]。就其类型而言,乘法又分为整数乘法、相乘指令和双整数乘法等,对应的梯形图和相应功能如表1所示。

表1 乘法指令对应的梯形图和相应功能

如图1所示,当I0.0有效时,将MW10和MW20相乘,送到MW30中。两个输入数据MW10、MW20和输出数据MW30都是16位单字长整数。若运算结果超归16位二进制数表示的有符号数的范围,将会溢出。

1.2 除法指令DIV

当使能输入有效时,将输入IN1、IN2的数据进行除法运算,结果存储到OUT指定的数据中[2]。对应的梯形图和相应功能如表2所示。

图1 应用举例1

应用举例,如图2所示。当I1.0接通时,将VW100中的16位整数除以VW200中的16位整数,结果输送给OUT所指定的数据VW300,且不保留余数。因为不保留余数,除法指令一直执行的结果是商会变成0。

例子中的IN1、IN2和OUT的数据寻址范围为IW、QW、MW、SMW、SW、T、C、VW、LW、AIW、AQW和常数。

表2 除法指令对应的梯形图和相应功能

图2 应用举例2

2 PLC的编址方式

西门子S7-200型PLC的编址有多种,如位编址、字节编址、字编址和双字编址等都是常用的编址方式。

2.1 位编址

在用基本指令编程时,大多数采用位编址的方式。例如,I0.0、Q1.0每个位有2种状态——“0”和“1”,“0”表示该位为“OFF”,“1”表示该位为“ON”。

2.2 字节编址

字节编址的表示方法为“编程元件+字节表示符+起始字节地址”。例如:VB1表示变量寄存器第1个字节,共8位,第7位是最高位,第0位是最低位,结构如图3所示。

图3 VB1结构示意图

2.3 字编址

字编址表示为“编程元件+字表示符+起始字节地址”。比如:QW0表示输出映像寄存器,长度包含16个位,即2个字节,分别是QB0和QB1,结构如图4所示。西门子编程软件默认字节QB0为高位字节,QB1为低位字节,即遵循“高地址、低字节”的约定。

在使用字编址给某一个变量赋值时,要注意出现字节重复赋值的情况。当给同一个变量两次赋值时,位于后边网络的输入有效。如图5所示,用传送指令给VW0和VW1赋值。

图4 QW0结构示意图

图5 用传送指令 给VW0和VW1赋值

网络1给VW0赋值16进制数6c19,等于给VB0赋入初值01101100、给VB1赋入初值00011001。

网络2给VW1赋值16进制数3578,等于给VB1赋入初值00110101,给VB2赋入初值01111000。

此时,字节型数据VB1会出现两个数值——00011001和00110101。由于网络2在后面,根据PLC逐行扫描的工作原理,第二次输入会刷新第一次输入的数值,故VB1的数值实际是00110101。若将两个网络的顺序对调,则VB1的实际值变为00110101。

通过以上例子可发现,在使用字编址或双字编址时,要防止出现两个字或两个双字占用同一个字节的情形,否则会引起程序错误。因此,使用字编址时,尽量使用VW0、VW2、VW4等偶数编号。

除了以上编址方法以外,还有双字编址(MD10)、其他编址方法(T37、C20)等,这里不再一一赘述。

3 控制要求与实现方法

有一组灯14个L1~L14。当按下按钮SB1时,灯正序每隔2 s单个点亮并循环,按下SB2时,灯反序每隔2 s单个点亮,至L1为灭时停止。

利用乘法指令,可以实现彩灯的移位或循环控制,实现原理如下。在PLC程序中,各种类型的数据都是以二进制数字存储。二进制数字只有“0”和“1”两个数值。如果某位置对应的数字为“0”,则该位数字一定为0;若某位置对应的数字为“1”,实际代表的数字是十进制数字的2n,n=0,1,2,3…。即如果对应的位置为1,相邻高位所代表的十进制数字是低位数字的2倍;如果将最低位赋值“1”,利用乘法指令乘以2,将会使相邻的高位变为“1”,而低位的数值变为“0”。数字电路中,“1”对应的位置代表高电平,“0”对应的位置代表低电平。如果将对应位置用输出映像寄存器Q代替并接入彩灯,使用乘法指令前,最低位置对应的彩灯会亮,其他位置都灭。乘以2后,1的位置将左移1位,而其他位置的彩灯都会处在灭的状态。再乘以2,再左移1位……形成了流水灯的效果。

如图6所示,当给QB1赋值数字1后,QB1字节代表的十进制数字是1,从右侧算起第一个位置为1,第一盏彩灯亮,其他彩灯都处于熄灭状态;利用乘法指令乘以2后,QB1的数值会变成十进制数字2,对应的第一个位置会变成0,第二个位置会变成1,彩灯第二盏亮,其他灯灭,彩灯左移1位;再乘以2,QB1的数值会变成4,第一个和第二个位置会变成0,第三个位置会变成1,此时第三盏灯亮、其余灯灭。以此类推,只要按乘法指令运算,每次亮的彩灯会依次向左移动1位。

图6 实现原理举例

推而广之,给QB1乘以4,可以使彩灯左移2位;乘以8,可以使彩灯左移3位……

3.1 确定输入/输出地址

根据题目要求,确定I/O地址如表3所示。由于篇幅问题,L10~L13、L2~L7用省略号代替,对应地址依次往后累加即可。

表3 I/O地址

3.2 PLC的接线

根据I/O地址分配表,确定PLC接线如图7所示。

接线时要注意,SB1和SB2必须是自复位按钮。另外,L1~ L8对应 Q1.0~ Q1.7,L9~ L14对应 Q0.0~Q0.5。这是根据PLC字编址的默认高位和低位确定的。

3.3 程序编制

如图8所示,网络1的作用是系统开始运行时,利用I0.0给QW0赋值,使第一盏灯亮。同时,为了能够使系统正序循环,在L14熄灭后,系统再次进入循环。I0.0和Q0.6都利用正跳沿指令,防止系统由于按压时间较长重复赋值。网络2和网络3比较简单,分别产生正序和反序循环。网络4和网络6产生正序和反序脉冲,脉冲间隔2 s,宽度为一个PLC循环扫描周期。网络5利用乘法指令和T37的跳变使灯循环左移。网络6利用除法指令和T38的跳变使灯循环右移,间隔时间为2 s。将以上程序输入电脑并下载至PLC,运行就可以得到前面题目要求的现象。

图7 PLC接线情况

图8 程序编制示意图

本例中彩灯反序循环至L1后,整个系统停止;再次压下SB1后,系统再次正向从头开始循环。欲使彩灯反序连续循环也是可行的,只需在系统完成除法运算、字QW0的数值为零时,将灯L14利用赋值的方法送入定值,然后运行除法运算,即可使系统反序循环运行。根据整数除法运算的规律可知,当反序亮至灯L1时,QW0的数值为1,再对QW0进行除2运算,根据保留商但不保留余数的运算规则,QW0的数值变成0;以后再运行除法运算,结果都是0。所以,在QW0数值为0时,利用比较指令给QW0送入16进制数字2000即可完成循环,如图9所示。

图9 应用举例3

4 结 论

在PLC的实际应用中,解决一个任务可以采用多种方法。实际教学中,教师负责提出问题,并给出多种解决问题的途径,学生可以利用学过的知识找到解决问题的方法。实践证明,大多数同学能够利用常规指令解决问题,也有部分同学找到的方法比较新颖。

猜你喜欢

彩灯赋值字节
彩灯
No.8 字节跳动将推出独立出口电商APP
元宵佳节点彩灯
No.10 “字节跳动手机”要来了?
轻量级分组密码Midori64的积分攻击
强赋值幺半群上的加权Mealy机与加权Moore机的关系*
算法框图问题中的易错点
利用赋值法解决抽象函数相关问题オ
学生为什么“懂而不会”
有多少盏彩灯