产品码垛作业工业机器人离线编程与虚拟仿真.docx
《产品码垛作业工业机器人离线编程与虚拟仿真.docx》由会员分享,可在线阅读,更多相关《产品码垛作业工业机器人离线编程与虚拟仿真.docx(17页珍藏版)》请在冰点文库上搜索。
产品码垛作业工业机器人离线编程与虚拟仿真
(封面)
XXXXXXX学院
产品码垛作业工业机器人离线编程与虚拟仿真
题目:
院(系):
专业班级:
学生姓名:
指导老师:
时间:
年月日
1拆垛机器人工作站构成
自动化物流系统中,与码垛应用相对应的为拆跺应用,即把成垛的产品依次搬运至流水线上,例如烟草物流系统中出人智能仓库时的码垛拆垛、袋装原材料拆垛并开袋、汽车零部件的拆垛上料等应用。
本工作站为箱类产品拆垛应用,成垛的原料摆放在枝板上,随枝板流动至枝板输送链拆垛工位处,利用ABB公司的IRB6700机器人将产品从枝板上搬运至产品输送链上,以便流至下工位进行处理,如图6一l所示。
I)枝板输送链
载有产品的枝板经由左侧的进料输送链流转至末端拆垛工位,并且对未端设有至lj位检测传感器,当机器人完成该校板的拆垛任务后,空枝板经由右侧输出线传至下一士位,便于空枝板的回收,之后进料输送链传送下一个载有产品的枝板,依次循环
2)吸盘工具
机器人末端法兰盘装有吸盘工具(图6-3),利用真空发生器产生真空,对产品进行拾取处理,机器人利用输出信号控制真空的产生与关闭,从而实现产品盒的拾取与释放,该工具采用16个吸盘,气路分为4蹈,利用机器人4路数字输出端口分别进行控制,
3)产品输送链I机器人将拆垛产品按照指定的方式放置在产品输送链前端,经由该输送链传送至下工位;在该输送链前端设有传感器,用于枪测当前位置是否有物料,当没有物料时才允许机器人执行下一个物料的放置,如图6-5所示。
2、信号组的设置与用法
3、数组的应用
在定义程序数据时,可以将同种类型、同种用途的数值存放在同一个数据中,当调用该数据时需要写明索引号来指定我们调用的是该数据中的哪个数值,这就是所谓的数
组。
在RAPID申可以定义维数组、二维数组以及三维数组。
4、写屏指令的运用
在编写例行程序时,将该程序中的某些数据设置为参数,这样在调用该程序时输入不同的参数数据,贝lj可对应执行在当前数据值情况下机器人对应执行的任务。
例如,在切割应用中,频繁使用切割正方形的程序,切割正方形的指令及算法是
致的,只是正方形的顶点位置、边长不一致,这样可以将这两个变量设为参数。
PROCrSquare(robtargetpBase,numnSideSize)
MoveL
pBase,vI000,fine,toolI\WObj:
=wobjO;
MoveL
Offs(pBase,nSideSize,0,0),vI000,fine,toolI\WObj:
=wobjO;
MoveL
Offs(pBase,nSideSize,nSideSize,的,v1000,fine,toolI\WObj:
=wobjO;
MoveL
Offs(pBase,0,nSideSi罚,0),vI000,fine,toolI\WObj:
=wobjO;
MoveL
pBase,vI000,fine,toolI\WObj:
=wobjO;
ENDPROC
PROCMAIN()
rSquare
pI,I00;
rSquare
p2,200;
ENDPROC
在调用该切割正方形的程序时,再指定当前正方形的顶点以及边长即可在对应位置切割对应边长大小的正方形。
上述程序中,机器人先后切割了2个正方形,以pl为顶点、100为边长的正方形,以p2为顶点、200为边长的正方形。
在机器人应用过程中,节拍经常是我们关注的一个焦点,在RAPID中有专门用于计时的时钟数据以及一系列的计时指令和函数。
5、记时指令的应用
ClkStart.
开始计时,
ClkStop.
停止计时,
ClkReset.
时钟复位,
ClkRead.读取时钟数值。
案例:
VARclockclockI;
PERSnumCycleT1me;
PROCrMove()
MoveLpl,vlOO,fi时,tooJO,
ClkResetclockI
ClkStartclockI,
MoveLp2,vI00,fine,toolO;
ClkStopclockl吨
CycleTime·=ClkRead(clockI),
ENDPROC
上述案例中,机器人到达pl点后开始计时,至lj达p2点后停止计时,之后利用ClkReadi卖取当前时钟数值,并将其赋值给数值型变量CycleTime,贝!
J当前CycleTime的值即为机器人从pl点至ljp2点的运动时间。
6、拆垛程序编写
MODULEMainMoudlePERStooldatatVacuum:
=[TRUE,[[0,0,200],[1,0,0,0)],[30,[0,0,130],[1,0,0,0],0,0,0));l定义工具坐标系数据tVacuum
PERSrobtargetpPickBase:
=[[1520.639271586,310.000414148,-49.999926686),[-0_000000328,0,1,-0.000000068],[0,-1,0,0),(9E9,9E9,9E9,9E9,9E9,9E9]];
l定义拆垛工位拾取基准点,以6.4.4节中所描述的第2种拾取情况为准
PERSrobtarget
pP!
aceType1:
=[[353.779984371,1371.090215836,498_624386673),[0_707I06815,0_000000588,0.707106747,0.000000435),[1,-1,1,0),[9E9,9E9,9E9,9E9,9E9,9E9)),
|定义在产品结上放置产品的位置,第l种情况
00543,0.00000072,1,-0.000000I
27),(0,0,0,0),(9E9,9E9,9E9,9E9,9E9,9E9));
|定义在产品线上放置产品的位置,第2种情况
PERSrobtarget
pPlaceType3:
=((654.92,1393.57,999.29),(3.86561E-07,0.706048,-0.708164,-3.24774E-07),[0,0,-I,0),[9E+O
9,9E+09,9E+09,9E+09,9E+09,9E+09));
1定义在产品线上放置产品的位置,第3种情况
PERSrobtarget
pHome:
=((96l.98463257,0,1800],[-0.000000365,0,l,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
l定义机器人工作原点
PERSrobtarget
pPick:
=((l515.64,310,950),(-3.28ι07,0,1,-6.8巳08],[0,-l,0,0),[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09)
|定义机器人拾取位置,此位置以pPickBase为基准计算得出
PERSrobtarget
pPickAfter:
=[[1015.64,810,l600],[-3.28E-07,0,1,-6.8巳08),(0,-l,0,0],(9E+09,9E+09,9E+09,9E+09,9E+09,9
E+09));
|定义机器人拾取产品后的抬高位置
PERSspeeddataMinSpeed:
=[500,I00,5000,I000);
PERSspeeddataMidSpeed:
=[1500,200,5000,I000);
PERSspeeddataMaxSpeed:
=(3000,300,5000,1000);
!
定义不同的速度数据,用于不同的运动过程
PERSloaddataLoadEmpty:
=(O.O1,(0,0,1],[1,0,0,0],0儿。
];
1定义机器人空负载时的有效载荷数据,重量设为O.Olkg,可将其视为空载荷
PERSloaddataLoadSingle:
=[20,[0,0,150],[1,0,0,0],0,0,0];|定义机器人拾取l个产品时的负载数据
PERSloaddataLoadDouble:
=[40,(0,0,500),(1,0,0,0)夕,0,0);1定义机器人拾取2个产品时的负载数据
PERSnumnCounter:
=1;
|定义拆垛计数器
PERSnumnCycleTime:
=6.848,l定义数值型数据,用于表示节拍时间
VARclockTimer;1定义时钟数据,用于计算节拍
PERSnumnPos{10,4}:
=[[310,0,1300,I),(310,-610,1300,I],[-5,0,1000,3),(-5,-620,1000,3),(605,0,1000,2),(605,-610,10
00,2),[0,0,0,2),(0,-610,0,2),[615,0,0,3),(615,-620,0,3));
1定义位置数组,第一维为10,依次对应产品垛中的l0个拾取位置l第二维为4,分别对应单个
拾取位置中的四项属性值,依次为X偏移值、Y偏移值、Z偏移值、拾取情况种类,拾取位置以示教的第2种情况中的拾取位置为基准,结合该数组申的位置偏移量,最终计算出每次拾取产品时的具体位置,从而依次完成各产品的拾取1最上面一层的两个拾取位置l、2,如图6-34所示
中间层的4个拾取位置3'4、5'6,如图6-35所示最下面一层的4个拾取位置7、8、9、10,如图636所示,其中7是拾取基准点,其他位置均
PROCMain()
1声明主程序
rlnitAll·
|程序起始位置调用初始化程序,用于复位机器人位置、信号、数据等
WHILETRUEDO
1采用WHILETRUEDO无限循环结构,将机器人需要重复运行的动作与初始化程序隔离开
rPick;
|调用拾取产品的程序
rPlace;
|调用放置产品的程序
ENDWHILE
ENDPROC
PROCrlnitAll()1声明初始化程序
rMoveHome·
|调用回工作原点HOME的程序
SetGOgoGrip,O;
1复位所有吸盘真空
1前面加上英文字符感叹号“!
”贝IJ表示当前行为注释行,此处是用于比较单端口的数字输出信号与信号组在使用上面的差别,此处使用信号组较为方便
nCounter:
=I’
|复位计数器
ENDPROC
PROCrPick()
|声明拾取产品程序
ClkResetTimer;
|复位计时器
ClkStartTimer;
l开始计时
WaitDIdiPalletlnPosI
1拆垛工位处的到位检测信号,等待产品垛到位,否则一直等待
pPick:
=Offs(pPickBase,nPos{nCounter,I},nPos{nCounter,2},nPos{nCounter,3});
l利用Offs函数以及位置数据计算当前计数器值下的拾取位置pPickA仇er.trans.x:
=pPick.trans.x-500;
mmpPickA仇er.trans.y:
=pPick.trans.y+500,
|计算拾取后的中间过渡位置,其Y值相对于pPick来说沿着工件坐标系Y正方向偏移500mm
pPickA仇er.trans.z:
=1600;1计算拾取后的申间过渡位置,其Z值为固定值1600mm
MoveJOffs(pPick,0,0,500),MaxSpeed,z50,tVacuum\WObj:
=wobjO;
!
利用MoveJ移动至当前拾取位置正上方500mm处
MoveLpPick,MinSpeed,tine,tVacuum\WObj:
=wobjO;
l利用MoveL直线移动至当前拾取位置
SetGOgoGrip,15;
|置位吸盘动作,所有吸盘全部建立真空
|注释,不被执行
WaitTime0.3:
1等待0.3s,保证产品已被拾取
IFnPos{nCounter,4}=1THEN
|判断当前拾取类型,若为情况l贝lj
GripLoadLoadSingle;
|加载单个产品的负载数据
ELSE
GripLoadLoadDouble;l其他情况即情况2、3,贝lj加载两个产品的负载数据
ENDIF
MovεLOffs(pPick,0,0,200),MinSpeed,z50,tVacuum\WObj:
=wobjO;
|利用MoveL直线移动至拾取位置上方200mm处
MoveLpPickAfter,MidSpeed,zI00,tVacuum\WObj:
=wobjO,
1利用MoveL移动至拾取后中间过渡点
IFnCounter>=I0PulseDOdoPalletOut·
|判断当前计数是否大于等于10,即是否全部完成了当前枝板的拆垛任务,若满足条件则发出移除当前枝板信号,将空枝板移走,并移入下一个载有产品的校板,此处为简化版的IF用法,该指令只适用于判断一种条件,条件满足时只执行一旬指令的特殊情况
ENDPROC
PROCrPlace()
|声明放置程序
TESTnPos{nCounter,4}
|判断当前是哪种情况
CASEI
rPlaceTypeI;
1若是情况l,贝lj调用放置程序l
CASE3:
rPlaceType3;
|若是情况3,贝lj调用放置程序3
DEFAULT:
TPErase;
TPWrite飞hevalueoftypeiseηor,pleasecheckit!
”,
Stop;
!
若不为上述三种情况,贝lj清屏并写屏显示相关错误信号,并停止程序运行
ENOTEST
IFnCounter>I0THEN
|判断当前计数是否大于10,每个钱板上共拾取放置10次
MoveJpHome,MidSpeed,fine,tVacuum\WObj:
=wobjO;l若满足条件则移动至HOME位置
nCounter:
=I;!
计数器复位
“
ENDIF
ClkStopTimer;
|停止计时
nCycleTime:
=ClkRead(Timer);
|读取当前计时器中的数值,并将其赋值给nCycleTime
TPErase,
人
画
析
机精
用业
工
应
TPWrite“Lastcycletimeis:
”\Num:
=nCycleTtme;
|清屏,并写屏显示上→次拾取放置的节拍是多少
ENDPROC
PROCrPlaceTypeI()
l声明放置程序l
型WaitDIdiltemlnPos,O;
典!
等待产品线前端放置位置处己没有产品,防止在放置过程中产品之间发生碰撞
穰MoveJOffs(pPlaceType1,0,0,I000),MidSpeed,zI00,tVacuum\WObj:
=wobjO;
包!
移动至第l种情况下放置位置上方IOOOmm处
踊MoveLOffs(pPlaceType1,0,0,IOO),MidSpeed,z20,tVacuum\WObj:
=wobjO;
严|移动至第l种情况下放置位置上方lOOmm处
MoveLpPlaceTypel,MinSpeed,fine,tVacuum\WObj:
=wobjO;
|第l种情况下放置位置处
SetGOgoGrip,0;
1复位吸盘工具真空
!
ResetdoGripI;!
ResetdoGrip2;!
ResetdoGrip3;!
ResetdoGrip4;
l注释,不被执行
WaitTime0.3;
!
ResetdoGripI,'ResetdoGrip2,!
ResetdoGrip3;!
ResetdoGrip4,1注释行,不被执行
WaitTime0.3,
!
等待0.3s
GripLoadLoadEmpty,
1加载空载荷数据
MoveLOffs(pPlaceType2,-3I
1移动至第2个产品放置位
0,0,I00),MinSpeed,z20,tVacuum\WObj:
=wobjO;
置上方lOOmm处
MoveLOffs(pPlaceType2,-3I0,0,600),MidSpeed,zI00,tYacuum\WObj:
=wobjO;
1移动至第2个产品放置位置上方600mm处
nCounter:
=nCounter+I,
1计数器累计加!
ENDPROC
PROCrPlaceType3()
|声明放置程序3
WaitDIdiltemlnPosO·
|等待产品线前端放置位置处己没有产品,防止在放置过程中产品之间发出碰撞
MoveJOffs(pPlaceType3,0吨。
,600),MidSpeed,zI00,tYacuum\WObj:
=wobjO;
|移动至第3种情况下放置位置上方600mm处
MoveLOffs(pPlaceType3,0,0,I00),MidSpeed,z20,tYacuum\WObj:
=wobjO;|移动至第3种情况下放置位置上方lOOmm处
MoveLpPlaceType3,MinSpeed,fine,tVacuum\WObj:
=wobjO;
|移动至第3种情况下放置位置处
SetGOgoGrip,IO;
!
将吸盘工具信号组置位为l0,复位l、3号吸盘,放量第l个产品
!
ResetdoGripl;
'SetdoGrip2;
!
ResetdoGrip3;!
SetdoGrip4;
l注释行,不被执行
WaitTime0.3·
1等待0.3s,保证产品被完成释放
GripLoadLoadSingle;
|加载单产品的载荷数据
MoveLOffs(pPlaceType3,0,0,200),MinSpeed,z20,tYacuum\WObj:
=wobjO;
|移动至放置位置上方200mm处
WaitDIdiltemlnPos,O,
|等待产品结前端没有产品,即等待刚刚放量的产品已离开该放置区域
MoveJOffs(pPlaceType3「310,0,20圳、MidSpeed,z50,tVacuum\WObj:
=wobjO,
!
移动至第2个产品的放置位置上面,两个产品之间的间隔为310mmMoveLOffs(pPlaceType3,-310,0,町,MinSpeed,fine,!
Vacuum\WObj:
=wobjO,
!
移动至第2个产品的放置位置
SetGOgoGrip,O,
|复位真空吸盘信号姐,放置第2个产品
!
ResetdoGripI,
!
ResetdoGrip2;'ResetdoGrip3;
!
ResetdoGrip4;
1注释行,不被执行
WaitTime0.3;
l等待0.3s,保证产品被完全释放
GripLoadLoadEmpty;
l力口载空载荷数据
MoveLO「fs(pPlaceType3,310,0,I00),MinSpeed,z20,tVacuum\WObj:
=wobjO,
1移动至当前放置位置上方lOOmm处
MoveLOffs(pPlaceType3,-3I0,0,600),MidSpeed,zI00,tYacuum\WObj:
=wobjO;
1移动至当前放置位置上方600mm处
nCounter:
=nCounter+I;
l计数器累计加l
ENDPROC
PROCrMoveHome()
1声明白动回HOME程序,相关内容可参考第二4章节中的内容
VARrobtargetpActualPos;pActuaIPos:
=CRobT(\tooI:
=tYacuum);pActualPos.trans.z:
=pHome.trans.z;
MoveLpActualPos,MinSpeed,fine,tVacuum\WObj:
=wobjO:
MoveJpHome,MidSpeed,fine,tYacuum\WObj:
=wobjO,
ENDPROC
PROCrModify()
|声明目标点示教程序,此程序在机器人运行过得中不被调用,仅用于子动示教目标点时使用,便于操作者快速示教该工作站所需基准目标点位
MoveLpHome,vI000,fine,tYacuum\WObj:
=wobjO;
|将机器人移至机器人士作等待位置,可选中此条指令或pHome点,单击示教器程序编辑器界面中的“修改仿置”,即可完成对该基准目标点的示教
MoveLpPickBase,vI000,fi肘,tYacuum\WObj:
=wobjO;
!
将机器人移至机器人拾取基准位霄,可选中此条指令或pPickBase点,单击示教器得序编辑器界面中的“修改付置
MoveLpPlaceTypeI,vI000,fine,tYacuum\WObj:
=wobjO,
1将机器人移至机器人第l种情况下的放置仿霄,可选中此条指令或pPlaceTypeI点,单击示教
MoveLpPlaceType2,vI000,日肘,tVacuum\WObj:
=wobjO;
|将机器人移至机器人第2种情况下的放置位置,可选中此条指令或pPlaceType2点,单击示教器程序编辑器界面中的“修改位置
MoveLpPlaceType3,vI000,fine,tVacuum\WObj:
=wobjO;
1将机器人移至机器人第3种情况下的放置位置,可选中此条指令或pPlaceType3点,单击示教器程序编辑器界面中的“修改位置