基于KUKA工业机器人FOR循环指令应用的探讨

2021-01-20 04:59杨晓华
有色设备 2020年6期
关键词:码垛数组方块

杨晓华, 杨 旭

(成都工贸职业技术学院, 四川 成都 611731)

科学技术的发展可谓日新月异,各种信息技术的不断发展进步,推动着社会生产的各个领域的进步,尤其是自动化技术的应用。在物流仓库中货车卸货搬运及货物码垛入库,运用伸缩系统进入货车内部,解决货车内部卸货难题[1]。机器人的应用能够替代人工作业适应各种恶劣环境,并且其操作精准性高,保证了生产的质量[2]。智能工程抓取的总体设计思路做成了一系列成本低、性价比高、实用性高的工业机器人[3]。随着工业自动化技术水平的不断提高,机器人具有高柔性、高效率与高精准性,使得机器人在不同的生产领域都得到了广泛的应用[4]。码垛搬运机器人由于它工作范围大、动作灵活、结构紧凑、能抓取靠近机座的物体等特点,所以在医药、石化等领域的物料的码垛、搬运当中广泛应用[5]。在自动化物流生产线上,码垛搬运机器人的出现大大节省了人力、物力,加快了生产速度,成为企业普遍引进的对象。大部分研究者只是对其结构、运动方案进行优化设计,而对机器人编程研究得较少。本文主要针对工业机器人编程进行分析探讨。

1 问题提出

工业机器人码垛搬运货物时,使用示教的方法编写程序,占用机器人的时间较长,劳动强度较大并且通用性较差,一旦货物的摆放位置和形状改变就需要重新示教。通过在教学过程中的经验总结,可以利用高级编程循环指令进行程序优化。现在以搬运工作站,从库里面把方块抓出来,按照要求进行摆放来探讨For循环指令的应用,如图1所示。

图1 搬运工作站

2 KUKA工业机器人高级编程指令(For)简介

计数循环(For)的定义:For循环是一种可以通过规定重复次数执行一个或多个指令的控制结构。

2.1 循环指令格式

DECL INT counter; 定义counter变量为整数型

.......; 可以编写相应的指令

For counter = 1 TO 3 Step 1; Step 1表示递增计数(循环一次,计数增加1)

......; 循环内容

ENDFOR; 循环结束

2.2 循环指令的原理

(1)循环计数器的起始值要进行初始化:counter=1

(2)循环计数器在ENDFOR时会以步幅STEP递增计数(当递增为1时,可以省略不写)。

(3)检查进入循环的条件:计数变量小于等于指定的终值,循环又从FOR行开始循环计数,变量大于指定的终值结束循环,继续运行ENDFOR行后面的程序。

3 4×4方块摆放程序的设计

本文主要以教学用的搬运工作站,摆放4行4列方块,两方块中心在X、Y方向距离为80 mm来探讨For循环指令的应用,如图2所示。

图2 4×4摆放方块

3.1 抓取方块的程序

摆放的方块从库里面抓取的位置始终是不变的,可以把抓取方块的路径编写在一个程序里面,作为子程序调用,本文程序编写都基于工具坐标系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点

3.2 示教方法编写4×4摆放方块的程序

示教编程指由人工引导机器人末端执行器(安装于机器人关节结构末端的夹持器、工具、焊枪、喷枪等),或用示教盒(与控制系统相连接的一种手持装置,用以对机器人进行编程或使之运动)完成程序的编制来使机器人完成预期的动作。下面采用示教编程完成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]; 避让点

从示教的程序来看需要搬运的货物越多程序就越复杂,并且示教编程所花的时间也比较长,当货物之间的位置、数量改变后又需要重新编程,程序通用性较差。

3.3 高级循环指令(For)优化4×4摆放方块的程序

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循环完成方块的摆放

4 结束语

此研究以KUKA工业机器人码垛搬运作业为对象,应用For循环指令进行程序优化。通过对码垛货物程序中For循环次数和X、Y方向之间的距离进行修改,可实现不同行数列数货物的码垛搬运作业,减少示教编程占用机器人的大量时间,提高生产效率。应用For循环优化过的码垛搬运程序具有模块化、易懂、清楚明了、可读性、通用性、良好的经济效益等特点。该程序还可以延伸,增加一个For循环实现不同层数货物的码垛功能。

猜你喜欢
码垛数组方块
有多少个方块
JAVA稀疏矩阵算法
不一样的方块桥
可控机构式码垛机器人的运动学误差分析
移动式码垛机器人移动臂的优化设计
JAVA玩转数学之二维数组排序
谜题方块
GSK工业机器人码垛程序编写技巧
更高效用好 Excel的数组公式
寻找勾股数组的历程