ABB搬运工作站 - 图文 下载本文

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

9.1 任务目标

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

? 学会搬运常用 I/O 配置。

? 学会程序数据创建。

? 学会目标点示教。

? 学会程序调试。

? 学会搬运程序编写。

9.2 任务描述

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

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

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

荷重 3kg(垂直腕为 4kg),工作范围达 580mm。 9.3 知识储备

9.3.1RobotStudio 知识准备

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. 在“File name”(即“文件名称”) 中 输 入 “EIO” , 单 击 跳 出 来 的 EIO.cfg,之后单击“Open”按钮。 备份文件夹中的系统参数文件 保存在“SYSPAR” 文件夹下。浏览至 “SYSPAR”目录后,若不能显示系统参 数文件,则需要在“File name”(即文 件名称)中输入“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.3.2 标准 I/O 板配置

ABB 标准 I/O 板挂在 DeviceNet 总线上,常用型号有 DSQC651,DSQC652。在系统中配置标准 I/O 板,

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

参数名称 参数注释 I/O 单元名称 I/O 单元类型 I/O 单元所在总线 I/O 单元所占用总线地址 Name Type of Unit Connected to Bus DeviceNet Address I/O 配置详细参考 I/O 通信一章。

9.3.3 数字 I/O 配置

在 I/O 单元上创建一个数字 I/O 信号,至少需要设置以下四项参数:

参数名称 参数注释 I/O 信号名称 I/O 信号类型 I/O 信号所在 I/O 单元 I/O 信号所占用单元地址 Name Type of Signal Assigned to Unit Unit Mapping 9.3.4 系统 I/O 配置

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

(例如,电动机上电、程序启动等)。 系统输出:机器人系统的状态信号也可以与数字输出信号关联起

来,将系统的状态输出给外围设备作

控制之用(例如,系统运行模式、程序执行错误等)。

9.3.5 常用运动指令

MoveL:线性运动指令

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

例如:

MoveJ:关节运动指令

将机器人 TCP 快速移动至给定目标点,运行轨迹不一定

是直线。

例如:

MoveLp20, \\WObj:=wobj1;

v1000, z50, tool1

MoveJ p20, v1000, z50, tool1 \\WObj:=wobj1;

如图所示,机器人 TCP 从当前位置 p10 处运动至 p20

如图所示,机器人 TCP 从当前位置 p10 处运动至 处,运动轨迹不一定为直线。 p20 处,运动轨迹为直线。

MoveAbsj:绝对运动指令 将机器人MoveC:圆弧运动指令 各关节轴运动至给定位置。 例如: 将机器人 TCP 沿圆弧运动至给定目标点。圆弧运 动指令 MoveC 在做圆弧运动时一般不超过 240°,所以 PERSjointarget 一个完整的圆通常使用两条圆弧指令来完成。 jpos10:=[[0,0,0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+0 例如: 9,9E+09]]; MoveC p20, p30, v1000, z50, tool1, 关节目标点数据中各关节轴为零度。 \\WObj:=wobj1; MoveAbsj jpos10, v1000, z50, tool1 如图所示,机器人当前位置 p10 作为圆弧的起点, \\WObj:=wobj1; p20 是圆弧上的一点,p30 作为圆弧的终点。 则机器人运行至各关节轴零度位置。 9.3.6 常用 I/O 控制指令 Set:将

数字输出信号置为 1 例如:

注:

Set Do1;

Set do1; 等同于:

将数字输出信号 Do1 置为 1。

SetDO do1, 1;

Reset do1; 等同于:

Reset:将数字输出信号置为 0 SetDO do1,0; 例如: 另外,SetDO 还可以设置延迟时间: Reset Do1; SetDO\\SDelay:=0.2, do1, 1; 将数字输出信号 Do1 置为 0 则延迟 0.2s 后将 do1 置为 1。 WaitDI:等待一个输入信号状态为设定值 例如: WaitDi1,1; 等同于: WaitUntil di1=1; 另外,WaitUntil 应用更为广泛,等待的是后面条 WaitDI Di1,1; TRUE 才继续执行,如: 等待数字输入信号 Di1 为 1,之后才执行下面的 件为 指令。 WaitUntilbRead=False; WaitUntil num1=1; 9.3.7 常用逻辑控制指令

IF:满足不同条件,执行对应程序 FOR:根据指定的次数,重复执行对应程序 例如: 例如: IF reg1>5 THEN Set do1; ENDIF FOR I FROM 1 TO 10 DO Routine1; ENDFOR 重复执行 10 次 Routine1 里的程序。 如果 reg1>5 条件满足,则执行 Set Do1 指令。 FOR 指令后面跟的是循环计数值,其不用再程序数据 中定义,每次运行一遍 FOR 循环中的指令后会自动执 行加 1 操作。 WHILE:如果条件满足,则重复执行对应程序 TEST:根据指定变量的判断结果,执行对应程序 例如: 例如: WHILE reg1

DEFAULT: Stop; ENDTEST

判断 reg1 数值,若为 1 则执行 Routine1;若为 2 则

执行 Routine2,否则执行 stop。

9.3.8 注释行“!”

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

!Goto the Pick Position;

MoveLpPick, v1000, fine, tool1, \\WObj:=wobj1;

9.3.9Offs 偏移功能

以选定的目标点为基准,沿着选定工件坐标系的 X、Y、Z 轴方向偏移一定的距离。 例如:

MoveLOffs(p10, 0, 0, 10), v1000, z50, tool0 \\WObj:=wobj1;

将机器人 TCP 移动至以 p10 为基准点,沿着 wobj1 的 Z 轴正方向偏移 10mm 的位置。

9.3.10CRobT 功能 读取当前机器人目

标位置数据。 例如:

PERSrobtarget p10;

P10 := CRobT(\\Tool := tool1 \\WObj := wobj1);

读取当前机器人目标点位置数据,指定工具数据位 tool1,工件坐标系数据为 wobj1(若不指定,则默 认工具数据为 tool0,默认工件坐标系数据为 wobj0),之后将读取的目标点数据赋值给 p10。 9.3.11 常用写屏指令

例如:

TPRease;

TPWrite “The Robot is running!”;

TPWrite “The Last CycleTime is:”\\num:=nCycleTime; 假设上

一次循环时间 nCycleTime 为 10s,则示教器上面显示内容为 The

Robot is running!

The Last CycleTime is: 10

9.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.xComparePos.trans.y-25 ANDActualPos.trans.yComparePos.trans.z-25 ANDActualPos.trans.zComparePos.rot.q1-0.1 AND ActualPos.rot.q1ComparePos.rot.q2-0.1 AND ActualPos.rot.q2ComparePos.rot.q3-0.1 AND ActualPos.rot.q3ComparePos.rot.q4-0.1 AND ActualPos.rot.q4

!将当前机器人所在目标位置数据与给定目标点位置数据进行比较,共七项数值,分别是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.4 任务实施 9.4.1 工作站解包

1. 双 击 工 作 站 打 包 文 件 : SituationalTeaching_Carry.rspag。 2.单击“下一个”按钮。 3.单击“浏览”按钮,选择存放 解包文件的目录。 4.单击“下一个”按钮。

5. 机 器 人 系 统 库 指 向 “MEDIAPOOL ”文件夹。选择 RobotWare 版本(要求最低版本 为 5.14.02)。 6.单击“下一个”按钮。 7.解包就绪后,单击“完成”按 钮。

8.确认后,单击“关闭”按钮。 9.解包完成后,在主窗口显示整 个搬运工作站。 9.4.2 创建备份并执行 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.4.3 配置 I/O 单元

在虚拟示教器中,根据以下的参数配置 I/O 单元。

Name Board10 Type of Unit D651 Connected to Bus DeviceNet1 DeviceNet address 10

9.4.4 配置 I/O 信号

在虚拟示教器中,根据以下的参数配置 I/O 信号。

Name di00_BufferReady di01_PanelInPickPos di02_VacuumOK di03_Start di04_Stop di05_StartAtMain Type of Signal Digitial Input Digitial Input Digitial Input Digitial Input Digitial Input Digitial Input Assigned to Unit Board10 Board10 Board10 Board10 Board10 Board10 Unit Mapping 0 1 2 3 4 5 I/O 信号注解 暂存装置到位信号 产品到位信号 真空反馈信号 外接“开始” 外接“停止” 外接“ 从主程序开 始” di06_EstopReset di07_MotorOn do32_VacuumOpen do33_AutoOn do34_BufferFull Digitial Input Digitial Input Digitial Output Digitial Output Digitial Output Board10 Board10 Board10 Board10 Board10 6 7 32 33 34 外接“急停复位” 外接“电动机上电” 打开真空 自动状态输出信号 暂存装置满载 9.4.5 配置系统输入/输出

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

Type System Input System Input System Input System Input System Input System Output Signal Name di03_Start di04_Stop di05_StartAtMain di06_EstopReset di07_MotorOn do33_AutoOn Action\\Status Start Stop StartMain ResetEstop MotorOn Auto On Argument1 Continuous 无 注释 程序启动 程序停止 从主程序启动 急停状态恢复 电动机上电 自动状态输出 Continuous 无 无 无 9.4.6 创建工具数据

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

参数名称 参数数值 robothold TRUE

trans X Y Z 0 0 115 rot q1 q2 q3 q4 mass 1 0 0 0 1 cog X Y Z 其余参数均为默认值 0 0 100

9.4.7 创建工件坐标系数据

本工作站中,工件坐标系均采用用户三点法创建。 在虚拟示教器中,根据图所示位置设定工件坐标。 工件坐标系 WobjCNV:

工件坐标系 WobjBuffer:

9.4.8 创建载荷数据

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

参数名称 参数数值 mass 0.5 cog X Y Z 其余参数均为默认值 0 0 3

9.4.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\;

TPWRITE\;

TPWRITE\; 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\; 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.4.10 示教目标点

在本工作站中,需要示教三个目标点,分别为太阳能薄板拾取点 pPick;放置基准点 pPlaceBase;程序 起始点 pHome。

在 RAPID 程序模板中包含一个专门用于手动示教目标点的子程序 rModPos,在虚拟示教器中,进入“程 序编辑器”,将指针移动至该子程序,之后通过虚拟示教器操纵机器人依次移动至拾取点 pPick、放置基准点

pPlaceBase、程序起始点 pHome,并通过修改位置将其记录下来。 示教目标点完成

之后,即可进行仿真操作,查看一下工作站的整个工作流程。 9.5 知识连接

9.5.1LoadIdentify:载荷测定服务例行程序 在机器人系统中已预定义了数个服务例行程序,如 SMB 电池节

能、自动测定载荷等。 其中,LoadIdentify 可以测定工具载荷和有效载荷。可确认的数据是质量、重心和转动惯量。与已确认

数据一同提供的还有测量精度,该精度可以表明测定的进展情况。 在本案例中,由于工具及搬运工件结

构简单,并且对称,所以可以直接通过手工测量的方法测出工具

及工件的载荷数据,但若所用工具或搬运工件较为复杂,不便于手工测量,则可使用此服务例行程序来自 动测量出工具载荷或有效载荷。如图:

缺失图片 p43-2

9.5.2 数字 I/O 信号设置参数介绍

参数名称 参数说明 信号名称(必设) 信号类型(必设) 连接到的 I/O 单元(必设) 信号标签,为信号添加标签,便于查看。例如将信号标签与接线端子上标签 Name Type of Signal Assigned to unit Signal Identification lable

设为一致,如 Conn.X4、Pin 1 Unit Mapping Category 占用 I/O 单元的地址(必设) 信号类别,为信号设置分类标签,当信号数量较多时,通过类别过滤,便于 分类别查看信号 写入权限 ReadOnly:各客户端均无写入权限,只读状态 Default:可通过指令写入或本地客户端(如示教器)在手动模式下写入 Access Level All:各客户端在各模式下均有写入权限 Default Value Filter Time Passive 默认值,系统启动时其信号默认值 失效过滤时间(ms),防止信号干扰,如设置为 1000,则当信号置为 0,持 续 1s 后才视为该信号已置为 0(限于输入信号) 激活过滤时间(ms),防止信号干扰,如设置为 1000,则当信号置为 1,持 Filter Time Active 续 1s 后才视为该信号已置为 1(限于输入信号) Signal value at system failure 断电保持,当系统错误或断电时是否保持当前信号状态(限于输出信号) and power fail Store signal Value at Power 当重启时是否将该信号恢复为断电前的状态(限于输出信号) Fail Invert Physical Value 9.5.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.5.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.5.5 奇异点管理(什么是奇异点)

在机器人关节轴 5 角度为 0°,同时关节轴 4 和关节轴 6 是一样时,则机器人处于奇异点。 当在设计夹具及工作站布局时,应尽量避免机器人运动轨迹进入奇异点的可能。 在编程时,可以使用 SingArea 指令去让机器人自动规划当前轨迹经过的奇异点时的插补方式。如: SingArea\\Wrist:允许轻微改变工具的姿态,以便通过奇异点

SingArea\\Off:关闭自动插补