1. 汇川机器人TCP/IP通讯基础
汇川机器人的TCP/IP通讯功能是其与视觉系统交互的核心桥梁。在实际项目中,我经常遇到工程师对网络通讯的基础配置存在困惑。这里分享几个关键要点:
网络拓扑结构通常采用直连方式:用网线将机器人控制器的网口与视觉处理电脑直接相连。这种做法的好处是避免了交换机引入的延迟,实测通讯延迟能控制在5ms以内。但要注意网线的选择——我踩过坑,用普通办公网线在电磁干扰严重的车间会出现丢包,后来换成工业级屏蔽双绞线才解决。
配置IP地址时,务必遵循以下原则:
- 机器人控制器和视觉电脑必须在同一网段(如192.168.1.x)
- 子网掩码通常设为255.255.255.0
- 默认网关可留空(直连情况下)
# 示例:Python模拟机器人端Socket服务端 import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('192.168.1.10', 4444)) # 机器人IP和端口 server_socket.listen(1) print("等待视觉系统连接...")注意:汇川示教器默认管理员密码是6个0,但建议首次登录后立即修改。曾遇到过车间其他设备误操作连上机器人端口的案例。
2. 视觉坐标数据格式解析实战
视觉系统发来的坐标字符串看似简单,但处理不当会导致机器人走位异常。典型的坐标格式为:X,Y,Z;例如123.456,789.012,345.678;
字符串处理的关键步骤:
- 接收原始数据:
RxBuf = GetPortbuf(0,100,4444) - 分割字符串:
B1 = StrGetData(RxBuf,",",D0) - 数据验证:检查分割后元素数量是否为3
我总结出三个常见问题及解决方案:
- 问题1:视觉发送数据末尾缺少分号
- 方案:添加超时判断,若10秒内未收到完整数据则报警
- 问题2:坐标值含非法字符(如字母)
- 方案:用正则表达式
^[0-9.-]+$校验每个数值
- 方案:用正则表达式
- 问题3:数值溢出(超过机器人行程)
- 方案:在赋值前增加范围检查
if(D0<MAX_X)...
- 方案:在赋值前增加范围检查
# 坐标解析示例(Python版) import re def parse_coordinates(data): if not data.endswith(';'): raise ValueError("缺少结束分号") coords = data[:-1].split(',') if len(coords) != 3: raise ValueError("坐标数量错误") for coord in coords: if not re.match(r'^[0-9.-]+$', coord): raise ValueError("非法字符") return [float(x) for x in coords]3. 坐标系转换与运动控制
拿到原始坐标后,必须经过坐标系转换才能用于机器人运动。汇川的Cnvrt指令支持多种坐标系转换:
| 转换类型 | 指令示例 | 应用场景 |
|---|---|---|
| 世界坐标系 | Cnvrt(P[10],P[20],World) | 视觉坐标转机器人基坐标 |
| 工具坐标系 | Cnvrt(P[10],P[20],Tool) | 焊枪/夹爪末端调整 |
| 用户坐标系 | Cnvrt(P[10],P[20],User) | 工作台倾斜补偿 |
运动控制中的避坑经验:
- 先做小范围验证:首次运行时将移动速度设为10%,确认方向正确
- 添加过渡点:在接近目标位置前设置过渡点P[15],避免直线运动碰撞
- 异常处理:每次Movl指令后检查$MOVE_STATUS
# 运动控制伪代码 if not parse_coordinates(raw_data): alarm("坐标解析失败") target = apply_coordinate_conversion(parsed_data) if not check_safety_range(target): alarm("超出安全范围") move_to_approach_point() # 先到过渡点 set_speed(30) # 30%速度 movl(target) # 直线运动 wait_for_move_complete()4. 完整工作流程与调试技巧
一个完整的视觉引导流程应包含以下阶段:
初始化阶段
- 机器人发送"TA"唤醒视觉系统
- 视觉回复"READY"确认连接
- 建立心跳机制(每2秒一次握手)
标定阶段
- 使用9点标定法建立视觉-机器人坐标映射
- 存储标定矩阵到$CALIB_DATA[1]
运行阶段
- 循环获取坐标并运动
- 实时监控网络状态($NET_STAT)
调试神器:
- 网络调试助手:验证原始数据格式
- 示教器在线监控:查看变量$D0-$D3的实时值
- 轨迹预览功能:提前模拟运行路径
曾遇到一个典型故障:视觉坐标正常但机器人走位偏移。最后发现是标定时的工具坐标系(TCP)与实际使用的不一致。解决方法是在程序开头强制设置工具号:
Tool = 1 // 使用预设的焊枪TCP参数