0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ABB机器人编程的详细解析

1bGT_GKYXT1508 2018-01-11 12:30 次阅读

1. ABB机器人Pdisp 轨迹偏移使用

1)如果有下图两个产品,已经完成了右边产品轨迹,左边产品估计一样,如何快速生成左边轨迹(左边产品可能有平移和旋转)

ABB机器人编程的详细解析

2)完成右边轨迹示教Path_30,如上图。起点为Target_20。

3)完成左边起点的示教,为Target_ref_start,如下图。

注:如果左边产品轨迹有旋转,示教的Target_ref_start相对于左边产品的姿态要和Target_20相对于右边产品的姿态一致(此处左边产品旋转了30°,示教的角度z方向也旋转了30°)

4)插入指令如下

MoveJ pHome,v1000,z100,tWeldGunWObj:=wobj0;//移动到Home位置

Path_30;//运行右边产品轨迹

MoveJpHome,v1000,z100,tWeldGunWObj:=wobj0;//回到Home

MoveJTarget_ref_start,v1000,fine,tWeldGunWObj:=wobj0;//走到左边产品起点

ConfJOff;//因为使用偏移,关闭轴配置监控,否则有可能使用原配置参数导致位置走不到而报错ConfLOff;//因为使用偏移,关闭轴配置监控,否则有可能使用原配置参数导致位置走不到而报错

PDispOnRot,Target_20,tWeldGun;//设定当前位置和Target_20的偏差关系(包括平移和旋转),因为此时机器人停在Target_ref_start起点,即设定左边轨迹和右边轨迹的整体偏移关系。使用 ot表示平移和旋转均计算。如果不使用 ot,则只使用平移,旋转不计算

Path_30;//运行原有轨迹,此时轨迹参考坐标移动关系,机器人实际走左边产品轨迹

PDispOff;//轨迹完成,关闭平移关系

MoveJ pHome,v1000,z100,tWeldGunWObj:=wobj0;

2. 单工位多次预约程序

1)机器人有程序如下。

2)

3)工艺过程如下:

机器人在home等待。有人按过di信号,机器人开始执行。人工可以一次性多次预约,即如果人工一次性按过3次,机器人执行三次

4)我们通过中断来实现。

5)中断的意义为,机器人后台在不断扫描(类似PLC),和机器人前台运动不冲突。后台实时扫描到信号就会去执行设定的中断程序,中断程序里没有运动指令,前台机器人不停,不影响运动

6)新建一个例行程序,取名tr_1,注意:类型选中断(trap)

ABB机器人编程的详细解析

7)进入中断程序,插入指令如下,即当机器人执行中断程序时,给reg1记录次数加1

8)进入主程序,设置中断及对应的io信号

37行的意思是,任何时候di_1信号0变1,就会触发执行tr_1中断程序,即置flag1为true

35-37行程序只要运行过一遍即可,类似于设置开关,不需要反复运行

9)主要程序如下。即如果reg1=0,机器人在home等待

更多视频讲解,也可登录 www.gkbpx.com

3. 在robotstudio创建两台机器人的socket连接

1)什么是socket通讯?

就是TCP/IP通讯,无协议,在微软环境下称为socket

2)socket通讯能干什么?

可以收发制定的数据,包括sting字符串,byte数组等

3)创建socket机器人需要什么选项?

机器人需要616-1 PC-INTERFACE选项

4)socket通讯网线插哪个网口?

Service口(IP固定:192.168.125.1)或者Wan口都可以,(可以自己设置)

5)创建client端的实例

通常机器人和相机通讯,机器人作为client端。

1)新建一个机器人系统,注意建立系统时加入pc-interface选项

2)为了避免之前的连接没有关闭,先插入socketclose指令,后面的socket1为自己新建的socketdev类型的变量

ABB机器人编程的详细解析
3)之后插入创建连接socketCreate

4)插入建立连接SocketConnect,后面需要制定Server的ip和端口,如果是在电脑和另一台虚拟控制器连接,ip设为“127.0.0.1”,端口自定义,建议不要用默认的1025.

这一步作用为机器人会和server建立连接,如果没有建立成功会一直等待,如果成功则往下执行

ABB机器人编程的详细解析5)此处做测试,在建立成功后,插入TPWrite指令,可以在示教器看到socketclinent connect successful

6)接下去可以收发数据,此处示例为client先发送数据给server,再接受server发送回来的数据

7)SocketSend后面可以发送string或者byte数组,具体可以选择不同可选变量

8)发送完毕后,client接受到server发回的数据并写屏

6)以下为server端示例

1)重新创建一个工作站,创建时不要忘记添加pcinterface选项

2)作为server,机器人需要创建2个socketdev变量

3)为了避免之前的连接没有关闭,同样建议先socketclose

4)

ABB机器人编程的详细解析
5)接着创建socketCreatetemp_socket服务器端socketdev

6)SocketBind为绑定socket要监控的ip和端口,如果是虚拟仿真,ip为127.0.0.1,端口自定义(和client端设置一致)

7)SocketListen为机器人server监听是否有client连接

8)socketAccept为接受client的连接

9)建立连接后,机器人就可以执行死循环,即一直处于收发状态

10)之前client程序为client先发后收,故这里server先收后发
ABB机器人编程的详细解析

7)client和server都写完后,可以运行,注意先运行server端,即server机器人处于监听状态,如果连上,两台相互通讯,效果如下

8)server机器人收到的讯息如下:

ABB机器人编程的详细解析

9) client机器人收到的讯息如下:

4. ABB机器人双工位预约程序

1)有如下双工位生产

2)工艺过程如下:

人工完成1#工位上料后按按钮di_1(按钮不带保持,即人手松开信号为0))机器人焊接1#工位。

此过程中人工对2#工位上下料,完成后按di_2完成预约(即不需要等机器人完成1#工作)。

机器人完成1#工作后,由于收到过di_2预约信号,机器人自动去完成2#工位

3)我们通过中断来实现。

4)中断的意义为,机器人后台在不断扫描(类似PLC),和机器人前台运动不冲突。后台实时扫描到信号就会去执行设定的中断程序,中断程序里没有运动指令,前台机器人不停,不影响运动

5)新建一个例行程序,取名tr_1,注意:类型选中断(trap)

6)进入中断程序,插入指令如下,即当机器人执行中断程序时,给bool量置true

同理设置第二个中断程序

7)进入主程序,设置中断及对应的io信号

37行的意思是,任何时候di_1信号0变1,就会触发执行tr_1中断程序,即置flag1为true

35-40行程序只要运行过一遍即可,类似于设置开关,不需要反复运行

8)主要程序如下。即如果没有人给di信号,机器人就在home位等待。

9)

5. 与相机通讯的Socket收发数据处理与提取

1)相机通常发送字符串给机器人,比如”1.23,4.56,7.89D”,即x为1.23,y为4.56,z的角度为7.89,用D作为结束符,数据之间用“,”隔开。

2)如果机器人收到上述字符串,如何把字符串提取出来并付给变量deltaX,deltaY,和thetaZ?

3)建立若干num变量,用以存储过程数据,比如StartBit1,表示x的数据从第几位开始,Endbit1表示x的数据结束是第几位,Lenbit1表示x数据的长度,s1表示提取的x的值的字符串

4)

ABB机器人编程的详细解析

5)先假设x的第一位是1,给Startbit1赋值为1

6)插入函数strfind,查找第一个“,”在第几位,得到EndBit1值

7)ABB机器人编程的详细解析

8)EndBit1减去StartBit1就是x的数据长度

9)同理得到y和theta的信息

10)通过StrPart函数,提取从StartBit1开始到LenBit1结束的字符串,即x的值的字符串

11)

12)同理得到y和z的字符串

13)通过StrToVal函数,把s1转为num型,付给delta_x, StrToVal函数的反馈值为bool量,即转换成功为true不成功为false

14)同理得到delta_y和delta_theta

15)成功后可以写屏测试,如下图

6. ABB机器人如何创建数组

1)什么是数组?

将相同数据类型的元素按一定顺序排列的集合

2)有什么用?

比如创建一个robtarget类型的数组p_array,p_array里有10个点位,走完10个位置就可以用如下代码,方便简洁

FOR i FROM 1 TO 10 DO

MoveL p_array{i},v500,z1,tool0;

ENDFOR

3)哪些数据类型能创建数组

所有数据类型都可以创建数组

4)数组最大几维?

ABB机器人数组最大三维!

5)数组起始序号是0还是1?

是1

6)如何创建

1)程序数据


2)选中类型,比如Robtarget

3)新建,设置名称,维数(这里举例1维),每个维度的元素数量(举例为10)

ABB机器人编程的详细解析
4)创建完,就有了一个10个数据的p_array,


5)修改点位,点击上图上某一行,修改位置,即把数组里的某一个元素位置修改了

7. ABB机器人创建自定义数据类型

1)什么是数据类型?

诸如robtarget,jointtarget等,把一系列相关元素集合在一起,类似结构体

2)如何查看系统的数据类型

Robotstudio的指令功能数据类型

3)ABB机器人是否可以自定义数据类型?

可以

4)如何创建自定义数据类型

必须在创建在模块的最前面,使用关键字RECORD和ENDRECORD

5)举例如下:

定义了一种数据类型叫student,里面包括性别(bool量),班级(num),分数。分数又是一个自定义数据类型,具体内容包括语文和数学分数。

6)可以在程序数据里查看到这个自定义的数据类型student

7)可以新建一个变量,类型为student,可以对内容设置

8)也可以在示教器进行赋值,类似p10.trans.x

8. ABB机器人数据存储类型区别

CONST VAR PERS区别

1)ABB机器人任何数据都有存储类型,分为常量CONST,变量VAR和可变量PERS

2)常量CONST,即程序内不能赋值

3)变量和可变量程序都能赋值,区别如下

变量-有初值和当前值。在执行打开程序,移动指针到main,移动指针到routine时,变量的当前值会被初始化,即值变为初值

可变量,只有当前值。即任何时候做了修改,其值就修改了。在执行打开程序,移动指针到main,移动指针到routine时,值就是当前值,不会发生变化

4)默认插入的robtarget的存储类型是const,即常量,此时无法赋值(如下图,即使类型选到robtarget还是不显示已经建立的robtarget)

此时,到程序数据,找到这个数据,编辑-更改申明,修改为变量

此时插入赋值语句时,就能找到这个点位了。

9. 创建带参数例行程序

1)什么是参数例行程序?

例行程序可以输入参数,使用的时候看起来就像自定义指令

2)有什么用?

方便使用,用户不用关心内部实现过程

3)如何创建

1)新建例行程序

2)设置名称,点击参数,设置输入参数

3)添加参数,注意右边的数据类型即为该参数数据类型,此处举例输入为2个robtarget

4)点击确定。

5)程序内部根据自己需要添加内容

6)带参数例行程序不能直接使用,必须有人调用,且输入参数,如下

使用ProcCall


7)此处举例pknpl指令的创建,实现功能为从pHome位置吸取并到Target_10位置放置

PROCRoutine2()

pknpl pHome,Target_10;

ENDPROC

PROCpknpl(robtarget pick_pos,robtarget place_pos)

MoveJoffs(pick_pos,0,0,30),v500,z1,tool0;

MoveL pick_pos,v500,fine,tool0;

Set do1;

MoveLoffs(pick_pos,0,0,30),v500,z1,tool0;

MoveJoffs(place_pos,0,0,30),v500,z1,tool0;

MoveL place_pos,v500,fine,tool0;

ReSet do1;

MoveL offs(place_pos,0,0,30),v500,z1,tool0;

ENDPROC

10. ABB机器人创建码垛程序

1)什么是码垛?

有规律的移动机器人进行抓取及放置

2)如何简便码垛程序

设置好工件坐标系,工具,对第一个码垛放置点进行示教,xyz方向的间距和个数可设

3)如何创建

创建m_pallet模块

建立两个routine

在init程序里,设置xyz方向个数和各方向间距

ABB机器人编程的详细解析

在p_main程序里,创建机器人移动到pHome点,pPick位置(抓取位置),以及第一个放置点pPlace_ini

通过三层for循环,进行码垛。实例程序为先x方向,再y方向,再z方向

其中偏移如下:

pPlace:=offs(pPlace_ini,(i-1)*dis_x,(j-1)*dis_y,(k-1)*dis_z);

11. 创建有规律的机器人旋转Robtarget

1)如果有上图所示6个产品位置要吸取,如何最快速的创建点位?(纯示教?Naive,太体力活了。)

2)如下图,我们可以发现1号位置和0号位置姿态一样,1号相对于0号就是一个半径的偏移,2-6号位置相对于0号也都是一个半径的偏移,2-6号姿态均朝向圆心。由于图中为6个,即从2号开始,每个点姿态相对于1号旋转了60°

3)是不是可以只要示教0号点位置,同时已知半径(未知的话,自己量一下),就能自动算出其他6个点位置而不用示教了呢?答案当然是可以的!!!

4)由于涉及到坐标系偏移和旋转,所以要做好Tool和工件坐标系

5)创建工具gripper_dual,假设z方向100,工具的Z方向为工具延伸方向

6)如下图创建坐标系,圆心在中间,0号到1号方向为X,y如图。下图中的工件坐标系Z朝下(满足右手法则)。这样创建主要是为了计算方便

7)在workwobject2坐标系,gripper_dual工具下,示教中间产品位置Target_center,此时工具的Z必须垂直于产品平面,即工具的Z朝下。(其实只是要用这个点的姿态和z,这个点的xy都是0,因为这个点在workobject2坐标系处于原点,即xy都是0)

8)设置圆心到第一个产品的距离(即半径radius),这里举例21.45mm

9)我们假设第一个位置叫Target1,则在workobject2坐标系下

Target1:=Target_center;!先让Target1位置和姿态都等于Target_center

Target1.trans.x:=radius*cos(60*0);!重新计算位置的x

Target1.trans.y:=radius*sin(60*0);!重新计算位置的y

Target1:=RelTool(Target1,0,0,0Rz:=0*60);!得到计算后的位置x和y后,tcp绕着工具的Z旋转60°。

10)通过上述例子,就得到了Target1位置,注意是在workobject2坐标系下。

11)再配合test等流程,就可以比较简单的完成6个位置的计算和移动,如下

PROC main()

radius:=21.45;

count1:=1;

WHILEcount1<7 DO

rHome;

cal;

routine1;

count1:=count1+1;

ENDWHILE

ENDPROC

PROC routine1()

MoveJoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;

MoveLTarget_temp,v500,z1,gripper_dualWObj:=Workobject_2;

WaitTime 1;

MoveLoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;

ENDPROC

PROC cal()

Target_temp:=Target_center;

TEST count1

CASE 1:

Target_temp.trans.x:=radius*cos(60*(count1-1));

Target_temp.trans.y:=radius*sin(60*(count1-1));

Target_temp:=RelTool(Target_temp,0,0,0Rz:=(count1-1)*60);

CASE 2:

Target_temp.trans.x:=radius*cos(60*(count1-1));

Target_temp.trans.y:=radius*sin(60*(count1-1));

Target_temp:=RelTool(Target_temp,0,0,0Rz:=60);

CASE 3:

Target_temp.trans.x:=radius*cos(60*(count1-1));

Target_temp.trans.y:=radius*sin(60*(count1-1));

Target_temp:=RelTool(Target_temp,0,0,0Rz:=120);

CASE 4:

Target_temp.trans.x:=radius*cos(60*(count1-1));

Target_temp.trans.y:=radius*sin(60*(count1-1));

Target_temp:=RelTool(Target_temp,0,0,0Rz:=180);

CASE 5:

Target_temp.trans.x:=radius*cos(60*(count1-1));

Target_temp.trans.y:=radius*sin(60*(count1-1));

Target_temp:=RelTool(Target_temp,0,0,0Rz:=-120);

CASE 6:

Target_temp.trans.x:=radius*cos(60*(count1-1));

Target_temp.trans.y:=radius*sin(60*(count1-1));

Target_temp:=RelTool(Target_temp,0,0,0Rz:=-60);

ENDTEST

ENDPROC

PROC rHome()

MoveJpHome,v500,z1,gripper_dualWObj:=wobj0;

ENDPROC

12. Fine与z0的区别

1)什么是zonedata?

机器人转弯半径,即机器人在运行两句运动指令时,若设置了转弯半径,机器人会平滑的过渡,转弯半径意义为,机器人进入到设置点半径内的位置,机器人开始过渡

2)什么是fine?

如果要准确到达一个位置,使用fine

3)z0和fine的区别?

轨迹上,z0和fine类似。但fine除了准确到达,还有一个阻止程序预读的功能

图1 21行使用z0


图2 21行使用fine

机器人运行的时候,示教器有2个图标,一个是左侧的箭头,表示程序已经读取到哪一行,还有一个是机器人图标,表示机器人实际在走哪一行。为了要实现平滑过渡等功能,机器人要预读几行代码。

如果使用了图1的z0,机器人在走第21行,程序已经执行到23行,即机器人还没走到位置已经打开do

如果使用了图2的fine,机器人在走第21行,程序还在21行,即有了fine,程序指针不会预读,即机器人走完21行后,才会执行打开do

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3614

    浏览量

    93686
  • ABB机器人
    +关注

    关注

    15

    文章

    88

    浏览量

    13503

原文标题:ABB机器人【编程技巧】分享技术!

文章出处:【微信号:GKYXT1508,微信公众号:工控云学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ABB IRB5400-喷涂工业机器人

    ` 本帖最后由 京五环以外 于 2015-1-14 11:17 编辑 ABB机器人IRB 5400是一个喷涂机器人家族,拥有喷涂精确、正常运行时间长、漆料耗用省、工作节拍短以及有效集成涂装设备等
    发表于 01-14 11:16

    ABB焊接机器人问题

    我的ABB机器人做焊接用。机器人给焊机的doweldon信号正常,也与机器人内部的weldon信号映射过,但是在使用编程指令arcl /ar
    发表于 10-16 23:07

    零基础玩转工业机器人

    知识体系分解细化,对ABB工业机器人知识要点做了针对性解析,并配以详细的操作步骤。全书以工业机器人组成为切入点,系统地介绍了
    发表于 10-29 17:03

    ABB机器人维修保养指南

    ABB机器人维修时常见的九大故障1、在什么情况下需要为机器人进行备份?解析:①新机器第一次上电后。②在做任何修改之前。③在完成修改之后
    发表于 08-19 10:32

    ABB机器人实训平台实验

    ZN-IRB01ABB机器人实训平台一、概述ZN-IRB01ABB机器人实训平台包含六自由度工业机器人、传感器检测系统、PLC控制系统及一套
    发表于 07-01 08:57

    工业机器人仿真与编程

    目录概述行走轴模型拆分行走轴模型导入仿真软件创建行走轴机械装置外部轴配置向导插件安装虚拟机器人系统创建行走轴系统配置机器人安装到行走轴行走轴运动控制文已经首发在个人微信公众号:工业机器人仿真与
    发表于 09-07 08:57

    ABB机器人的CCLink配置详细资料说明

     ABB机器人提供CC-Link总线的支持。ABB机器人通过DSQC 378B(如下图)模块,把CC-Link协议转化成Devicenet协议,与
    发表于 03-24 08:00 7次下载
    <b class='flag-5'>ABB</b><b class='flag-5'>机器人</b>的CCLink配置<b class='flag-5'>详细</b>资料说明

    ABB机器人的常用指令详细讲解

    本文档的主要内容详细介绍的是ABB机器人的常用指令详细讲解。
    发表于 04-24 08:00 5次下载
    <b class='flag-5'>ABB</b><b class='flag-5'>机器人</b>的常用指令<b class='flag-5'>详细</b>讲解

    ABB机器人框架断路器的Emax样本详细解析

    本文档的主要内容详细介绍的是ABB机器人框架断路器的Emax样本详细解析
    发表于 04-28 08:00 0次下载
    <b class='flag-5'>ABB</b><b class='flag-5'>机器人</b>框架断路器的Emax样本<b class='flag-5'>详细</b><b class='flag-5'>解析</b>

    ABB将简易编程工具扩展到工业机器人产品系列

    ABB将简易编程工具扩展到工业机器人产品系列,无需专门培训即可轻松安装、编程和操作机器人ABB
    的头像 发表于 01-18 10:04 2071次阅读

    ABB机器人线速度_青岛ABB机器人发生电源故障维修

    青岛ABB机器人发生电源故障维修工具:检查ABB机器人DSQC604故障指示灯LED已经亮起时,则表示ABB
    发表于 01-11 13:32 12次下载
    <b class='flag-5'>ABB</b><b class='flag-5'>机器人</b>线速度_青岛<b class='flag-5'>ABB</b><b class='flag-5'>机器人</b>发生电源故障维修

    abb工业机器人编程语言是什么

    ABB工业机器人编程语言主要是RAPID(Robot Application Programming Interface for Development),它是一种高级编程语言,专门
    的头像 发表于 06-16 16:49 2502次阅读

    abb机器人的基本配置包括哪些

    ABB机器人是一种广泛应用于工业自动化领域的智能设备。它具有高度的灵活性、可靠性和精确性,可以完成各种复杂的任务。为了实现这些功能,ABB机器人需要进行基本配置。以下是
    的头像 发表于 06-17 09:19 1514次阅读

    abb机器人movej和movel的区别

    ABB机器人是一种广泛应用于工业自动化领域的智能设备,具有高度的灵活性和可靠性。在ABB机器人编程和操作中,movej和movel是两种常
    的头像 发表于 06-17 09:26 3136次阅读

    abb机器人系统密钥在哪

    ABB机器人系统密钥是ABB机器人系统中用于保护其知识产权和确保系统安全性的一种技术手段。本文将详细介绍
    的头像 发表于 06-17 09:45 1341次阅读