基于三菱PLC平台队列在清洗设备中的运用
2022-05-14程志刚王庆磊
梁 晶,程志刚,王庆磊
(国核自仪系统工程有限公司,上海 201108)
随着工业技术的发展,出现各种各样清洗设备,超声波清洗机是工业中较常见的一种。利用超声波[1]在液体中传播,使液体与清洗槽在超声波频率下一起振动,液体与清洗槽振动时有自己的固有频率,这种振动频率是声波频率,所以人们就听到嗡嗡声。超声波清洗机的传送方式通常有转盘式、链条通过式、移栽槽式等。然而,超声波槽式清洗机的控制需要多个槽来回往复式地清洗,不同的产品,清洗的槽位可能还不一样,这就导致了程序复杂度较高,槽位越多,程序就越复杂,修改也越麻烦。如果使用队列,就能满足客户不同产品随意组合槽位、增加清洗位号的需要,并且接口可以根据需要适当开放出来,让客户自己根据产品工艺需求调整清洗顺序。
1 队列简介
队列(queue)[2]是一种线性表,它的特性是先进先出,插入在一端,删除在另一端。就像排队一样,刚来的人入队(push)要排在队尾(rear),每次出队(pop)的都是队首(front)的人。队列的操作主要有元素入队列和元素出队列。建立顺序队列结构[3]必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置,如图1所示。
图1 顺序队列操作示意图
每次在队尾插入一个元素时,rear 增1;每次在队头删除一个元素时,front 增1。随着插入和删除操作的进行,队列元素的个数不断变化,队列所占的存储空间也在为队列结构所分配的连续空间中移动。当front=rear 时[4-5],队列中没有任何元素,称为空队列。当rear 增加到指向分配的连续空间之外时,队列无法再插入新元素,但这时往往还有大量可用空间未被占用,这些空间是已经出队的队列元素曾经占用过的存储单元。
2 系统介绍[6-7]
系统机构图,如图2所示。
图2 系统机构图
1)从图2 中可以看出,系统由进料部、机械臂、清洗槽和出料部等组成。进料部和出料部的机构由其他部件组成,和本文队列思想无关,不进行具体描述。主要介绍机械臂和超声波清洗槽这两大部分。机械臂由横移伺服、升降伺服和机械挂钩组成。超声波清洗槽共由A 槽、B 槽、C 槽、D 槽、E 槽、F 槽六个槽位组成。各槽功能介绍如下:A 槽功能是超声波预清洗;B 槽功能是超声波清洗;C 槽功能是超声波抛动清洗;D 槽功能是超声波溢流漂洗;E 槽功能是超声波溢流抛动漂洗;F 槽功能是超声波溢流再次抛动漂洗。
2)机械臂在各个清洗槽移动的工作原理。机械臂到上料位取料,然后把料放入到A 槽,清洗一定时间后,机械臂把料从A 槽放到B 槽,然后机械臂再去上料位取一个新料放入A 槽清洗,同样清洗一定时间后,机械臂把料从B 槽放入C 槽,同时把新料从A 槽放入B 槽,再去上料位取一个新料放入A 槽。依此下去,最后的逻辑是机械臂从F 槽取料然后去下料位放料,然后E 槽取料到F 槽放料,D 槽取料到E 槽放料,C 槽取料到D 槽放料,B 槽取料到C 槽放料,A 槽取料到B 槽放料,然后上料位取料到A 槽放料,按照此流程往复循环工作。
3 流程设计[6-7]
根据清洗工作原理,一般的程序设计思想是按机械臂的移动流程一步步设计程序,但是这样的话程序开发工作量非常大,并且一旦客户要稍微改下清洗的顺序,又需要大量改动程序流程,这时使用队列的思想就可以完美解决以上两个难点。
首先给上料位、A 槽、B 槽、C 槽、D 槽、E 槽、F槽、下料位等分别做一个位置编号,相对应为1、2、3、4、5、6、7、8 共八个位置号。那么机械臂的移动流程就是7-8-6-7-5-6-4-5-3-4-2-3-1-2-结束,然后下一个循环。如图3所示。
图3 机械臂队列流程
从图3 队列流程可以看出,队列头部的数据是机械臂即将要走的位置,例如先移动到7 号位置取料,7号位置走完,对队列元素进行出队操作,并且队尾填充数字0 操作。这一步操作完成,排在头部位置是数据8。如图4所示。
图4 机械臂队列流程移动后
程序依此顺序操作,每移动一步,队列左移一个数据,队尾就填充数据0,当程序检索数据为0 时,就认为机械臂移动流程都已完成,此时对队列重新填充数据7-8-6-7-5-6-4-5-3-4-2-3-1-2,这样程序就形成了循环取料、放料的动作流程。
如上描述,当客户更改清洗工艺或者换型时,只需要修改、增加或者删减队列中的元素即可完成工艺的变更或型号切换,操作简单方便,也可以把这个动作流程顺序接口做到触摸屏界面上,开放给客户输入,并设置安全权限,提高设备的灵活性、操作的便捷性。
4 程序开发[8]
根据流程设计描述,进行清洗设备这一部分的程序开发,首先要定义机械臂的位置号,本文中机械臂共有8 个位置[2],因此,要对横移伺服设定8 个绝对位置,程序要进行哪一个位置移动时,就随时调用横移伺服的绝对位置启动信号。定义横移伺服的绝对位置程序编写如图5所示。
图5 横移伺服1#绝对位置程序段
定义好横移伺服的绝对位置后,需要把横移伺服的队列元素转换为程序语言,每一个位置号[3]用4个Bit 位表示,4 个Bit 位最大可表示为二进制1111 即十进制数据15。本程序中最大位置号是8,因此足够用。把本文队列流程7-8-6-7-5-6-4-5-3-4-2-3-1-2 赋值给三菱PLC 的数据寄存器D1350/D1351/D1352/D1353(一个数据寄存器D 是由16 个Bit 位组成,要完成本文的流程步号,需要4 个寄存器D,寄存器编号1350—1353),程序编写如图6所示。
图6 队列流程转为程序语言
因为是4 个Bit 位表示一个位置序列号,所以需要把寄存器D 再分解成软元件位S,编号从S130 开始,总共4 个寄存器D,共占用64 个Bit,然后通过三菱PLC 左移指令SFTLP 进行4 个Bit 一起左移,即可得出想要移动的位置号。具体程序编写如图7所示。
图7 左移位号并调用绝对定位
5 结语
队列常用于高级语言程序开发[9-10],在PLC 实际运用中较少使用,随着目前社会工业自动化程度的提高,客户需求复杂多变,结合实际情况,熟练运用队列思想能够使程序开发工作化繁为简,游刃有余。本文将队列这一思想简单融入超声波清洗设备的移栽程序段中,完美地克服了原有程序呆板且繁杂的缺点[11-12],大大提高了程序开发效率,思路简单清晰,保证了程序运行的稳定性,也为后续的设备维护提供了保障。
举一反三,类似于这种多位置多组合反复调用的情况,如小车的多位置往返移动、多层货梯、呼叫器等,都可以灵活运用队列,并结合其他指令,使队列元素能够进行左移、右移、删除、插入等各种操作,提高实际应用价值。