(2)机械手回零函数
因为机械手的编码器是增量编码器,所以机械手首次运动之前,必须先让机械手的四个轴回零,然后机械手才会知道实验定义的那11个点的坐标。该函数如下:
short grb— home()
{ axis_ homewithlimit(3,long(10O~*axis3PulsePerMmOrDegree), 20)://第三轴回零
axis_homewithlimit(1.1ong(12O.*axis1PulsePerMmOrDegree),10):// 第一轴回零
axis— homewithlimit(2,long(100.*axis2PulsePerMmOrDegree),15):// 第二轴回零
axis_ homewithoutlimit(4,1 5)://第四轴回零
return O: }
(3)机械手的点到点的运动函数
该函数的作用是控制机械手从关节坐标空间里的一个点【aAnglel, aAngle2, aPos3, aAngle4】运动到另外一个点[bAngle1,bAngle2,bPos3,bAngle4]。函数如下:
short grb_move _atob(int aAnglel,int aAngle2,int aPos3,int aAngle4。int bAngle1,int bAngle2,int bPos3,int bAngle4)
(4)机械手拾取和搬运工件的运动函数
机械手抓取电子标签运动时,都是把第三轴上升到一个较高的位置运动的,为了防止读写器在不该读数据的时候误读电子标签里的内容。为此设计了这样一个函数:
void robot_move(int position1,int position2,int flag ):
这个函数就是根据flag的标志来使机械手在这1 1个点上任意运动,例如flag=0表示机械手抓取零件从公共缓冲区运动到读写器,flag=1表示机械手抓取零件从读写器运动到读写器对应的机器位置上,flag=2表示机械手抓取零件从读写器运动到缓冲区,flag=3 表示机械手抓取零件从机器运动到任意一台读写器所在的位置,flag=4表示机械手抓取零件从读写器运动到零件的所有工序加工完成后的输出缓冲区,flag=5表示机械手抓取零件从零件输入缓冲区运动到公共缓冲区, 即进入实验系统。position1、position2是根据flag 的值分别代表公共缓冲区的具体某个位置,读写器的编号,机器的编号,零件输入缓冲区,零件的所有工序加工完成后的输出缓冲区之中的两个值,是机械手完成某一搬运任务时的起止位置,然后把这两个位置转化为对应的关节坐标,调用函数(3)来完成相应的两点之间的运动。如flag=0,position1就代表公共缓冲区的具体某个位置,position2就代表读写器的编号。
(5)关闭机械手的函数
short close— motion card();//生产结束时关掉运动控制器。以上这些函数共同完成了机械手的运动控制。
3 机械手的控制方法
机械手根据上位机调度程序下发的指令来运动。PLC通过把终端设备采集来的数据传送给上位机,上位机通过共享内存区里的机器和零件状态的改变来产生调度指令,然后通过进程间异步通信,机械手控制程序从共享内存区里取出指令,依次执行这些指令。根据参考文献[4]提供的Petri网建模方法,建立了本实验系统的Petri网模型。图3为机械手控制逻辑的Petri网,为简单计,这里只描述了一台机器(机器i)上的加工任务(调度指令)完成的过程。此Petri网的各库所和变迁的含义定义如下:
R:机械手空闲
B0:缓冲区中有加工任务所指定的零件
Ci:机器i空闲(i=1,2,3)
P0:待加工任务库所
Pi1: 机械手持有待加工的零件
(I=1,2,3)
P i2机械手持有扫描完成的待加工的零件在读写器(j)上(i=1,2,3)
Pi3:机械手往机器(i)上搬运待加工的零件(i=1,2,3)
P i4机器(i)/JI]工零件(i=1,2,3)
P i5加工完成的零件等待搬运到读写器(i)上扫描( 1,2,3)
P i6机械手往读写器(i)上搬运加工完成后待扫描的零件(j=1,2,3)
P 7读写器(i)扫描加工完成的零件(i=1,2,3)
P 8:机械手往缓冲区上搬运确认加工完成的零件
P9:机械手往缓冲区上搬运不是要加工的的零件
t0:有加工任务到达
t i1机械手抓取并移动零件(i=1,2,3)
t i2:机械手抓取的待加工的零件到达读写器,开始扫描(i=1,2,3)
t i3扫描结束,是正确的零件,机械手开始把零件向机器上搬运(i=1,2,3)
t i4机械手到达机器,释放零件,准备开始加工( =1,2,3)
t i5:零件加工完成,开始等待机械手搬运(_-1,2,3)
t i6加工完成后机械手开始搬运零件(i=1,2,3) .
t i7机械手持有加工完成后的零件到达读写器,开始准备扫描(i=1,2,3)
t i8扫描完成,确认零件加工完成,机械手开始把零件往缓冲区移动(_=1,2,3)
t9:机械手到达缓冲区,释放加工完成的零件
ti10:扫描结束,是错误的零件,机械手开始把零件向缓冲区搬运
t 11机械手到达缓冲区,释放错误的零件
t12 加工任务相关零件到达
在本实验系统中是3台机器共用一个机械手,且有一公共缓冲区,因此R(机械手空闲库所)与B。(缓冲区中有加工任务所指定的零件)是共享库所,需要由这两个库所各引出一条弧指向与每台机器相关的t. (机械手抓取并移动零件)变迁。与各机器相关的t. 变迁会由于竞争托肯而发生冲突,当这些变迁被使能时,需按照调度指令确定的顺序依次触发。避免死锁是离散制造系统控制的基本要求,与基于局部可达树预测分析的死锁避免算法不同的是,由于本实验系统的逻辑结构较为简单,这里采取了一种通过控制在制品数量以避免公共缓冲区被填满的简单方法来避免死锁。
机械手运动主要有三种:有新的零件产生,这时机械手控制程序从缓冲区找出一个空位,控制机械手把零件从初始缓冲区抓到这个空的缓冲区位置上;有零件要在机器上加工,这时机械手从缓冲区有零件的位置上抓取一个零件去机器旁的读写器上扫描,若是要加工的零件,把它放到机器上,若不是,重新放回缓冲区的原来位置上,再从下一个位置抓取,直到找到要加工的零件;有零件在机器上加工完毕,若是这个零件的所有工序都加工完毕,把这个零件抓出系统,若不是,从缓冲区找一个空位,把零件从机器上放到读写器上扫描,确认加工完毕,然后放到那个空位上。最后机械手做完以上的三种中的任意一种动作时,零件和机器的状态都会发生改变,监控程序把更新后的状态数据写入共享内存区。图4是整个控制程序的流程。