导读: 专注自动化培训 14 年 技成培训网 技术干货 | 六大编程技巧玩转 ABB 机器人 ABB 机器人 Pdisp 轨迹偏移使用, 单工位多次预约程序, 在 robotstudio 创建两台机器人的 socket 连接, 双工位预约程序, 与相机通讯的 Socket 收发数据处理与提...
专注自动化培训 14 年
技成培训网
技术干货 | 六大编程技巧玩转 ABB 机器人
ABB 机器人 Pdisp 轨迹偏移使用, 单工位多次预约程序, 在 robotstudio 创建两台机器人的 socket 连接, 双工位预约程序, 与相机通讯的 Socket 收发数据处理与提娶如何创建数组等编程技巧, 满满的实用干货!
1
ABB 机器人 Pdisp 轨迹偏移使用
1. 如果有下图两个产品, 已经完成了右边产品轨迹, 左边产品估计一样, 如何快速生成左边轨迹(左边产品可能有平移和旋转).
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
ABB 机器人单工位多次预约程序
1. 机器人有程序如下:
2. 工艺过程如下:
机器人在 home 等待. 有人按过 di 信号, 机器人开始执行. 人工可以一次性多次预约, 即如果人工一次性按过 3 次, 机器人执行三次.
3. 我们通过中断来实现.
4. 中断的意义为, 机器人后台在不断扫描(类似 PLC), 和机器人前台运动不冲突. 后台实时扫描到信号就会去执行设定的中断程序, 中断程序里没有运动指令, 前台机器人不停, 不影响运动.
5. 新建一个例行程序, 取名 tr_1, 注意: 类型选中断(trap)
6. 进入中断程序, 插入指令如下, 即当机器人执行中断程序时, 给 reg1 记录次数加 1.
7. 进入主程序, 设置中断及对应的 io 信号.
37 行的意思是, 任何时候 di_1 信号 0 变 1, 就会触发执行 tr_1 中断程序, 即置 flag1 为 true;
35-37 行程序只要运行过一遍即可, 类似于设置开关, 不需要反复运行;
8. 主要程序如下. 即如果 reg1=0, 机器人在 home 等待
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 端.
a, 新建一个机器人系统, 注意建立系统时加入 pc-interface 选项.
b, 为了避免之前的连接没有关闭, 先插入 socketclose 指令, 后面的 socket1 为自己新建的 socketdev 类型的变量.
c, 之后插入创建连接 socketCreate.
d, 插入建立连接 SocketConnect, 后面需要制定 Server 的 ip 和端口, 如果是在电脑和另一台虚拟控制器连接, ip 设为 "127.0.0.1", 端口自定义, 建议不要用默认的 1025.
这一步作用为机器人会和 server 建立连接, 如果没有建立成功会一直等待, 如果成功则往下执行.
e, 此处做测试, 在建立成功后, 插入 TPWrite 指令, 可以在示教器看到 socketclinent connect successful.
f, 接下去可以收发数据, 此处示例为 client 先发送数据给 server, 再接受 server 发送回来的数据.
g,SocketSend 后面可以发送 string 或者 byte 数组, 具体可以选择不同可选变量.
h, 发送完毕后 client 接受到 server 发回的数据并写屏.
6. 以下为 server 端示例
a, 重新创建一个工作站, 创建时不要忘记添加 pcinterface 选项.
b, 作为 server, 机器人需要创建 2 个 socketdev 变量.
c, 为了避免之前的连接没有关闭, 同样建议先 socketclose.
d,
e, 接着创建 socketCreatetemp_socket 服务器端 socketdev.
f,SocketBind 为绑定 socket 要监控的 ip 和端口, 如果是虚拟仿真, ip 为 127.0.0.1, 端口自定义(和 client 端设置一致).
g,SocketListen 为机器人 server 监听是否有 client 连接.
h,socketAccept 为接受 client 的连接.
i, 建立连接后, 机器人就可以执行死循环, 即一直处于收发状态.
j, 之前 client 程序为 client 先发后收, 故这里 server 先收后发.
7.client 和 server 都写完后, 可以运行, 注意先运行 server 端, 即 server 机器人处于监听状态
8.server 机器人收到的讯息如下:
9. client 机器人收到的讯息如下:
4
双工位预约程序
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 位等待.
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.
5. 先假设 x 的第一位是 1, 给 Startbit1 赋值为 1
6. 插入函数 strfind, 查找第一个 "," 在第几位, 得到 EndBit1 值
7.
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,v500,z1,tool0;
- ENDFOR
3. 哪些数据类型能创建数组?
所有数据类型都可以创建数组
4. 数组最大几维?
ABB 机器人 ">ABB 机器人数组最大三维!
5. 数组起始序号是 0 还是 1?
是 1
6. 如何创建?
a. 程序数据
b. 选中类型, 比如 Robtarget
c. 新建, 设置名称, 维数(这里举例 1 维), 每个维度的元素数量(举例为 10)
d. 创建完, 就有了一个 10 个数据的 p_array,
e. 修改点位, 点击上图上某一行, 修改位置, 即把数组里的某一个元素位置修改了.
来源: http://www.ailab.cn/robot/20210514118283.html