
23机器人码垛现场编程.pdf
22页工业机器人码垛现场编程工业机器人码垛现场编程 主讲:王晓勇 学习目标 学会码垛目标点示教 学会常用码垛程序编写 目录 》 01 02 码垛指令编程 码垛现场程序案例 1 码垛指令编程 当关闭轴配置监控后,机器人在运动过程中采取最接近当 前轴配置数据的配置到达指定目标点 一、码垛指令编程 运动控制指令-ConfL 应用: 对机器人运行姿态进行限制与调整,程序运行时, 使机器人运行 姿态得到控制系统默认值为 ConfL\on 实例: ConfL\on; ConfL\off; 限制: 机器人冷启动,新程序载入与程序重置后,系统自动 设置为默认值 备注 一、码垛指令编程 运动控制指令-ClkReset 实例 ClkReset clock; Clock:时钟名称 Clock ) 应用:将机器人相应的时钟复位, 常用于记录循环时间或机器人跟 踪输送链 ClkReset clock1; ClkStart Clock1; RunCycle; ClkStop Clock1; nCycleTime:=ClkRead(clock1); TPWrite “Last Cycle Time: “\Num:=nCycleTime 一、码垛指令编程 运动触发指令- TriggIO TriggIO TriggData,Distance [\Start]|[\Time][\Dop]|[\Gop]| [\Aop]|[\ProcID],SetValue [\DODelay]; [TriggData]: 触发变量名称。
triggdata) Distance: 触发距离mmunm) [\Start]: 触发起始开关switch) [\Time]: 时间触发开关switch) [\Dop]: 时间数字输出signaldo) 一、码垛指令编程 运动触发指令- TriggIO TriggIO TriggData,Distance [\Start]|[\Time][\Dop]|[\Gop]| [\Aop]|[\ProcID],SetValue [\DODelay]; [\Gop] : 触发组合输出signalgo) [\Aop] : 触发模拟输出 signalao) [\ProcID] : 过程处理触发num) SetValue : 相应信号值num) [\DODelay] : 数字输出延迟 (num) 一、码垛指令编程 运动触发指令- TriggIO 应用 机器人可以在运动时通过触发指令精确的输出相应 信号,当前指令用于定义触发性 质,此指令必须与 其他触发指令TriggJ.TriggL.或TriggC同时使用才 有意义,同机 器人指令TriggEquip比较,多了时间 控制功能,少了外部设备触发延迟功能,通常 用于 喷涂.涂胶等行业,使用参变量[\Start],表示以运 动起始点触发基准点,默认为 运动终止点;使用参 变量[\Time],以时间来控制触发,允许最大时间为 0.5s,详见限 制;参变量[\ProcID],正常情况下用 户无法自行使用,此参变量用于IPM过程处理。
一、码垛指令编程 运动触发指令- TriggIO S t a r t p o i n t Triggl p1,v500,gunon,z50,gunl; 10mm End point p1 The output signal guu is set when the TCP is here 实例 VAR triggdata gunon; TriggIO gunon,10\Dop:=gun,1; TriggL p1,v500,gunon,z50,gun1; 一、码垛指令编程 数据的应用 在定义程序数据时,可以将同种类型、同种用途的数值存放在同一数据中, 当调用该数据时需要写明索引号来指定调用的是该数据中的哪个数值,这就是 所谓的数值在RAPID中,可以定义一维数值、二维数组以及三维数组 VAR num num1{3,4}:=[ [1,2,3,4] [5,6,7,8] [9,10,11,12] ]; !定义二维数组num1 Num2:=num1{3,2}; !num2被赋值为10 例如,一维数组: VAR num num1{3}:=[5,7,9]; !定义一维数组num1 Num2:=num1{2}; !num2被赋值为7 例如,二维数组: 一、码垛指令编程 中断程序的应用: 在程序执行过程时,如果发生需要紧急处理的情况,这时就要中断当前程序的 执行,马上跳到专门的程序中对紧急情况进行相应处理,处理结束后返回中断的地 方继续往下执行程序。
专门用来处理紧急情况的专门程序称作中断程序(TRAP) ISignalDI di1,1,intnol; !定义触发条件,即当前数字输入 信号di1为1时,触发该中断程序 TRAP tTrap Reg1:=Reg1+1; ENDTRAP 例如,中断程序: VAR intnum intnol; !定义中断数据intnol Idelete intnol; !取消当前中断符intnol的连接, 预防误触发 CONNECT intnol WITH tTrap; !将中断符与中断程序tTrap连接 一、码垛指令编程 复杂程序数据赋值: 多数类型的程序 数据均是组合型数 据,即里面包含了 多项数值或字符串 可以对其中的任何 一项参数进行赋值 例如常见目标点数据: PERS robtarget p10:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9e9, 9e9, 9e9, 9e9, 9e9, 9e9]]; PERS robtarget p20:=[[100,0,0],[0,0,1,0],[1,0,1,0],[9e9, 9e9, 9e9, 9e9, 9e9, 9e9]]; 目标点数据里面包含了四组数据,从前往后依次为TCP位置数据,TCP姿态 数据,轴配置数据,外部轴数据,可以分别对该数据的各项数值进行操作 P10.trans.x:=p20.trans.x+50; P10.trans.y:=p20.trans.y+50; P10.trans.z:=p20.trans.z+50; P10.rot:=p20.rot; P10.robconf:=p20.robconf; 二、码垛现场程序案例: MODULE MainMoudle PERS tooldata tGripper:=[TRUE,[[0,0,160],[1,0,0,0]],[1,[1,0,1],[1,0,0,0],0,0,0]]; PERS robtarget pHome:=[[1518.35057503,0,877.822906024],[0,0,1,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; PERS robtarget pPick:=[[1518.360445356,- 11.456071507,523.888125175],[0,0.000000009,1,0],[-1,0,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; PERS robtarget pPlaceBase:=[[- 285.531972806,1859.243453208,99.429150272],[0,0.000000358,1,0],[1,0,1,0],[9E9,9E9,9E9, 9E9,9E9,9E9]]; PERS robtarget pPlace:=[[314.468,1859.24,99.4292],[0,3.58E- 07,1,0],[1,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; PERS robtarget pActualPos:=[[1518.36,-11.4561,877.823],[1.81232E-06,-1.16415E-08,- 1,-1.36561E-08],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; PERS bool bPalletFull:=FALSE; PERS num nCount:=1; 二、码垛现场程序案例: PROC Main() rInitAll; WHILE TRUE DO IF bPalletFull=FALSE THEN rPick; rPlace; ELSE WaitTime 0.3; ENDIF ENDWHILE ENDPROC 二、码垛现场程序案例: PROC rInitAll() pActualPos:=CRobT(\tool:=tGripper); pActualPos.trans.z:=pHome.trans.z; MoveL pActualPos,v500,fine,tGripper\WObj:=wobj0; MoveJ pHome,v500,fine,tGripper\WObj:=wobj0; bPalletFull:=FALSE; nCount:=1; Reset doGripper; ENDPROC 二、码垛现场程序案例: PROC rPick() MoveJ Offs(pPick,0,0,300),v2000,z50,tGripper\WObj:=wobj0; WaitDI diBoxInPos,1; MoveL pPick,v500,fine,tGripper\WObj:=wobj0; Set doGripper; WaitDI diVacuumOK,1; MoveL Offs(pPick,0,0,300),v500,z50,tGripper\WObj:=wobj0; ENDPROC 二、码垛现场程序案例: PROC rPlace() rPosition; MoveJ Offs(pPlace,0,0,300),v2000,z50,tGripper\WObj:=wobj0; MoveL pPlace,v500,fine,tGripper\WObj:=wobj0; Reset doGripper; WaitDI diVacuumOK,0; MoveL Offs(pPlace,0,0,300),v500,z50,tGripper\WObj:=wobj0; rPlaceRD; ENDPROC 二、码垛现场程序案例: PROC rPlaceRD() Incr nCount; IF nCount=11 THEN nCount:=1; bPalletFull:=TRUE; MoveJ pHome,v1000,fine,tGripper\WObj:=wobj0; ENDIF ENDPROC 二、码垛现场程序案例: PROC rPosition() TEST nCount CASE 1: pPlace:=RelTool(pPlaceBase,0,0,0\Rz:=0); CASE 2: pPlace:=RelTool(pPlaceBase,- 600,0,0\Rz:=0); CASE 3: pPlace:=RelTool(pPlaceBase,100,- 500,0\Rz:=90); CASE 4: pPlace:=RelTool(pPlaceBase,-300,- 500,0\Rz:=90); CASE 5: pPlace:=RelTool(pPlaceBase,-700,- 500,0\Rz:=90); CASE 6: pPlace:=RelTool(pPlaceBase,100,-100,- 250\Rz:=90); CASE 7: pPlace:=RelTool(pPlaceBase,-300,-100,- 250\Rz:=90); CASE 8: pPl。












