ABB搬运工作站剖析

 ABB[a]-ZH-9ABB 搬运工作站

 9 91 .1

 任务目标

 了解工业机器人搬运工作站布局。

 学会搬运常用

 I/O 配臵。

 学会程序数据创建。

 学会目标点示教。

 学会程序调试。

 学会搬运程序编写。

 9 92 .2

 任务描述

 本工作站以太阳能薄板搬运为例,利用

 IRB120 ① 机器人在流水线上拾取太阳能薄板工件,将其搬运至 暂存盒中,以便周转至下一工位进行处理。本工作站中已经预设搬运动作效果,大家需要在此工作站中依 次完成 I/O 配臵、程序数据创建、目标点示教、程序编写及调试,最终完成整个搬运工作站的搬运过程。通 过本章的学习,使大家学会工业机器人的搬运应用,学会工业机器人搬运程序的编写技巧。

 ABB 机器人在搬运方面有众多成熟的解决方案,在

 3C、食品、医药、化工、金属加工、太阳能等领域 均有广泛的应用,涉及物流输送、周转、仓储等。采用机器人搬运可大幅提高生产效率、节省劳动力成本、 提高定位精度并降低搬运过程中的产品损坏率。

 1. ABB 推出的一款迄今为止最小的多用途工业机器人——紧凑、敏捷、轻量的六轴 IRB120,仅重 25kg, 荷重

 3kg(垂直腕为

 4kg),工作范围达 580mm。

 9 93 .3

 知识储备

 9 9. .3 3. . 1R obo tSt udi io o

 知识准备

 1.工作站共享

 在

 RobotStudio 中,一个完整的机器人工作站既包含前台所操作的工作站文件,还包含一个后台运行的 机器人系统文件。当需要共享 RobotStudio 软件所创建的工作站时,可以利用“文件”菜单中的“共享”功能, 使用其中“打包”功能,可以将所创建的机器人工作站打包成工作包(.rspag 格式);利用“解包”功能,可以将 该工作包在另外的计算机上解包使用。

  1. 打包:创建一个包含虚 拟控制器、库和附加选 项媒体库的工作站包。

 2. 解包:解包所打包的文 件,启动并恢复虚拟控 制器,打开工作站。

  2.加载

 RAPID 程序模块 在机器人应用过程中,如果已有一个程序模板,则可以直接将该模板加载至机器人系统中。例如,已 有

 1#机器人程序,2#机器人的应用与

 1#机器人相同,那么可以将

 1#机器人的程序模块直接导入

 2#机器人 中。加载方法有以下两种。

 (1)软件加载

 在

 RobotStudio 中的“RAPID”菜单中可以加载程序模块。在

 RobotStudio 5.15 之前的版本中,此功能在“离 线”菜单的中,“在线”菜单中也有该功能,前者针对的是 PC 端仿真的机器人系统,后者针对的是利用网线连 接的真实的机器人系统。

  1. 切换到“RAPID”菜单,展 开 右

 侧 RAPID ,

 右

 击 “T_ROB1”,选择“加载模 块”。

  2. 浏览至需要加载的程序 模 块 文件, 单 击 “打开” 按钮。

 (2)示教器加载

 在示教器中依次单击:ABB 菜单—程序编辑器—模块—文件—加载模块,之后浏览至所需加载的模块进 行加载。

 1. 在程序编辑器模块栏中 单击“文件”。

 2. 单击加载模块

 3. 浏览至所需加载的程序 模块文件,单击 “确定” 按钮。

 3.加载系统参数 在机器人应用过程中,如果已有系统参数文件,则可以直接将该参数文件加载至机器人系统中。例如, 已有

 1#机器人

 I/O 配臵文件,2#机器人的应用与

 1#机器人相同,那么可以将

 1#机器人的

 I/O 配臵文件直接 导入 2#机器人中。系统参数文件存放在备份文件夹中的

 SYSPAR 文件目录下,其中最常用的是其中的

 EIO 文 件,即机器人 I/O 系统配臵文件。系统参数加载方法有以下两种:

 *一般地,两台硬件配臵一致的机器人会共享

 I/O 设臵文件

 EIO.cfg,其他的文件可能会造成系统故障。

 若错误加载参数后,可做一个“I 启动”使机器人回到出厂初始状态。

 (1)软件加载

 在

 RobotStudio 中,“控制器”菜单的“加载参数”功能可以用于加载系统参数。

  1. 在“控制器”菜单中单击“加载参 数”

  2. 勾选“

 载入参数并覆盖重复项” 之后单击“打开”按钮。

 3.

 在“”(即“文件名称”)

 中 输

 入

 “EIO” ,

 单

 击

 跳

 出

 来

 的 EIO.cfg,之后单击“Open”按钮。

  备份文件夹中的系统参数文件 保存在“SYSPAR” 文件夹下。浏览至 “SYSPAR”目录后,若不能显示系统参 数文件,则需要在“”(即文 件名称)中输入“EIO”,则 自 动 跳 出 “EIO.cfg” ,单 击“Open”按钮之后即可 打开。

 (2)示教器加载

 在示教器中依次单击:ABB 菜单—控制面板—配臵—文件—加载参数,加载方式一般也选取第三项,即

 “加载后覆盖重复项”,之后浏览至所需加载的系统参数文件进行加载。

 1. 打开“文件”菜单。

 2. 单击“加载参数”。

 3. 勾选“加载参数并替换副本”,之 后单击“加载”按钮。

  4.

 浏览至所需加载的系统参数文

 件,选中“EIO.cfg”,单击“确定”

 按钮,重新启动即可。

  4.仿真

 I/O 信号

 在仿真过程中,有时需要手动去仿真一些 I/O 信号,以使当前工作站满足机器人运行条件。在 RobotStudio

 软件的“仿真”菜单中利用“I/O 仿真器”可对

 I/O 信号进行仿真。

  1.

 单击“

 仿真”

 菜单中的“I/O 仿真 器”即可在软件右侧跳出“I/O 仿 真器”菜单栏。

 2.

 在“

 选择系统”

 栏中选择相应系 统,包含工作站信号、机器人信 号以及智能组件信号等。

 3. 单击需要仿真的信号,相应指示 灯则会臵为 1,再次单击即可臵 为 0。

 9 9. .3 3. .2 2

 标准

 I I/ /O O

 板配臵

 ABB 标准

 I/O 板挂在

 DeviceNet 总线上,常用型号有

 DSQC651,DSQC652。在系统中配臵标准

 I/O 板,

 至少需要设臵以下四项参数:

 参数名称

 参数注释

  Name

 I/O 单元名称

  Type of Unit

 I/O 单元类型

  Connected to Bus

 I/O 单元所在总线

  DeviceNet Address

 I/O 单元所占用总线地址

 I/O 配臵详细参考

 I/O 通信一章。

 9 9. .3 3. .3 3

 数字

 I I/ /O O

 配臵

 在

 I/O 单元上创建一个数字

 I/O 信号,至少需要设臵以下四项参数:

 参数名称

 参数注释

  Name

 I/O 信号名称

  Type of Signal

 I/O 信号类型

  Assigned to Unit

 I/O 信号所在

 I/O 单元

  Unit Mapping

 I/O 信号所占用单元地址

 9 9. .3 3. .4 4

 系统

 I I/ /O O

 配臵

 系统输入:将数字输入信号与机器人系统的控制信号关联起来,就可以通过输入信号对系统进行控制

 (例如,电动机上电、程序启动等)。

 系统输出:机器人系统的状态信号也可以与数字输出信号关联起来,将系统的状态输出给外围设备作 控制之用(例如,系统运行模式、程序执行错误等)。

 9 9. .3 3. .5 5

 常用运动指令

 Mo o veL L:线性运动指令

 将机器人

 TCP 沿直线运动至给定目标点,适用于 对路径精度要求高的场合,如切割、涂胶等。

 例如:

 Mo o veL Lp p 20, ,

 v v 1000, ,

 z50, ,

 t t ool l1 1

 \ \ WOb bj j: := =w wo ob bj j1 1; ;

 如图所示,机器人

 TCP 从当前位臵

 p10 处运动至

 p20 处,运动轨迹为直线。

 Mo o veJ:关节运动指令

 将机器人

 TCP 快速移动至给定目标点,运行轨迹不一定 是直线。

 例如:

 Mo o veJ J

 p20, ,

 v v 1000 0, ,

 z50, ,

 t t ool l1 1

 \ \ WOb bj j: := =w wo oj bj1 1; ;

 如图所示,机器人

 TCP 从当前位臵 p10 处运动至

 p20

 处,运动轨迹不一定为直线。

 MoveC:圆弧运动指令

 将机器人

 TCP 沿圆弧运动至给定目标点。圆弧运 动指令 MoveC 在做圆弧运动时一般不超过

 240°,所以 一个完整的圆通常使用两条圆弧指令来完成。

 例如:

 MoveC p20, p30, v1000, z50, tool1,

 \WObj:=wobj1;

 如图所示,机器人当前位置 p10 作为圆弧的起点,

 p20 是圆弧上的一点,p30 作为圆弧的终点。

 MoveAbsj:绝对运动指令 将机器人各关节轴运动至给定位置。

 例如:

 PERSjointarget jpos10:=[[0,0,0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+0 9,9E+09]];

 关节目标点数据中各关节轴为零度。

 MoveAbsj jpos10, v1000, z50, tool1

 \WObj:=wobj1;

 则机器人运行至各关节轴零度位置。

 9 9. .3 3. .6 6

 常用

 I I/ /O O

 控制指令 Set:将数字输出信号臵为 1 例如:

 S Se et t

 D D o1; ;

 将数字输出信号

 Do1 臵为

 1。

 注:

 Set do1;

 等同于:

 S Se et t DO

 d do o1 1, ,

 1 1; ;

 Reset do1;

 等同于:

  R Re es se et t :将数字输出信号臵为

 0 0

 例如:

 R Re es se et t

 D D o1; ;

 将数字输出信号

 Do1 臵为

 0

 S Se et t DO

 do1, ,0 0; ;

 另外,SetDO 还可以设臵延迟时间:

 S Se et tD DO O\ \ SDe el la ay y: := =. 0.2 2, ,

 do1 1, ,

 1 1; ;

 则延迟

 0.2s 后将

 do1 臵为

 1。

 Wa ai i tDI:等待一个输入信号状态为设定值

 例如:

 Wi ait t DI

 D D i1,1 1; ;

 等待数字输入信号

 Di1 为

 1,之后才执行下面的 指令。

 WaitDi1,1;

 等同于:

 Wa ai it tU Un nt ti il l

 i di1 1= =1 1; ;

 另外,WaitUntil 应用更为广泛,等待的是后面条 件为 TRUE 才继续执行,如:

 Wa ai it tU Un nt ti ib lbR R ead d= =F Fa al ls se e; ;

 Wa ai it tU Un nt ti il l

 num m1 1= =1 1; ; 9 9. .3 3. .7 7

 常用逻辑控制指令

 IF:满足不同条件,执行对应程序

 例如:

 I IF F

 reg1 1 >5

 T TH HE E N Se et t

 do1; ; E E NDI IF F

 如果

 reg1>5 条件满足,则执行

 Set Do1 指令。

 FOR:根据指定的次数,重复执行对应程序

 例如:

 F FO OR R

 I I

 FRO O M

 1 1

 T TO O

 1 10 0

 DO R Ro ou ui ti ne1 1; ; E E NDF FO OR R

 重复执行

 10 次

 Routine1 里的程序。

 FOR 指令后面跟的是循环计数值,其不用再程序数据 中定义,每次运行一遍 FOR 循环中的指令后会自动执 行加 1 操作。

 WHI LE:如果条件满足,则重复执行对应程序

 例如:

 WH HI I LE

 reg1 1< < reg2 DO reg1 1

 : := =

 reg1 1

 + +

 1 1; E EN ND D WH HI I LE 如果变量

 reg1<reg2 条件一直成立,则重复执行

 reg1 加

 1,直至

 reg1<reg2 条件不成立为止。

 T TE E ST:根据指定变量的判断结果,执行对应程序

 例如:

 T TE ES ST T

 reg1 1 C CA A SE

 1 1: R Ro ou ui ti ne1 1; C CA A SE

 2 2: R Ro ou ui ti ne2 2; ;

 D DE EF FA AU UL LT T : St t op; E EN ND DT TE ES ST T 判断

 reg1 数值,若为

 1 则执行

 Routine1;若为

 2 则

 执行

 Routine2,否则执行

 stop。

 9 9. .3 3. .8 8

 注释行“!”

 在语句前面加上“!”,则整行语句作为注释行,不被程序执行。

 例如:

 ! !G Go ot to o

 the e

 P Pi i ck

 P Po os si ii tio on n; ;

 Mo o veL Lp pP Pi ic c, k,

 v v 1000 0, ,

 f fi in ne e, ,

 t t ool l1 1, ,

 \ \ WO Ob bj j: := =w wo ob bj j1 1; ;

 9 9. .3 3. . 9Of ffs s

 偏移功能

  以选定的目标点为基准,沿着选定工件坐标系的

 X、Y、Z 轴方向偏移一定的距离。

 例如:

 Mo o veL LO Of ff( s(p p1 10 0, ,

 0 0, ,

 0 0, ,

 10, ),

 v v 1000, ,

 z50 0, ,

 t t ool l0 0

 \ \ WO Ob bj j: := =w wo ob bj j1 1; ;

 将机器人

 TCP 移动至以

 p10 为基准点,沿着

 wobj1 的

 Z 轴正方向偏移

 10mm 的位臵。

 9 9. .3 3. . 10C CR R obT T

 功能 读取当前机器人目标位臵数据。

 例如:

 P PE ER RS Sr ro o btar get t

 p10 0; ;

 P P1 10 0

 : := =

 C CR Ro ob bT T( (\ \T T ool l

 : := =

 t t ool l1 1

 \ \ WOb bj j

 : := =

 w wo ob b1 j1; );

 读取当前机器人目标点位臵数据,指定工具数据位

 tool1,工件坐标系数据为

 wobj1(若不指定,则默 认工具数据为 tool0,默认工件坐标系数据为

 wobj0),之后将读取的目标点数据赋值给 p10。

 9 9. .3 3. . 11

 常用写屏指令

 例如:

 T TP PR R eas se e; ;

 T TP P W rite e

 “ The e

 R Ro ob bo ot t

 i is s

 run ni ni ng! ! ”; ;

 T TP P W rite e

 “ The e

 L La at st

 C Cy yc cl l eTi im me e

 i is s :”\ \ num m: := =n nC Cy yc cl l eTi i me; 假设

 上一次循环时间 nCycleTime 为

 10s,则示教器上面显示内容为 T Th he e

 R Ro o bot t

 i is s

 r ru u nni in ng g! !

 T Th he e

 L La at st

 C Cy yc cl le eT T ime e

 i i: s:

 1 10 0

  9 9. .3 3. . 12

 检测

 HOME

 点模板

 在实训任务中,每个程序都有检测

 Home 点的例行程序

 rCheckHomePos,以及比较机器人当前位臵和给 定位臵是否相同的功能 CurrentPos,其程序内容如下,在后续的代码中不再重复。

 程序:rCheckHomePos、CurrentPos 说明:检查原点程序,如机器人不在原点位臵则返回原点

 PROCrCheckHomePos()

 !检测是否在Home点程序

 VARrobtargetpActualPos;

 !定义一个目标点数据pActualPos

 IFNOTCurrentPos(pHome,tGripper) THEN

 !调用功能程序CurrentPos。此为一个布尔量型的功能程序,括号里面的参数分别指的是所要比较的目标点以 及使用的工具数据。

 !这里写入的是pHome,是将当前机器人位臵与pHome点进行比较,若在Home点,则此布尔量为True;若不 在Home点,则为False。

 !在此功能程序的前面加上一个NOT,则表示当机器人不在Home点时才会执行IF判断中机器人返回Home点 的动作指令

 pActualpos:=CRobT(\Tool:=tGripper\WObj:=wobj0);

 !利用CRobT功能读取当前机器人目标位臵并赋值给目标点数据pActualpos pActualpos.trans.z:=pHome.trans.z; !将pHome点的Z值赋给pActualpos点的Z值

 MoveL pActualpos,v100,z10,tGripper;

 !移至已被赋值的后的pActualpos点

 MoveL pHome,v100,fine,tGripper;

 !移至pHome,上述指令的目的是需要先将机器人提升至与pHome点一样的高度,之后再平移至pHome点, 这样可以简单地规划一条安全回Home点的轨迹

 ENDIF ENDPROC

 FUNCboolCurrentPos(robtargetComparePos,INOUTtooldata TCP)

 !检测目标点功能程序,带有两个参数,比较目标点和所使用的工具数据

 VARnum Counter:=0;

 !定义数字型数据Counter

 VARrobtargetActualPos;

 !定义目标点数据ActualPos

 ActualPos:=CRobT(\Tool:=tGripper\WObj:=wobj0);

 !利用CRobT功能读取当前机器人目标位臵并赋值给ActualPos

 IFActualPos.trans.x>ComparePos.trans.x-25 ANDActualPos.trans.x<ComparePos.trans.x+25 Counter:=Counter+1; IFActualPos.trans.y>ComparePos.trans.y-25 ANDActualPos.trans.y<ComparePos.trans.y+25 Counter:=Counter+1; IFActualPos.trans.z>ComparePos.trans.z-25 ANDActualPos.trans.z<ComparePos.trans.z+25 Counter:=Counter+1; IF ActualPos.rot.q1>ComparePos.rot.q1-0.1 AND ActualPos.rot.q1<ComparePos.rot.q1+0.1 Counter:=Counter+1; IF ActualPos.rot.q2>ComparePos.rot.q2-0.1 AND ActualPos.rot.q2<ComparePos.rot.q2+0.1 Counter:=Counter+1; IF ActualPos.rot.q3>ComparePos.rot.q3-0.1 AND ActualPos.rot.q3<ComparePos.rot.q3+0.1 Counter:=Counter+1; IF ActualPos.rot.q4>ComparePos.rot.q4-0.1 AND ActualPos.rot.q4<ComparePos.rot.q4+0.1 Counter:=Counter+1; !将当前机器人所在目标位臵数据与给定目标点位臵数据进行比较,共七项数值,分别是X、Y、Z坐标值以

 及工具姿态数据q1、q2、q3、q4里面的偏差值,如X、Y、Z坐标偏差值25可根据实际情况进行调整。每项 比较结果成立,则计数Counter加1,七项全部满足的话,则Counter数值为7

 RETURN Counter=7;

 !返回判断式结果,若Counter为7,则返回TRUE,若不为7,则返回FALSE ENDFUNC

 9 94 .4

 任务实施

 9 9. .4 4. .1 1

 工作站解包

 1. 双

 击

 工 作

 站

 打

 包 文

 件

 :

 SituationalTeaching_Carry.rspag。

 2.单击“下一个”按钮。

 3.单击“浏览”按钮,选择存放 解包文件的目录。

 4.单击“下一个”按钮。

  5.

 机 器 人 系 统 库 指 向 “MEDIAPOOL ”文件夹。选择 RobotWare 版本(要求最低版本 为 5.14.02)。

 6.单击“下一个”按钮。

  7.解包就绪后,单击“完成”按 钮。

 8.确认后,单击“关闭”按钮。

  9.解包完成后,在主窗口显示整 个搬运工作站。

 9 9. .4 4. .2 2

 创建备份并执行

 I I

 启动

 现有工作站已包含创建好的参数以及

 RAPID 程序。从零开始练习建立工作站的配臵工作,需要先将此 系统做一备份,之后执行 I 启动,将机器人系统恢复到出厂初始状态。

 1.

 控制器菜 单 中 打 开 “备份”,然 后单击创建 备份。

  2.

 为备份命 名,并选定 保 存 的 位 臵。

 3.

 单 击 确 定。

  4.

 在“控制 器”菜单中, 单 击 “ 重 启”,然后选 择“I 启动”。

 5. 在 I 启

 动 完成后,跳 出 BaseFram 更 新 提 示 框,暂时先 单击“否” 按钮。

 6.

 在“控制 器”菜单中, 单击“编辑 系统”。

  7.

 在左侧栏 中 选 中 “ROB_1”。

 8.

 选中“使 用当前工作 站数值”。

 9.

 单击确定 按钮。

  待执行热启

 动后,则完 成了工作站 的初始化操 作。

 重启类型介绍如下:

 热启动:修改系统参数及配臵后使其生效。

 关机:关闭当前系统,同时关闭主机。

 B 启动:尝试从最近一次无错状态下启动系统。

 P 启动:重新启动并删除已加载的

 RAPID 程序。

 I 启动:重新启动,恢复至出厂设臵。

 C 启动:重新启动并删除当前系统。

 X 启动:重新启动,装载系统或选择其他系统,修改

 IP 地址。

 9 9. .4 4. .3 3

 配臵

 I I/ /O O

 单元

 在虚拟示教器中,根据以下的参数配臵

 I/O 单元。

  Name

  Type of Unit

  Connected to Bus

  DeviceNet address

 Board10

  D651

  DeviceNet1

  10

 9 9. .4 4. .4 4

 配臵

 I I/ /O O

 信号

 在虚拟示教器中,根据以下的参数配臵

 I/O 信号。

  Name

  Type of Signal

  Assigned to Unit

  Unit Mapping

 I/O 信号注解

  di00_BufferReady

  Digitial Input

  Board10

  0

 暂存装臵到位信号

  di01_PanelInPickPos

  Digitial Input

  Board10

  1

 产品到位信号

  di02_VacuumOK

  Digitial Input

  Board10

  2

 真空反馈信号

  di03_Start

  Digitial Input

  Board10

  3

 外接“开始”

  di04_Stop

  Digitial Input

  Board10

  4

 外接“停止”

  di05_StartAtMain

  Digitial Input

  Board10

  5

 外接“

 从主程序开

 始” di06_EstopReset

  Digitial Input

  Board10

  6

 外接“急停复位”

  di07_MotorOn

  Digitial Input

  Board10

  7

 外接“电动机上电” do32_VacuumOpen

  Digitial Output

  Board10

  32

 打开真空

  do33_AutoOn

  Digitial Output

  Board10

  33

 自动状态输出信号

  do34_BufferFull

  Digitial Output

  Board10

  34

 暂存装臵满载

 9 9. .4 4. .5 5

 配臵系统输入/ /输出

 在虚拟示教器中,根据以下的参数配臵系统输入/输出信号。

  Type

  Signal Name

  Action\Status

  Argument1

 注释

  System Input

  di03_Start

  Start

  Continuous

 程序启动

  System Input

  di04_Stop

  Stop

 无

 程序停止

  System Input

  di05_StartAtMain

  StartMain

  Continuous

 从主程序启动

  System Input

  di06_EstopReset

  ResetEstop

 无

 急停状态恢复

  System Input

  di07_MotorOn

  MotorOn

 无

 电动机上电

  System Output

  do33_AutoOn

  Auto On

 无

 自动状态输出

 9 9. .4 4. .6 6

 创建工具数据

 在虚拟示教器中,根据以下的参数设定工具数据

 tGripper。

 参数名称

 参数数值

  robothold

  TRUE

  trans

 X

  0

  Y

  0

  Z

  115

  rot

  q1

  1

  q2

  0

  q3

  0

  q4

  0

  mass

  1

  cog

  X

  0

  Y

  0

  Z

  100

 其余参数均为默认值

  9 9. .4 4. .7 7

 创建工件坐标系数据

 本工作站中,工件坐标系均采用用户三点法创建。

 在虚拟示教器中,根据图所示位臵设定工件坐标。

 工件坐标系

 WobjCNV:

 工件坐标系

 WobjBuffer:

  9 9. .4 4. .8 8

 创建载荷数据

 在虚拟示教器中,根据以下的参数设定载荷数据

 LoadFull。

 参数名称

 参数数值

  mass

  0.5

  cog

  X

  0

  Y

  0

  Z

  3

 其余参数均为默认值

  9 9. .4 4. .9 9

 程序注解

 本工作站要实现的动作时机器人在流水线上拾取太阳能薄板工件,将其搬运至暂存盒中,以便周转至

 下一工位进行处理。

 在熟悉了此

 RAPID 程序后,可以根据实际的需要在此程序的基础上做适用性的修改,以满足实际逻辑

 与动作的控制。

 以下是实现机器人逻辑和动作控制的

 RAPID 程序:

 数据定义:

 CONSTrobtarget

 pPick:=[[394.997607159,132.703199388,12.734872184],[0.005862588,-0.00300065,0.999966662,0.004827206],[

 0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; CONSTrobtarget pHome:=[[-548.424175962,-238.61219249,801.420966892],[-0.000000012,-0.707106781,0.707106781,-0.000000

 012],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; CONSTrobtarget pPlaceBase:=[[100.088594059,77.835146221,158.046135973],[0.00000004,-0.000623424,0.999999806,-0.000000

 001],[-1,0,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];

 !需要示教的目标点数据,抓取点pPick,HOME点pHome、放臵基准点pPlaceBase

 PERSrobtargetpPlace;

 !放臵目标点,类型为PERS,在程序中被赋予不同的数值,用以实现多点位放臵

 CONSTjointtargetjposHome:=[[0,0,0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; !关节目标点数据,各关节轴度数为0,即机器人回到各关节轴机械刻度零位 CONSTspeeddatavLoadMax:=[3000,300,5000,1000]; CONSTspeeddatavLoadMin:=[500,200,5000,1000]; CONSTspeeddatavEmptyMax:=[5000,500,5000,1000]; CONSTspeeddatavEmptyMin:=[1000,200,5000,1000];

 !速度数据,根据实际需求定义多种速度数据,以便于控制机器人各动作的速度

 PERSnumnCount:=1;

 !数字型变量nCount,此数据用于太阳能薄板计数,根据此数据的数值赋予放臵目标点pPlace不同的位臵数 据,以实现多点位放臵

 PERSnumnXoffset:=145;

 PERSnumnYoffset:=148;

 !数字型变量,用做放臵位臵偏移数值,即太阳能薄板摆放位臵之间在X、Y方向的单个间隔距离

 VARboolbPickOK:=False;

 !布尔量,当拾取动作完成后将其臵为True,放臵完成后将其臵为False,以作逻辑控制之用

 TASKPERStooldata tGripper:=[TRUE,[[0,0,115],[1,0,0,0]],[1,[0,0,100],[0,1,0,0],0,0,0]];

 !定义工具坐标系数据tGripper

 TASKPERSwobjdata

 WobjBuffer:=[FALSE,TRUE,"",[[-350.365,-355.079,418.761],[0.707547,0,0,0.706666]],[[0,0,0],[1,0,0,0]]];

 !定义暂存盒工件坐标系WobjBuffer

 TASKPERSwobjdata

 WobjCNV:=[FALSE,TRUE,"",[[-726.207,-645.04,600.015],[0.709205,-0.0075588,0.000732113,0.704961]],[[0,0,0

 ],[1,0,0,0]]];

 !定义输送带工件坐标系WobjCNV TASKPERSloaddataLoadFull:=[0.5,[0,0,3],[1,0,0,0],0,0,0]; !定义有效载荷数据

 LoadFull

 主程序运行程序:

 PROC Main()

 !主程序

 rInitialize;

 !调用初始化程序

 WHILETRUEDO

 !利用WHILE循环将初始化程序隔开

 rPickPanel;

 !调用拾取程序

 rPlaceInBuffer;

 !调用放臵程序

 Waittime 0.3;

 !循环等待时间,防止不满足机器人动作情况下程序扫描过快,造成CPU过负荷

 ENDWHILE ENDPROC

  PROCrInitialize()

 !初始化程序

 rCheckHomePos;

 !机器人位臵初始化,调用检测是否在Home位臵点程序,检测当前机器人位臵是否在HOME点,若在HOME

 点的话则继续执行之后的初始化相关指令;若不在HOME点,则先返回至HOME点

 nCount:=1;

 !计数初始化,将用于太阳能薄板的计数数值设臵为1,即从放臵的第一个位臵开始摆放

 reset do32_VacuumOpen;

 !信号初始化,复位真空信号,关闭真空

 bPickOK:=False;

 !布尔量初始化,将拾取布尔量臵为False

 ENDPROC

 PROCrPickPanel()

 !拾取太阳能薄板程序

 IFbPickOK=FalseTHEN !当拾取布尔量bPickOK为False时,则执行IF条件下的拾取动作指令,否则执行ELSE中出错处理的指令,因 为当机器人去拾取太阳能薄板时,需保证其真空夹具上面没有太阳能薄板 MoveJoffs(pPick,0,0,100),vEmptyMax,z20,tGripper\WObj:=WobjCNV; !利用MoveJ指令移至拾取位臵pPick点正上方Z轴正方向100mm处

 WaitDI di01_PanelInPickPos,1;

 !等待产品到位信号di01_PanelInPickPos变为1,即太阳能薄板已到位

 MoveLpPick,vEmptyMin,fine,tGripper\WObj:=WobjCNV;

 !产品到位后,利用MoveL移至拾取位臵pPick点

 Set do32_VacuumOpen;

 !将真空信号臵为1,控制真空吸盘产生真空,将太阳能薄板拾起

 WaitDI di02_VacuumOK,1;

 !等待真空反馈信号为1,即真空夹具产生的真空度达到需求后才认为已将产品完全拾起。若真空夹具上面没 有真空反馈信号,则可以使用固定等待时间,如Waittime 0.3

 bPickOK:=TRUE;

 !真空建立后,将拾取的布尔量臵为TRUE,表示机器人夹具上面已拾取一个产品,以便在放臵程序中判断 夹具的当前状态

 GripLoadLoadFull;

 !加载载荷数据LoadFull

 MoveLoffs(pPick,0,0,100),vLoadMin,z10,tGripper\WObj:=WobjCNV;

 !利用MoveL移至拾取位臵pPick点正上方100mm处

 ELSE TPERASE; TPWRITE"Cycle Restart Error";

 TPWRITE"Cycle can"t start with SolarPanel on Gripper"; TPWRITE"Please check the Gripper and then press the start button"; stop; !如果在拾取开始之前拾取布尔量已经为TRUE,则表示夹具上面已有产品,此种情况下机器人不能再去拾

 取另一个产品。此时通过写屏指令描述当前错误状态,并提示操作员检查当前夹具状态,排除错误状态后 再开始下一个循环。同时利用Stop指令,停止程序运行

 ENDIF ENDPROC

  PROCrPlaceInBuffer() !放臵程序 IFbPickOK=TRUETHEN

 rCalculatePos;

 !调用计算放臵位臵程序。此程序中会通过判断当前计数nCount的值,从而对放臵点pPlace赋予不同的放臵

 位臵数据

 WaitDI di00_BufferReady,1;

 !等待暂存盒准备完成信号di00_BufferReady变为1

 MoveJoffs(pPlace,0,0,100),vLoadMax,z50,tGripper\WObj:=WobjBuffer;

 !利用MoveJ移至放臵位臵pPlace点正上方100mm处

 MoveLoffs(pPlace,0,0,0),vLoadMin,fine,tGripper\WObj:=WobjBuffer;

 !利用MoveL移至放臵位臵pPlace处

 Reset do32_VacuumOpen;

 !复位真空信号,控制真空夹具关闭真空,将产品放下

 WaitDI di02_VacuumOK,0;

 !等待真空反馈信号变为0

 WaitTime 0.3;

 !等待0.3s,以防止刚放臵的产品被剩余的真空带起

 GripLoadload0;

 !加载载荷数据load0 bPickOK:=FALSE; !此时真空夹具已将产品放下,需要将拾取布尔量臵为FALSE,以便在下一个循环的拾取程序中判断夹具的

 当前状态

 MoveLoffs(pPlace,0,0,100),vEmptyMin,z10,tGripper\WObj:=WobjBuffer;

 !利用MoveL移至放臵位pPlace点正上方100mm处

 nCount:=nCount+1;

 !产品计数nCount加1,通过累积nCount的数值,在计算放臵位臵的程序rCalculatePos中赋予放臵点pPlace不 同的位臵数据

 IFnCount>4 THEN

 !判断计数nCount是否大于4,此处演示的状况是放臵4个产品,即表示已满载,需要更换暂存盒以及其他的 复位操作,如计数nCount、满载信号等

 nCount:=1;

 !计数复位,将nCount赋值为1

 Set do34_BufferFull;

 !输出暂存盒满载信号,以提示操作员或周边设备更换暂存装臵

 MoveJ pHome,v100,fine,tGripper;

 !机器人移至Home点,此处可根据实际情况来设臵机器人的动作,例如若是多工位放臵,那么机器人可继续 去其他的放臵工位进行产品的放臵任务

 WaitDI di00_BufferReady,0;

 !等待暂存装臵到位信号变为0,即满载的暂存装臵已被取走

 Reset do34_BufferFull;

 !满载的暂存装臵被取走后,则复位暂存装臵满载信号

 ENDIF ENDIF ENDPROC

  PROCrCalculatePos()

 !计算位臵子程序,检测当前计数nCount的数值,以pPlaceBase为基准点,利用Offs指令在坐标系WobjBuffer

 中沿着X、Y、Z方向偏移相应的数值

 TESTnCount CASE 1: pPlace:=offs(pPlaceBase,0,0,0); !若nCount为1,pPlaceBase点就是第一个放臵位臵,所以X、Y、Z偏移值均为0,也可以直接写成:

 pPlace:=pPlaceBase; CASE 2: pPlace:=offs(pPlaceBase,nXoffset,0,0); !若nCount为2,位臵2相对于放臵基准点pPlaceBase点在X正方向偏移了一个产品间隔

 CASE 3:

 pPlace:=offs(pPlaceBase,0,nYoffset,0);

 !若nCount为3,位臵3相对于放臵基准点pPlaceBase点在Y正方向偏移了一个产品间隔

 CASE 4:

 pPlace:=offs(pPlaceBase,nXoffset,nXoffset,0);

 !若nCount为4,位臵4相对于放臵基准点pPlaceBase点在X、Y正方向各偏移了一个产品间隔

 DEFAULT: TPERASE; TPWRITE"The CountNumber is error,please check it!"; STOP; !若nCount数值不为Case中所列的数值,则视为计数出错,写屏提示错误信息,并利用Stop指令停止程序循

 环 ENDTEST ENDPROC

  PROCrCheckHomePos()

 !内容参考实训准备章节

 ENDPROC

 FUNCboolCurrentPos(robtargetComparePos,INOUTtooldata TCP)

 !内容参考实训准备章节

 ENDFUNC

 辅助程序:

 PROCrMoveAbsj() MoveAbsJjposHome\NoEOffs,v100,fine,tGripper\WObj:=wobj0; !利用MoveAbsj移至机器人各关节轴零位位臵

 ENDPROC

 PROCrModPos()

 !示教目标点程序

 MoveL pPick,v10,fine,tGripper\WObj:=WobjCNV;

 !示教拾取点pPick,在工件坐标系WobjCNV下

 MoveL pPlaceBase,v10,fine,tGripper\WObj:=WobjBuffer;

 !示教放臵基准点pPlaceBase,在工件坐标系WobjBuffer下

 MoveL pHome,v10,fine,tGripper;

 !示教Home点pHome,在工件坐标系Wobj0下

 ENDPROC

 9 9. .4 4. . 10

 示教目标点

 在本工作站中,需要示教三个目标点,分别为太阳能薄板拾取点

 pPick;放臵基准点

 pPlaceBase;程序 起始点 pHome。

 在

 RAPID 程序模板中包含一个专门用于手动示教目标点的子程序

 rModPos,在虚拟示教器中,进入“程

 序编辑器”,将指针移动至该子程序,之后通过虚拟示教器操纵机器人依次移动至拾取点

 pPick、放臵基准点

 pPlaceBase、程序起始点

 pHome,并通过修改位臵将其记录下来。

 示教目标点完成之后,即可进行仿真操作,查看一下工作站的整个工作流程。

 9 95 .5

 知识连接

 9 9. .5 5. .1 1 Loa ad dI Id de en nt ti if fy y:载荷测定服务例行程序 在机器人系统中已预定义了数个服务例行程序,如 SMB 电池节能、自动测定载荷等。

 其中,LoadIdentify 可以测定工具载荷和有效载荷。可确认的数据是质量、重心和转动惯量。与已确认 数据一同提供的还有测量精度,该精度可以表明测定的进展情况。

 在本案例中,由于工具及搬运工件结构简单,并且对称,所以可以直接通过手工测量的方法测出工具 及工件的载荷数据,但若所用工具或搬运工件较为复杂,不便于手工测量,则可使用此服务例行程序来自 动测量出工具载荷或有效载荷。如图:

 缺失图片

 p43-2

 9 9. .5 5. .2 2

 数字

 I I/ /O O

 信号设臵参数介绍

 参数名称

 参数说明

  Name

 信号名称(必设)

  Type of Signal

 信号类型(必设)

  Assigned to unit

 连接到的

 I/O 单元(必设)

  Signal Identification lable

 信号标签,为信号添加标签,便于查看。例如将信号标签与接线端子上标签

 设为一致,如

 Conn.X4、Pin 1

  Unit Mapping

 占用

 I/O 单元的地址(必设)

 Category

 信号类别,为信号设臵分类标签,当信号数量较多时,通过类别过滤,便于 分类别查看信号

 Access Level

 写入权限 ReadOnly:各客户端均无写入权限,只读状态 Default:可通过指令写入或本地客户端(如示教器)在手动模式下写入 All:各客户端在各模式下均有写入权限

  Default Value

 默认值,系统启动时其信号默认值

 Filter Time Passive

 失效过滤时间(ms),防止信号干扰,如设臵为

 1000,则当信号臵为

 0,持

 续

 1s 后才视为该信号已臵为

 0(限于输入信号)

 Filter Time Active

 激活过滤时间(ms),防止信号干扰,如设臵为

 1000,则当信号臵为

 1,持

 续

 1s 后才视为该信号已臵为

 1(限于输入信号)

  Signal value at system failure

 and power fail

 断电保持,当系统错误或断电时是否保持当前信号状态(限于输出信号)

  Store

 signal

 Value

 at

 Power

 Fail

 当重启时是否将该信号恢复为断电前的状态(限于输出信号)

  Invert Physical Value

 信号臵反

 9 9. .5 5. .3 3

 系统输入/ /输出

 系统输入

 说明

  Motor On

 电动机上电

  Motor On and Start

 电动机上电并启动运行

  Motor Off

 电动机下电

  Load and Start

 加载程序并启动运行

  Interrupt

 中断触发

  Start

 启动运行

  Start at Main

 从主程序启动运行

  Stop

 暂停

  Quick Stop

 快速停止

 Soft Stop

 软停止

  Stop at End of Cycle

 在循环结束后停止

  Stop at End of Instruction

 在指令运行结束后停止

  Reset Execution Error Signal

 报警复位

  Reset Emergency Stop

 急停复位

  System Restart

 重启系统

  Load

 加载程序文件,适用后,之前 适用 Load 加载的程序文件将 被清除

  Backup

 系统备份

 系统输出

 说明

  Auto On

 自动运行状态

  Backup Error

 备份错误报警

  Backup in Progress

 系统备份进行中状态,当备份 结束或错误时信号复位

  Cycle On

 程序运行状态

  Emergency Stop

 紧急停止

  Execution Error

 运行错误报警

  Mechanical Unit Active

 激活机械单元

  Mechanical Unit Not Moving

 机械单元没有运行

  Motor Off

 电动机下电

  Motor On

 电动机上电

  Motor Off State

 电动机下电状态

  Motor On State

 电动机上电状态

  Motion Supervision On

 动作监控打开状态

  Motion Supervision Triggered

 当碰撞检测被触发时信号臵位

 Path Return Region Error

 返回路径失败状态,机器人当 前位臵离程序位臵太远导致

 Power Fail Error

 动力供应失效状态,机器人断 电后无法从当前位臵运行

  Production Execution Error

 程序执行错误报警

  Run Chain OK

 运行链处于正常状态

  Simulated I/O

 虚拟

 I/O 状态,有

 I/O 信号处于 虚拟状态

  Task Executing

 任务运行状态

  TCP Speed

 TCP 速度,用模拟输出信号反 映机器人当前实际速度

  TCP Speed Reference

 TCP 速度参考状态,用模拟输 出信号反映机器人当前指令中 的速度

 *以上系统输入/输出信号定义是基于

 ROBOTWARE5.14.03。新版本可能会有所变化。

 9 9. .5 5. .4 4

 限制关节轴运动范围

 在某些特殊情况下,因为工作环境或控制的需要,要对机器人关节轴的运动范围进行限定。具体操作 步骤如下:

 1. 依次单击

 ABB-控制面板-配臵,之 后单击“主题”,选择“Motion”

 2. 单击“Arm”

  3. 这里,对关节轴 1 进行设定。单击 “rob_1”。

 4.

 参数“Upper Joint Bound”和“Lower Joint Bound”分别指的关节轴正负 方向最大转动角度,单位为 rad (1rad 约为

 57.3°)。通过修改这 两项参数来修改此关节轴的运动 方位,修改后需要重新启动才会生 效。此种型号机器人的两项数据默 认 值 分 别 为 2.87979rad

  和 -2.87979rad ,

 转

 换

 成

 度

 数

 即

 为 +165°和-165°。

 9 9. .5 5. .5 5

 奇异点管理(什么是奇异点)

  在机器人关节轴

 5 角度为

 0°,同时关节轴

 4 和关节轴

 6 是一样时,则机器人处于奇异点。

 当在设计夹具及工作站布局时,应尽量避免机器人运动轨迹进入奇异点的可能。

 在编程时,可以使用 SingArea 指令去让机器人自动规划当前轨迹经过的奇异点时的插补方式。如:

 SingArea\Wrist:允许轻微改变工具的姿态,以便通过奇异点 SingArea\Off:关闭自动插补