杨晓华, 杨 旭
(成都工贸职业技术学院, 四川 成都 611731)
科学技术的发展可谓日新月异,各种信息技术的不断发展进步,推动着社会生产的各个领域的进步,尤其是自动化技术的应用。在物流仓库中货车卸货搬运及货物码垛入库,运用伸缩系统进入货车内部,解决货车内部卸货难题[1]。机器人的应用能够替代人工作业适应各种恶劣环境,并且其操作精准性高,保证了生产的质量[2]。智能工程抓取的总体设计思路做成了一系列成本低、性价比高、实用性高的工业机器人[3]。随着工业自动化技术水平的不断提高,机器人具有高柔性、高效率与高精准性,使得机器人在不同的生产领域都得到了广泛的应用[4]。码垛搬运机器人由于它工作范围大、动作灵活、结构紧凑、能抓取靠近机座的物体等特点,所以在医药、石化等领域的物料的码垛、搬运当中广泛应用[5]。在自动化物流生产线上,码垛搬运机器人的出现大大节省了人力、物力,加快了生产速度,成为企业普遍引进的对象。大部分研究者只是对其结构、运动方案进行优化设计,而对机器人编程研究得较少。本文主要针对工业机器人编程进行分析探讨。
工业机器人码垛搬运货物时,使用示教的方法编写程序,占用机器人的时间较长,劳动强度较大并且通用性较差,一旦货物的摆放位置和形状改变就需要重新示教。通过在教学过程中的经验总结,可以利用高级编程循环指令进行程序优化。现在以搬运工作站,从库里面把方块抓出来,按照要求进行摆放来探讨For循环指令的应用,如图1所示。
图1 搬运工作站
计数循环(For)的定义:For循环是一种可以通过规定重复次数执行一个或多个指令的控制结构。
DECL INT counter; 定义counter变量为整数型
.......; 可以编写相应的指令
For counter = 1 TO 3 Step 1; Step 1表示递增计数(循环一次,计数增加1)
......; 循环内容
ENDFOR; 循环结束
(1)循环计数器的起始值要进行初始化:counter=1
(2)循环计数器在ENDFOR时会以步幅STEP递增计数(当递增为1时,可以省略不写)。
(3)检查进入循环的条件:计数变量小于等于指定的终值,循环又从FOR行开始循环计数,变量大于指定的终值结束循环,继续运行ENDFOR行后面的程序。
本文主要以教学用的搬运工作站,摆放4行4列方块,两方块中心在X、Y方向距离为80 mm来探讨For循环指令的应用,如图2所示。
图2 4×4摆放方块
摆放的方块从库里面抓取的位置始终是不变的,可以把抓取方块的路径编写在一个程序里面,作为子程序调用,本文程序编写都基于工具坐标系Tool[10]:pick和基坐标系(工件坐标系)Base[10]:block,基坐标系定义沿工作台横向为Y(右正、左负)纵向为X(前正、后负),上下为Z(向上为正、向下为负),方块在库中位置,如图1所示。
DEF pick ( );程序名称
N1:SPTP HOME Vel=100% DEFAULT;机器人HOME点
N2:SPTP P1 Vel=100% PDAT1 Tool[10]pick Base[10]:block;避让点(避让点的多
少根据外围设备情况进行示教取点,这里只取了一个避让点)
N3:SPTP P2 Vel=0.2 m PDAT2 Tool[10]pick Base[10]:block;预抓取点
N4:SLIN P3 Vel=0.2 m CPDAT3 Tool[10]pick Base[10]:block;抓取点
N5:wait time=1; 等待1秒,确保抓取点的准确性
N6:PULSE 208 'jia' State=TRUE Time=1 sec;抓取动作信号
N7:SLIN P2 Vel=0.2 m CPDAT2 Tool[10]pick Base[10]: block; 返回预抓取点
N8:SPTP P1 Vel=100% PDAT1 Tool[10]pick Base[10]: block;避让点
N9:SPTP HOME Vel=100% DEFAULT;机器人HOME点
示教编程指由人工引导机器人末端执行器(安装于机器人关节结构末端的夹持器、工具、焊枪、喷枪等),或用示教盒(与控制系统相连接的一种手持装置,用以对机器人进行编程或使之运动)完成程序的编制来使机器人完成预期的动作。下面采用示教编程完成4×4摆放方块的程序编写,由于程序过长,只列举了第1个、第2个和第16个方块的示教程序。
DEF displaying( ); 程序名称
方块一 N1:pick ( ); 调用抓取方块程序
N2:SPTP P1 Vel=100% PDAT1 Tool[10] Base[10]; 避让点
N3:SPTP P2 Vel=100% PDAT2 Tool[10] Base[10]; 预释放点
N4:SLIN P3 Vel=0.2 m CPDAT3 Tool[10] Base[10];释放点
N5:wait time=1; 等待1秒,确保释放点的准确性
N6:PULSE 209 'fang' State=TRUE Time=1 sec; 释放动作信号
N7:SLIN P2 Vel=0.2 m CPDAT2 Tool[10] Base[10]; 返回预释放点
N8:SPTP P1 Vel=100% PDAT1 Tool[10] Base[10]; 避让点
方块二 N9:pick ( ) ; 调用抓取方块程序
N10:SPTP P4 Vel=100% PDAT4 Tool[10] Base[10]; 避让点
N11:SPTP P5 Vel=100% PDAT5 Tool[10] Base[10]; 预释放点
N12:SLIN P6 Vel=0.2 m CPDAT6 Tool[10] Base[10];释放点
N13:wait time=1; 等待1秒,确保释放点的准确性
N14:PULSE 209 'fang' State=TRUE Time=1 sec; 释放动作信号
N15:SLIN P5 Vel=0.2 m CPDAT5 Tool[10] Base[10]; 返回预释放点
N16:SPTP P4 Vel=100% PDAT4 Tool[10] Base[10]; 避让点
……
……
……
方块16: NN: pick ( ) ;调用抓取方块程序
NN:SPTP PX1Vel=100% PDATX1Tool[10] Base[10]; 避让点
NN:SPTP PX2Vel=100% PDATX2Tool[10] Base[10]; 预释放点
NN:SLIN PX3Vel=0.2 m CPDATX3Tool[10] Base[10];释放点
NN:wait time=1; 等待1秒,确保释放点的准确性
NN:PULSE 209 'fang' State=TRUE Time=1 sec;释放动作信号
NN:SLIN PX2Vel=0.2 m CPDATX2Tool[10] Base[10]; 返回预释放点
NN:SPTP PX1Vel=100% PDATX1Tool[10] Base[10]; 避让点
从示教的程序来看需要搬运的货物越多程序就越复杂,并且示教编程所花的时间也比较长,当货物之间的位置、数量改变后又需要重新编程,程序通用性较差。
DEF displaying(); 程序名称
N1:decl e6pos a[4,4]; 声明数组变量用于存储摆放方块的位置
N2:decl int b,c; 声明整数变量
N3:INI; 初始化
N4:b=0; 给变量赋值
N5:c=0; 给变量赋值
N6:for b=1 to 4; 从1开始循环到4终止(摆放的行数循环)
N7:for c=1 to 4; 从1开始循环到4终止(摆放的列数循环)
N8:a[b,c]=xp1; 把示教xp1的位置赋给a[b,c]数组,示教位置,如图2所示
N9:a[b,c].x=a[b,c].x+80×(b-1); 80表示两个方块中心在X方向的距离。
N10:a[b,c].y=a[b,c].y+80×(c-1); 80表示两个方块中心在Y方向的距离。
N11:a[b,c].z=a[b,c].z+100; 数组a[b,c]位置坐标在z方向位置加100 mm
N12:endfor;结束y方向循环
N13:endfor;结束x方向循环
注释:以上的For循环进行摆放位置计算并保存在数组中
N14:for b=1 to 4;从1开始循环到4终止(摆放的行数循环)
N15:for c=1 to 4;从1开始循环到4终止(摆放的列数循环)
N16: pick ( );调用抓取子程序。
N17: sptp a[b,c]; 预释放点(位置存储在数组a[b,c]里面)
N18: slin_rel{z-100}; 释放点(在数组a[b,c]位置上向z的负方向偏移100 mm)
N19: wait time=1;等待1秒,确保释放点的准确性
N20: PULSE 209 'fang' State=TRUE Time=1 sec; 释放动作信号
N21: slin_rel{z+100};返回预释放点(在数组a[b,c]位置上向z的正方向偏移100 mm)
N22:endfor; 结束y方向循环
N23:endfor; 结束x方向循环
N24:End
注释:以上的For循环完成方块的摆放
此研究以KUKA工业机器人码垛搬运作业为对象,应用For循环指令进行程序优化。通过对码垛货物程序中For循环次数和X、Y方向之间的距离进行修改,可实现不同行数列数货物的码垛搬运作业,减少示教编程占用机器人的大量时间,提高生产效率。应用For循环优化过的码垛搬运程序具有模块化、易懂、清楚明了、可读性、通用性、良好的经济效益等特点。该程序还可以延伸,增加一个For循环实现不同层数货物的码垛功能。