产品码垛作业工业机器人离线编程与虚拟仿真Word文档格式.docx
- 文档编号:6149090
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:17
- 大小:611.20KB
产品码垛作业工业机器人离线编程与虚拟仿真Word文档格式.docx
《产品码垛作业工业机器人离线编程与虚拟仿真Word文档格式.docx》由会员分享,可在线阅读,更多相关《产品码垛作业工业机器人离线编程与虚拟仿真Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
=wobjO;
Offs(pBase,nSideSize,0,0),vI000,fine,toolI\WObj:
Offs(pBase,nSideSize,nSideSize,的,v1000,fine,toolI\WObj:
Offs(pBase,0,nSideSi罚,0),vI000,fine,toolI\WObj:
ENDPROC
PROCMAIN()
rSquare
pI,I00;
p2,200;
在调用该切割正方形的程序时,再指定当前正方形的顶点以及边长即可在对应位置切割对应边长大小的正方形。
上述程序中,机器人先后切割了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),
上述案例中,机器人到达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种情况
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种情况
pHome:
=((96l.98463257,0,1800],[-0.000000365,0,l,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
l定义机器人工作原点
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为基准计算得出
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
PROCrlnitAll()1声明初始化程序
rMoveHome·
|调用回工作原点HOME的程序
SetGOgoGrip,O;
1复位所有吸盘真空
1前面加上英文字符感叹号“!
”贝IJ表示当前行为注释行,此处是用于比较单端口的数字输出信号与信号组在使用上面的差别,此处使用信号组较为方便
nCounter:
=I’
|复位计数器
PROCrPick()
|声明拾取产品程序
ClkResetTimer;
|复位计时器
ClkStartTimer;
l开始计时
WaitDIdiPalletlnPosI
1拆垛工位处的到位检测信号,等待产品垛到位,否则一直等待
=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:
利用MoveJ移动至当前拾取位置正上方500mm处
MoveLpPick,MinSpeed,tine,tVacuum\WObj:
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:
|利用MoveL直线移动至拾取位置上方200mm处
MoveLpPickAfter,MidSpeed,zI00,tVacuum\WObj:
=wobjO,
1利用MoveL移动至拾取后中间过渡点
IFnCounter>
=I0PulseDOdoPalletOut·
|判断当前计数是否大于等于10,即是否全部完成了当前枝板的拆垛任务,若满足条件则发出移除当前枝板信号,将空枝板移走,并移入下一个载有产品的校板,此处为简化版的IF用法,该指令只适用于判断一种条件,条件满足时只执行一旬指令的特殊情况
PROCrPlace()
|声明放置程序
TESTnPos{nCounter,4}
|判断当前是哪种情况
CASEI
rPlaceTypeI;
1若是情况l,贝lj调用放置程序l
CASE3:
rPlaceType3;
|若是情况3,贝lj调用放置程序3
DEFAULT:
TPErase;
TPWrite飞hevalueoftypeiseηor,pleasecheckit!
”,
Stop;
若不为上述三种情况,贝lj清屏并写屏显示相关错误信号,并停止程序运行
ENOTEST
I0THEN
|判断当前计数是否大于10,每个钱板上共拾取放置10次
MoveJpHome,MidSpeed,fine,tVacuum\WObj:
l若满足条件则移动至HOME位置
=I;
!
计数器复位
“
ENDIF
ClkStopTimer;
|停止计时
nCycleTime:
=ClkRead(Timer);
|读取当前计时器中的数值,并将其赋值给nCycleTime
TPErase,
人
画
析
机精
用业
工
应
TPWrite“Lastcycletimeis:
”\Num:
=nCycleTtme;
|清屏,并写屏显示上→次拾取放置的节拍是多少
PROCrPlaceTypeI()
l声明放置程序l
型WaitDIdiltemlnPos,O;
典!
等待产品线前端放置位置处己没有产品,防止在放置过程中产品之间发生碰撞
穰MoveJOffs(pPlaceType1,0,0,I000),MidSpeed,zI00,tVacuum\WObj:
包!
移动至第l种情况下放置位置上方IOOOmm处
踊MoveLOffs(pPlaceType1,0,0,IOO),MidSpeed,z20,tVacuum\WObj:
严|移动至第l种情况下放置位置上方lOOmm处
MoveLpPlaceTypel,MinSpeed,fine,tVacuum\WObj:
|第l种情况下放置位置处
SetGOgoGrip,0;
1复位吸盘工具真空
!
ResetdoGripI;
!
ResetdoGrip2;
ResetdoGrip3;
ResetdoGrip4;
l注释,不被执行
WaitTime0.3;
ResetdoGripI,'
ResetdoGrip2,!
ResetdoGrip4,1注释行,不被执行
WaitTime0.3,
等待0.3s
GripLoadLoadEmpty,
1加载空载荷数据
MoveLOffs(pPlaceType2,-3I
1移动至第2个产品放置位
0,0,I00),MinSpeed,z20,tVacuum\WObj:
置上方lOOmm处
MoveLOffs(pPlaceType2,-3I0,0,600),MidSpeed,zI00,tYacuum\WObj:
1移动至第2个产品放置位置上方600mm处
=nCounter+I,
1计数器累计加!
PROCrPlaceType3()
|声明放置程序3
WaitDIdiltemlnPosO·
|等待产品线前端放置位置处己没有产品,防止在放置过程中产品之间发出碰撞
MoveJOffs(pPlaceType3,0吨。
,600),MidSpeed,zI00,tYacuum\WObj:
|移动至第3种情况下放置位置上方600mm处
MoveLOffs(pPlaceType3,0,0,I00),MidSpeed,z20,tYacuum\WObj:
|移动至第3种情况下放置位置上方lOOmm处
MoveLpPlaceType3,MinSpeed,fine,tVacuum\WObj:
|移动至第3种情况下放置位置处
SetGOgoGrip,IO;
将吸盘工具信号组置位为l0,复位l、3号吸盘,放量第l个产品
ResetdoGripl;
'
SetdoGrip2;
SetdoGrip4;
l注释行,不被执行
WaitTime0.3·
1等待0.3s,保证产品被完成释放
|加载单产品的载荷数据
MoveLOffs(pPlaceType3,0,0,200),MinSpeed,z20,tYacuum\WObj:
|移动至放置位置上方200mm处
WaitDIdiltemlnPos,O,
|等待产品结前端没有产品,即等待刚刚放量的产品已离开该放置区域
MoveJOffs(pPlaceType3「310,0,20圳、MidSpeed,z50,tVacuum\WObj:
移动至第2个产品的放置位置上面,两个产品之间的间隔为310mmMoveLOffs(pPlaceType3,-310,0,町,MinSpeed,fine,!
Vacuum\WObj:
移动至第2个产品的放置位置
SetGOgoGrip,O,
|复位真空吸盘信号姐,放置第2个产品
ResetdoGripI,
'
1注释行,不被执行
l等待0.3s,保证产品被完全释放
GripLoadLoadEmpty;
l力口载空载荷数据
MoveLO「fs(pPlaceType3,310,0,I00),MinSpeed,z20,tVacuum\WObj:
1移动至当前放置位置上方lOOmm处
MoveLOffs(pPlaceType3,-3I0,0,600),MidSpeed,zI00,tYacuum\WObj:
1移动至当前放置位置上方600mm处
=nCounter+I;
l计数器累计加l
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:
PROCrModify()
|声明目标点示教程序,此程序在机器人运行过得中不被调用,仅用于子动示教目标点时使用,便于操作者快速示教该工作站所需基准目标点位
MoveLpHome,vI000,fine,tYacuum\WObj:
|将机器人移至机器人士作等待位置,可选中此条指令或pHome点,单击示教器程序编辑器界面中的“修改仿置”,即可完成对该基准目标点的示教
MoveLpPickBase,vI000,fi肘,tYacuum\WObj:
将机器人移至机器人拾取基准位霄,可选中此条指令或pPickBase点,单击示教器得序编辑器界面中的“修改付置
MoveLpPlaceTypeI,vI000,fine,tYacuum\WObj:
1将机器人移至机器人第l种情况下的放置仿霄,可选中此条指令或pPlaceTypeI点,单击示教
MoveLpPlaceType2,vI000,日肘,tVacuum\WObj:
|将机器人移至机器人第2种情况下的放置位置,可选中此条指令或pPlaceType2点,单击示教器程序编辑器界面中的“修改位置
MoveLpPlaceType3,vI000,fine,tVacuum\WObj:
1将机器人移至机器人第3种情况下的放置位置,可选中此条指令或pPlaceType3点,单击示教器程序编辑器界面中的“修改位置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 产品 码垛 作业 工业 机器人 离线 编程 虚拟 仿真
![提示](https://static.bingdoc.com/images/bang_tan.gif)