贾 冬
(中国航空制造技术研究院机器人系统集成中心,北京100024)
在飞机机身壁板的蒙皮与长桁T型接头激光焊接过程中,需要将长桁T型接头与蒙皮压紧,使两者在水平和垂直方向上达到工艺要求。传统的压紧方式是使用固定的工装,如图1所示。这种压紧方式虽然可靠,但是每一种工装仅可以对一种工件的固定。而机身壁板焊接件在研制时,焊接件具有批量小,品种多的特点。使用固定工装会消耗大量的资金,并且固定卡具的制作加工周期也比较长。
图1 传统的压紧装置
因此,设计一种柔性的压紧工装是十分必要的。文献[1-4]从理论和设计角度出发,对压紧工装进行了研究。
本文首先介绍了由双库卡机器人、压紧末端执行器、外部控制器组成的T型接头压紧系统。然后介绍了压级系统控制系统的设计。然后对机器人和外部控制器进行通信配置,设计了机器人控制系统与外部控制器的通信协议,并设计了机器人和外部控制器的通信程序。最后,通过实验,验证了机器人离线编程数据传输可靠性;在双机器人程序同步运行的情况下,实现了对T型长桁模拟件的压紧和夹紧功能。
双机器人压紧系统由两台库卡机器人KR360 R2830,压紧末端执行器,集成控制台组成。压紧末端执行器包括双夹紧装置,双压紧装置组成。每个夹紧装置由两对四个导向轮、以及相对应的驱动气缸组成。夹紧装置保证T型长桁在水平方向上与保持焊接时所需要的姿态。压紧装置由两个压紧导向轮以及相对应的驱动气缸组成,压紧装置是T型长桁在垂直方向上保证焊接要求的姿态。压紧末端执行器如图2所示。
图2 机器人压紧末端执行器置
机器人压紧控制系统由集成控制台内的工控机、机器人控制柜以及机器人控制柜内的IO模块组成。机器人控制系统为KRC4,机器人控制柜内的X44扩展接口通过EtherCAT总线耦合器EK1100连接。EK1100后面安装EL6695模块和IO数字量模块。EL6695模块是机器人与外部控制系统TwinCAT3数据交换的桥接模块,数字量IO模块用于实现压缩空气气压监测,以及压紧末端执行器的压级、夹紧控制。
机器人控制系统KRC4与TwinCAT3通过EL6695来实现数据交换,数据交换的类型只能是整数型。由于机器人的工作半径是2 832 mm,坐标值精度为小数点后两位,因此,交换数据的长度定位为32位。在库卡机器人项目配置软件WorkVisual中,配置EL6695模块的输入/输出变量为32个DWORD型数据。
TwinCAT3向机器人控制系统KRC4发送的内容包括:离线编程生成的机器人工具坐标轨迹、双机器人系统控制同步信号,以及库卡机器人外部运行所需要的控制信号等。
机器人控制系统KRC4向TwinCAT3发送的内容包括:机器人接受数据的控制信号,机器人接收离线编程数据定位,双机器人控制系统的同步控制信号等。
机器人控制器指令执行是逐步执行,而Twin-CAT3系统中语句指令是逐行扫描,周期性刷新,两者的指令执行周期没有固定的关系。两个控制器通信方式设计为:机器人控制系统请求数据通信,TwinCAT3响应。以TwinCAT3向机器人控制系统发送离线编程数据为例,流程图如图3所示。
图3 离线编程数据传输
本文应用两个机器人与TwinCAT3系统通信,实现了两个机器人之间的程序的同步控制,其原理是每个机器人运行每一步程序前,都向TwinCAT3系统发送程序运行到达的信号,当TwinCAT3系统根据两个机器人程序信号,发送下一步程序开始的控制信号,当机器人末端执行器由初始点运行至压紧工件位时,机器人发送压紧控制信号给TwinCAT3控制系统,其控制流程如图4所示。
图4 双机器人同步控制
双机器人压紧控制系统的程序设计包括Twin-CAT3程序、以及机器人程序三部分。
TwinCAT3程序设计主要实现机器人末端执行器动作逻辑运算、向机器人控制系统传输离线编程数据,控制两个机器人程序同步运行。关键程序代码如下所示:
varRobotcounter:=getcounter(varRobotRequest);//获取机器人传输的第几个点
IF varRobotcounter>0 THEN
robotReq: =getFlagStatus (varRobotRequest,robotReqFlag);
IF robotReq THEN
posCounter:=varRobotcounter;
varOUTX:=robotXPos[posCounter];
varOUTY:=robotXPos[posCounter];
varOUTZ:=robotXPos[posCounter];
varOUTA:=robotXPos[posCounter];
varOUTB:=robotXPos[posCounter];
varOUTC:=robotXPos[posCounter];
varRobotAck:=1;//传输完成
End_if
Robot1Start:=SetRobot1Start(robot1PrjEnd);
//机器人1程序第N条语句执行完毕
Robot2Start:=SetRobot1Start(robot2PrjEnd);
//机器人2程序第N条语句执行完毕
If Robot1Start=Robot2Start then
Robot1Start:=setRobotPrgStart(robot1Start);
//机器人1程序第N+1条语句执行
Robot2Start:=setRobotPrgStart(robot2Start);
//机器人2程序第N+1条语句执行
机器人程序主要实现压紧末端执行器运行轨迹的。机器人的程序如下所示,机器人首先由执行PTP P18指令,使机器人待机位置,然后与TwinCAT3进行数据通信,获取离线编程坐标点,其中,变量varinx,variny,varinz,varina,varinb,varinc,分别是各个点与P18点的差值。因为传输数据的格式只能是整数形式,所以需要将数据处理,乘以0.01.机器人程序获取离线编程数据后,通过wait for等待Twin-CAT 3发送的第一条同步执行语句,执行第一步语句后,两个机器人分别发送S1End信号给TwinCAT3,然后等待第二条语句开始信号。如此便实现了两台机器人语句同步执行。程序代码如下:
PTP XP18;机器人运行至初始位置
for counter=1 to 10;以传输10个离线编程点为例
varInputReq=TRUE;机器人向请求数据输入
varInputReqCounter=counter;机器人发送传输第几个点
varInputFinished=FALSE;
WAIT for varExternInput;等待 TwinCAT3 数据传输完成
robotPos[counter]=$POS_ACT;保存机器人HOME点S,T变量信息
robotPos[counter].x=robotPos[counter].x+varinx*0.01;保存离线编程点X
robotPos[counter].y=robotPos[counter].y+variny*0.01;保存离线编程点Y
robotPos[counter].z=robotPos[counter].z+varinz*0.01;保存离线编程点Z
robotPos[counter].a=robotPos[counter].a+varina*0.01;保存离线编程点A
robotPos[counter].b=robotPos[counter].b+varinb*0.01;保存离线编程点B
robotPos[counter].c=robotPos[counter].c+varinc*0.01;保存离线编程点C
varInputReq=FALSE;接受离线编程数据完毕后,请求输入复位
varInputFinished=TRUE;接受数据标志完成位置位
ENDFOR
varInputReqCounter=0;数据传输完毕
lin robotpos[1];
s1End=TRUE
wait for s1Start
lin robotpos[2]
s2End=true
在 TwinCAT3 的 robotXpos,robotYpos,robotZpos,robotApos,robotBpos,robotCpos的数组分别读入数值为{100,200,300,400,500,600,700,800,900},然后运行选择机器人程序,程序运行第一条同步程序后,在机器人示教器上查看机器人程序变量,分别输入变量名为robotPos[1..10],显示结果如表1所示。机器人坐标显示值分别为:
robotPos [1]={1446.20,- 4208.69,2193.54 ,178.93,45.09,-179.94}
robotPos[2]={1447.20,-4207.69,2194.54 ,179.93,46.09,-178.94}
robotPos[3]={1448.20,-4206.69,2195.54 ,180.93,47.09,-177.94}
……
robotPos[1]={1455.20,-4199.69,2202.54 ,187.93,54.09,-170.94}
通过以上数据可以看出可以看出,机器人程序中robotPos[1]—robotPos[10],相邻的两个坐标产在X,Y,Z,A,B,C 差值为 1,即 100*0.01,与传输值完全一致。
选择机器人程序,双机器人实现了程序同步运行。采用这种机器人同步的方式,有一个特点是当机器人连续执行两条lin指令,机器人自动会做轨迹逼近,如果机器人执行的两个lin指令中间有IO操作的指令,机器人控制器会中断两个lin指令的逼近。这样会使机器人精确定位到该点,但是也会降低机器人运行效率。
在两个机器人示教器上分别选择程序,并运行至BCO,然后在集成操作台操作界面上选择离线编程数据传输,并启动机器人同步控制,机器人带动压紧末端执行器运行至离线编程的第一个点,机器人控制器输出数字量DO控制信号,控制夹紧驱动气缸和压紧驱动气缸运动,对T型长桁进行压紧和夹紧。然后双机器人同步执行指令运行至程序结束,如图5所示。
图5 压紧末端执行器实验验证
(1)利用机器人与集成控制台TwinCAT3控制系统的通信协议,可以使不同程序运行周期、不同运行机制的库卡机器人控制系统和TwinCAT3系统实现数据的传输、双机器人程序同步执行。利用这种通信协议,也可以实现对机器人的轨迹校正,用于焊接机器人的焊缝跟踪、搬运机器人的定位校正等。
(2)利用“发送—等待信号”机制,可以实现双机器人程序的同步控制,并且这种机制会使机器人精确运行至离线编程输出的目标点,但是使机器人控制系统取消了两条语句之间的程序逼近算法,会降低机器人运行效率。
(3)通过机器人运行程序,运用实验验证了控制系统实现双压级机器人系统导入离线编程数据、控制机器人同步运行,对T型长桁进行压级和夹紧,实现了机器人柔性压紧工装的功能,从而缩短了小批量焊件的生产周期。