本文以码垛3×3×3 (行,列,层)为例
箱体尺寸:500×500×500正方形箱体
码垛流程:
拆垛(取件)→移动→码垛
对于有限数目的码垛,可以采用预生成码垛位置数组的方法
PERS ROBOTARGET robPos_Array{27}:=......... //定义一个robotarget类型数组
PERS ROBOTARGET PutBasePos:=......// 定义一个robotarget码垛原点基准位置,一般取最底层第一个位置
----------------------------------第一种先生成点位再移动程序
-------------------------------------------
VAR num Step_x
VAR num Step_y
VAR num Step_z
VAR num i
对数组的赋值,可以单独设立例程,也可以写进该模块主程序的初始例程中,方法和效果是一样的。
i:=0;//初始值
Step_x:=500;//行距
Step_y:=500;//列距
Step_z:=500;//层高
for z from 0 to 2 do
for y from 0 to 2 do
for x from 0 to 2 do
robPos_Array{i}:=offset(PutBasePos,x*Step_x,y*Step_y,z*Step_z);
i:=i+1;
endfor
endfor
endfor
-----上面是先行后列再垂直方向,预先生成码垛位置数组
先列后行只需把 for y... 和 for x... 位置对调一下就可以了,如下:
for z from 0 to 2 do
for x from 0 to 2 do
for y from 0 to 2 do
robPos_Array{i}:=offset(PutBasePos,x*Step_x,y*Step_y,z*Step_z);
i:=i+1;
endfor
endfor
endfor
先垂直,然后再行列,同理
如此类推。
正式码垛引用时就非常简洁了
MOVEL robPos_Array{nCounts}....
Reset do_release;
注意nCounts从零开始,以保证与数组下标一致就可以了。
----------------------------------第二种直接移动位置程序
-------------------------------------------
PRoC maduo for()
Reset DO0;//复位输出0,打开夹爪
MoveL P HOME,v1000,fine,My Tool;//移动到home位
FOR Z FROM 0 TO 2 DO//最后计算Z轴位置
FOR y FROM O TO 3 DO//再计算Y轴位置
FOR x FROM 0 TO 2 DO//先计算X轴位置
MoveJ offs(pick,0,0,100),v100,fine,My_Tool\Wobj:=wobjPingMing2;//夹爪向上移 动100mm,并移动到工件坐标系的取件位上部
MoveL pick,v1000,fine,My Tool\wobj:=wobjPingMing2;//移动到取件位,实际是 下降100mm
SetDo DO0,1;//置位DO0,夹紧夹爪取箱体
WaitTime 0.5;//等待加紧,或者此位置等待夹住箱体信号反馈
MoveL offs(pick,0,0,100),v1000,fine,My _Tool\wobj:=wobjPingMing2;//拿起箱 体,实际直接上升100mm
MoveJ offs(D1,500*x,500*y,500+z*500),v1000,z20,My Tool\Wobj:=wobjPingMing 2;//移动到摆放位置上方
MoveL offs(D1,500*x,500*y,z*500),v1000,fine,My Tool\wobj:=wobjPingMing2;//移 动到放料位
Reset DO0;//复位输出0,打开夹爪放料
waitTime 0.5;//等待放下箱体,或者此位置等待放下箱体信号反馈
Move] offs(D1,500*x,500*y,200+z*5),v1000,z20,My_Tool\Wobj:=wobjPingMin2;// 抬起夹具
ENDFOR
ENDFOR
ENDFOR
MoveL P HOME,v1000,fine,My Tool;//回原位
ENDPROC
实际放料位点位坐标(工件坐标系)
第一层坐标位:
(0,1000,0)(500,1000,0)(1000,1000,0)
(0,500,0)(500,500,0)(1000,500,0)
(0,0,0)(500,0,0)(1000,0,0)
第二层坐标位:
(0,1000,500)(500,1000,500)(1000,1000,500)
(0,500,500)(500,500,500)(1000,500,500)
(0,0,500)(500,0,500)(1000,0,500)
第三层坐标位:
(0,1000,1000)(500,1000,1000)(1000,1000,1000)
(0,500,1000)(500,500,1000)(1000,500,1000)
(0,0,1000)(500,0,1000)(1000,0,1000)
私信发:码垛机器人源码程序
免费分享两个程序源码
