物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  制造  >  正文

基于RFID的单件生产实验系统的机械手运动控制

作者:刘卫萍 汪 峥
来源:RFID世界网
日期:2010-02-05 16:35:12
摘要:建立了一种应用于基于RFID(无线射频识别)的单件生产实验系统的四自由度机械手控制的Petri网模型,给出了其控制方法,使其能完成零件的拾取和搬运的动作,从而实现对各加工任务的调度。

  基于RFID的单件生产系统就是在RFID技术的支撑下,建立单件生产过程实时监控,对制造系统内单个具体产品的生产过程进行精确控制,使得每个产品的生产尽可能按照预先制定的生产调度方案在交付期之前完成。实验系统主要由可编程控制器(PLC)、个人计算机(作为上位机)、基于RFID技术的数据采集终端设备和GRB3014四自由度机械手组成。机械手的作用就是按照上位机的生产调度指令完成零件在各机器、读写器与缓冲区之间的搬运工作。它要完成的动作包括:从缓冲区抓取工件(其工装或容器上附有RFID电子标签,其中存储了零件的状态数据)到RFID读写器上扫描,若是要加工的工件则放到读写器旁边的机器上加工,若不是,则放回缓冲区,或者是从机器上把加工完成的工件放回缓冲区等等。

  本文给出了这一基于RFID的单件生产实验系统中机械手的控制方法,其主要思想是:上位机监控程序根据零件的优先级产生调度指令,通过进程间异步通信,机械手控制程序从上位机监控程序开辟的共享内存区逐条依次读取指令,然后调用机械手运动控制函数,完成执行拾取和搬运工件的动作,并返回相关状态数据给上位机监控程序。

1 基于RFID的单件生产实验系统简介及其工作原理

  基于RFID 的单件生产实验系统主要由可编程控制器(PLC)、个人计算机、基于RFID技术的数据采集终端设备和GRB3014四自由度机械手组成。它的系统体系结构如图1所示。

  上位机主要负责运行数据采集服务器程序、实时数据通信程序、生产调度服务器程序、实时监控服务器程序,完成实时数据的采集、解释、显示以及生产调度和监控指令的运算。上位机通过TCP/IP与PLC进行通信。PLC通过STL语言编程,将RFID终端设备采集到的实时状态数据传输至上位机。RFID数据采集终端主要负责生产数据的实时采集。机械手就是执行由上位机发出的指令,搬运零件。

  本实验系统只是对现实的生产系统 零件的流动过程的模拟,并没有真实的零件加工过程,主要是实现RFID电子标签和读写器对零件状态数据的采集。我们把关于零件的信息写入RFID 电子标签,当机械手把它拿到读写器上去扫描,RFID终端设备就采集到了实时状态数据,然后PLC通过STL语言编程把数据传给上位机,上位机就可以实时地对零件进行调度。RFID电子标签具有8K的内存,存储了关于零件的静态数据和动态数据。零件的静态数据包括:零件编号,零件工艺路线(工序顺序号、每道工序加工时间、每道工序加工所用机器号);零件的动态数据包括:零件当前工序,零件当前位置,零件剩余工作量(加工时间)等。

  在这一系统中,机械手起到拾取和搬运零件的作用,这样RFID读写器才能读到RFID电子标签里的内容,上位机才能根据这些实时数据产生调度指令,所以,控制机械手的动作是保证整个系统正常运行的重要环节。

2 机械手的运动

  本单件生产实验系统使用的GRB3014型四自由度

  SCARA机械手如图2所示。

  它集成有四轴运动控制器、电机及其驱动、电控箱、机械手爪等部件,还包括在VC环境下的动态链接库和安装在PC机上的GT_400_SV运动控制卡,可以方便地进行二次开发。机械部分的关节1、2、4为旋转关节,使用交流伺服电机和谐波减速器驱动,关节3为直线关节,可以上下伸缩,采用交流伺服电机和滚珠丝杠驱动。该机械手关节1连杆长度为200mm, 运动范围为±100。, 关节2 连杆长度为200mm,运动范围为±150。,直线关节3行程为~48mm,关节4运动范围为±170。,还有一个电磁手爪用于抓取。鉴于机械手的运动范围,本实验系统用到了四台读写器(一台放在初始缓冲区的旁边,扫描零件通知上位机有新的零件进入系统,另外的三台读写器放在机器的旁边),三台机器(机器就是读写器旁边的一个位置),总共定义了11个点的坐标,三台读写器的位置,三台机器的位置,一个缓冲区(这个缓冲区有三个放零件的位置),一个初始缓冲区还有一个零件加工完毕后所要放的位置。该机械手已经做了一次开发,可以实现简单的单轴运动,并且已经有封装好的VC环境下的API函数,可以直接调用其DLL文件,然后在VC下做二次开发实现所需要的运动。

  机械手有两种运动模式,直角坐标空间运动模式和关节坐标空间运动模式。如果采用直角空间运动模式,还要做运动学反解,所以本实验选择了关节坐标空间运动模式。为了存储三台RFID读写器、三台机器和公共缓冲区(有三个位置)、一个零件输入缓冲区和一个每个零件完成所有工序后的输出缓冲区这1 1个点的位置,定义了一个结构体数组AxisAngel AxisAngell[],数组里的每个值分别是四个轴的关节坐标值。

  工业机器人的运动通常由专门的运动控制卡来驱动,运动控制卡可安装在工控机上,并且提供了专门的API函数以便根据生产现场的需要进行运动控制程序的开发。例如,文献[2]中用于切割的机器人的运动控制就是这样实现的。本系统中用于工件拾取与搬运的GRB3014型四自由度机械手的运动控制也是如此。文献[3]给出了此种机械手的结构特征、技术参数和运动控制方法的介绍。据此,本文设计了一些机械手运动控制函数,并把它们生成一个DLL文件,供机械手运动控制程序调用。机械手的运动控制函数包括:

  (1)机械手运动控制初始化函数

short iniLmotion_card();//初始化卡,初始化输出,初始化运动轴
{
GT_ Open();//打开运动控制器设备,用户程序开始时必须调用
此函数
GT_Reset();//该函数是主机以命令的形式使运动控制器复位
GT_LmtSns(255);//该函数设置限位开关有效电平。在初始化运
动控制器时,必须给出限位开关有效电平,255表示四个轴全部是低电
平触发。
GT_ ExOpt(optva1);//初始化抓具
for(int i=1:i<5:i++)
{
6LAxis(i);
GLSetKp(3);
GT Update();
GT_ AxisOn0;
Sleep(50);
GT_ClrSts0;
}//初始化每个运动轴
return 0;
}

  (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)
i4机器(i)/JI]工零件(i=1,2,3)
i5加工完成的零件等待搬运到读写器(i)上扫描( 1,2,3)
i6机械手往读写器(i)上搬运加工完成后待扫描的零件(j=1,2,3)
P 7读写器(i)扫描加工完成的零件(i=1,2,3)
P 8:机械手往缓冲区上搬运确认加工完成的零件
P9:机械手往缓冲区上搬运不是要加工的的零件
t0:有加工任务到达
i1机械手抓取并移动零件(i=1,2,3)
i2:机械手抓取的待加工的零件到达读写器,开始扫描(i=1,2,3)
i3扫描结束,是正确的零件,机械手开始把零件向机器上搬运(i=1,2,3)
i4机械手到达机器,释放零件,准备开始加工( =1,2,3)
i5:零件加工完成,开始等待机械手搬运(_-1,2,3)
i6加工完成后机械手开始搬运零件(i=1,2,3) .
i7机械手持有加工完成后的零件到达读写器,开始准备扫描(i=1,2,3)
i8扫描完成,确认零件加工完成,机械手开始把零件往缓冲区移动(_=1,2,3)
t9:机械手到达缓冲区,释放加工完成的零件
ti10:扫描结束,是错误的零件,机械手开始把零件向缓冲区搬运
11机械手到达缓冲区,释放错误的零件
t12 加工任务相关零件到达

  在本实验系统中是3台机器共用一个机械手,且有一公共缓冲区,因此R(机械手空闲库所)与B。(缓冲区中有加工任务所指定的零件)是共享库所,需要由这两个库所各引出一条弧指向与每台机器相关的t. (机械手抓取并移动零件)变迁。与各机器相关的t. 变迁会由于竞争托肯而发生冲突,当这些变迁被使能时,需按照调度指令确定的顺序依次触发。避免死锁是离散制造系统控制的基本要求,与基于局部可达树预测分析的死锁避免算法不同的是,由于本实验系统的逻辑结构较为简单,这里采取了一种通过控制在制品数量以避免公共缓冲区被填满的简单方法来避免死锁。

  机械手运动主要有三种:有新的零件产生,这时机械手控制程序从缓冲区找出一个空位,控制机械手把零件从初始缓冲区抓到这个空的缓冲区位置上;有零件要在机器上加工,这时机械手从缓冲区有零件的位置上抓取一个零件去机器旁的读写器上扫描,若是要加工的零件,把它放到机器上,若不是,重新放回缓冲区的原来位置上,再从下一个位置抓取,直到找到要加工的零件;有零件在机器上加工完毕,若是这个零件的所有工序都加工完毕,把这个零件抓出系统,若不是,从缓冲区找一个空位,把零件从机器上放到读写器上扫描,确认加工完毕,然后放到那个空位上。最后机械手做完以上的三种中的任意一种动作时,零件和机器的状态都会发生改变,监控程序把更新后的状态数据写入共享内存区。图4是整个控制程序的流程。

4 实验结果

  图5是根据机械手的运动范围定义的本实验系统的平面布局图,原点就 :是机械手的机械原点,(0,400)是机械手回零后的点,机械手的第一轴和第二轴的长度都是200mm。表1是这些点对应的机械手的关节坐标空间里的四个轴的关节坐标值。表1中定义的坐标值是关节坐标,例如:缓冲区的1位置(-25,0,-80,O) 里面的四个值代表四个轴的关节坐标值,第一轴相对于零点(即机械手回零后的位置)转-250,第二轴不动,第三轴相对于零点下降-80cm,第四轴不动。

  表1 11个点的关节坐标值

  机械手控制程序调用函数G—RecvMsg(temp—info)来接收上位机产生的调度指令,调度指令的内容包括:工件号、机器号、可重人次数和指令的类型。机械手控制程序定义了一个结构体来存储接收到的指令,结构体定义如下:

typedef struct RECV_ INF
{
UINT which~ partlD;f l %

UINT which— machinelD://机器号

UINT entry— num://若生产系统是可重人生产系统,表示可重人次数,在本实验系统中保留。

U1NT flag1;//0到达生产线,1零件在机器上加工,2零件在机器上加工完毕,3零件的所有工序在机器上加工完lRECV_INF, pRECV_INF; 接收到调度指令后,机械手运动控制程序凋用函数G_Exe_ cute_ command(RECV INF)来执行这一指令。机械手控制程序根据RECV_INF->flag1的值来执行相应的运动, 并把RECV_INF-> which_machinelD(机器号)赋给机械手运动函数robot_move(int position1,int position2,int flag)中的positionl或者position2(这个是根据flag的值来决定的,参考这个函数的说明),当机械手抓取零件去机器上加工前要到机器对应的读写器上扫描,这时PLC会传给上位机一个数据包,里面包含机械手抓取的这个零件的工件号,机械手控制程序就会从共享内存区里读到这个工件号并与RECV_INF->which_partlD(工件号)来做比较,判断是不是要加工的零件。当指令执行完后,监控程序会改变零件和机器的状态,然后机械手控制程序取下一条调度指令直到每个零件的所有工序都加工完毕。

  实验结果表明,机械手可以完成要求的动作。

5 结束语

  本文提出了一种针对基于RFID的单件生产实验系统的机械手控制方法。首先建立了本实验系统的Petri网模型,获得正确的控制逻辑;然后设计了机械手运动控制函数,并实现了与上位机的进程阃异步通信,从而逐条解析并执行调度指令。实验结果表明,机械手可以完成上位机的调度指令,可以在预先定义的11个位置中的任意两个位置之间运动。