笔耕不觉夜已深,情寄工业机器人
前言
知行合一
在工业机器人的生产应用场景里,离线编程与示教编程是绕不开的话题。通俗的讲,工业机器人不是现实中有自主思想的人,得下达指令它才会照着做,示教编程好比工程师现场手把手教授机器人哪里该走哪里该避开,焊接哪里搬运哪里,一步一步的让它适应了,再把适应后的指令存下来传给机器人;而离线编程就好比工程师预先将所有的指令打包好,然后传到机器人那里,机器人按照预先给定的指令走就行。
在下面的正文里我会对离线编程进行详细的解读,如果我的解读对正在看博客的你起到了帮助的话,我将不胜荣幸。
另外,本人所用的软件是飞思德Fastsuite,一款由德国公司Cenit研发的先进离线编程软件,兼容性很好,支持各种不同型号的机器人/数控机床与不同的加工工艺。版本号是24.1。
提示:以下是本篇文章正文内容,下面案例可供参考
一、离线编程是什么?
离线编程,英文名: Off-Line Programming,缩写OLP。用我自己的话讲,就是根据现实工业场景的业务需求,在软件中创建与之对应的3D虚拟环境。然后在虚拟的场景中进行与现实相符的加工工艺选择,并进行加工路径的模拟与仿真调试,最后让软件生成与下载机器人的执行程序并传输给机器人。
与离线编程相对的就是示教编程,英文名:Teaching Programming,顾名思义,就是在现场通过示教器对机器人进行调试,让机器人能够做出适应现场生产的操作,并将操作储存与记录。
二、为什么要用离线编程?
示教编程的好处是贴合现场,毕竟直接在现场进行的示教调试。示教编程在诸如码垛的生产过程中得到了比较广泛的应用,但是如果生产环境较为恶劣,生产工艺及加工路径很复杂的情况下,示教编程的适用度就很低。
用我自己的经验来举个例子,我用优傲机器人进行现场示教,对加工模具打进铆钉的时候,对TCP的设定调整出现了问题,这导致存储与记录数据后,机器人运行加工操作时一个铆钉都没打进模具的孔里。另外由于机器人停机的时候有一个摆动来进行复位,就是这个摆动让机器人的工具头砸到了模具的底座导致底座出现了裂痕,这对于实际的生产过程中其实是大为不利的。那时我就在想,我如果预先能模拟一遍,再到现场去让机器人跑程序,不就能避免以上的问题了嘛?
后来证明我想的没错,这时就是离线编程大展身手的时间了,通过对离线编程软件的使用,我们在飞思德软件里构建起虚拟模拟场景,编一编加工路径然后仿真,直到调试完成后再下载并输入到机器人里。这一过程中既不会发生现实中不想要的碰撞,又能够减少机器人待机的时间——编好了再让机器人操作,比一遍遍的让机器人动来动去以适应场景要节省不少的时间成本。
而且我们再想的更远一些,对一个机器人的调整都如此麻烦,倘若是大型的生产场景,好多个机器人进行分工协作来进行加工操作,一个个的进行示教编程显然费时费力,此时在离线编程里模拟复现场景并调试的好处可以说是不言而喻的。
三、部分代码解读
虽然我们不是机器人,但是看懂输出的代码可以让我们更好地去了解机器人的加工过程,从而能在软件中进行更精确的调试。我将展示我在做弧焊学习项目时的一小段代码以及附上我对代码的详细解读,希望对各位有所帮助。
1.两方向触碰寻位
代码如下(示例):
CALL CG_X_Z(1);
L PR[3] 3000cm/min FINE Offset, PR[GP1:99]
Weld Start [1,1] ;
/PROG CG_X_Z
/MN
PR[AR[1]]=LPOS ;
Search Start [1] PR[100] ; // [1] 代表了 触碰寻位条件,包含 寻位的方向,寻位的次数(Search end 之前需要几个search[x] [y] [z])
L PR[AR[1]] 100mm/sec FINE Search[X] ;
PR[GP1:AR[1],1]=PR[GP1:32,1]-6 ; P
Search End ; // 结束寻位
6:L PR[AR[1]] 100mm/sec FINE ; // 走到了更改数字之后的PR[AR[1]]
7: Search Start [1] PR[100] ;
8:L PR[AR[1]] 100mm/sec FINE Search[Z] ;
9: PR[GP1:AR[1],1]=PR[GP1:32,1]+6 ; // 为什么+6
10: PR[GP1:AR[1],3]=PR[GP1:32,3]+0 ;
11: Search End ;
/POS
/END
我用以上自己学习过程中做的两方向寻位代码来做分析,具体分析如下:
CALL CG_X_Z(1); // 调用子程序 CG_X_Z.ls 往X方向,往Z方向寻位,如果前面带F则表示负方向。得到的数据保存在PR[1]
L PR[3] 3000cm/min FINE Offset, PR[GP1:99] // PR[3] 是从哪里得到的数据 从P[32]得到的(x) 45:CALL CG_Y_Z(4); 得到的(x) 42:CALL CG_Y_Z(3);
开头的作用理解:
/PROG CG_X_Z作用是什么?
答:x和z方向的寻位。
得到的是什么?
1、对进入点(逼近点)的了解(现实场景和仿真场景的差别) -> Approach point | 进入(逼近)焊接路径、离开焊接路径的点位的方向(位置)
2、X 和 Z 方向的坐标系(以x和z为基底的基础坐标系)(后发现这是现场用来找用户坐标系的,两方向(x,z)来确定第三轴y,所以只需两个方向就能确定)
3、决定焊接路径的开始和离开点位的位置
(这里进行一下名词解释:开始:也叫起弧点;离开:也叫收弧点)
4、整个寻位过程详细解答:
/MN变量: PR[AR[1]] 保存的是进入路径点的位置
1: PR[AR[1]]=LPOS ; // LPOS 代表机器人当前的姿态; AR[1] 是调用子程序传入的参数
2: Search Start [1] PR[100] ; // [1] 代表了 触碰寻位条件,包含 寻位的方向,寻位的次数(Search end 之前需要几个search[x] [y] [z])
3:L PR[AR[1]] 100mm/sec FINE Search[X] ;
4: PR[GP1:AR[1],1]=PR[GP1:32,1]-6 ; PR[GP1:AR[1]] -> PR[GP1:数字] ; (PR[GP1:32,1]-6) -> 数字 ; PR[32] 存放的是触碰寻位过程中机器人触碰到工件时的位置
4 含义: PR[32,1] 记录的是当前寻位触碰时 x的坐标 ; search[x] 之后需要把机器人再次远离工件表面
5: Search End ; // 结束寻位
6:L PR[AR[1]] 100mm/sec FINE ; // 走到了更改数字之后的PR[AR[1]]
7: Search Start [1] PR[100] ;
8:L PR[AR[1]] 100mm/sec FINE Search[Z] ;
9: PR[GP1:AR[1],1]=PR[GP1:32,1]+6 ; // 为什么+6
10: PR[GP1:AR[1],3]=PR[GP1:32,3]+0 ;
11: Search End ;
/POS
/END
这是我当时自己的疑惑与事后的解答:
①脚本最后得到的数据是什么?
答:点位信息
②脚本最后得到的数据保存在哪里?
答:是在 PR[AR[1]]
③从这段代码里最大的收获?
答:我们可以很清楚的知道,触碰寻位就是为了找到焊接路径起始点和终点的位置;
四、总结
随着工业4.0与工业自动化的大力推行,离线编程一定会得到更广泛的应用。同时离线编程的技术也在与时俱进。未来,离线编程软件会变得更加人性化,界面变得更加简单易用。而对于工厂与各大企业而言,离线编程的应用会大大提高他们的效益与产能,同时降低他们的时间成本与生产成本,进而大大提升其在智能时代所展现的竞争力。