基于TCP/IP协议实现上位机对UR机器人的远程控制
摘要
UR 系列协作机器人内置多组 TCP/IP 通信服务端口,原生支持 Modbus TCP、仪表板服务、实时数据交互、远程脚本下载等多类通信机制,能够满足工业自动化场景下上位机远程管控需求。本文以 Universal Robots 六轴协作机器人为硬件载体,围绕 502 Modbus TCP 端口、29999 仪表板端口、30001/30002/30003 编程实时端口的通信原理、协议规范、功能划分展开系统性研究,设计一套完整上位机远程控制架构,实现机器人 IO 信号读写、URP 程序远程下载、程序启停运行管控、机器人全量状态实时采集四大核心功能。文章完成通信链路搭建、协议数据解析、上位机软件模块开发、整机联调测试全流程验证,测试结果表明,基于多端口 TCP/IP 协同通信方案具备通信稳定、实时性强、功能覆盖全面的优势,可广泛应用于白酒灌装、机床上下料、柔性装配等自动化产线上位机集中管控场景。 关键词:UR 协作机器人;TCP/IP;Modbus TCP;远程控制;上位机;实时数据交互

图1远程控制系统图
一、绪论
1.1 研究背景与意义
工业柔性制造的快速发展推动协作机器人大规模落地,传统现场示教模式存在操作距离受限、多机器人集中管控难度大、程序更新效率低、设备状态无法统一采集等痛点,严重制约自动化产线智能化升级。Universal Robots(优傲)协作机器人作为轻量化人机协作设备,广泛应用于食品、3C、白酒包装、汽车零部件等行业,其控制器原生开放多组 TCP 服务端口,无需额外加装通信网关即可与 PC 上位机建立以太网通信链路,为远程集中控制提供底层协议支撑。
在白酒自动化机器人上位机开发场景中,单条灌装生产线往往部署 3~6 台 UR 机器人,若采用现场示教方式,工程师需逐台设备调试、更新程序,产线停机损耗高;同时机器人传感器数据、关节扭矩、IO 信号、运行故障代码分散存储在本地控制器,无法上传至中控上位机做数据统计与异常预警。因此,搭建一套基于 TCP/IP 协议的远程上位机控制系统,实现 IO 远程操控、程序远程下发、运行状态远程管控、设备数据实时采集,对提升产线运维效率、降低人工成本、实现产线数字化管控具备极高工程应用价值。
1.2 国内外研究现状
国外 Universal Robots 官方提供完整 TCP 通信开发手册,划分 Dashboard 仪表板、Primary/Secondary 编程端口、RTDE 实时端口、Modbus TCP 四大通信体系,配套 Python、C# 开发示例,多用于实验室单机远程调试,但缺少面向工业中控上位机的多端口协同整合方案。国内研究多聚焦单一端口功能开发,例如仅基于 29999 端口实现程序启停、仅基于 502 端口完成 IO 控制,缺乏多端口联动一体化上位机架构设计,难以覆盖完整机器人远程管控需求。现有方案普遍存在实时性不足、功能碎片化、数据解析不全等问题,无法满足工业现场一站式管控需求。
1.3 研究主要内容与章节安排
本文核心研究内容:
1)梳理 UR 机器人全部 TCP 通信端口功能、协议格式、数据交互逻辑,明确 502、29999、30001/30002/30003 端口分工;
2)搭建上位机与机器人以太网通信硬件链路,完成 IP 网段、防火墙、Modbus 寄存器映射配置; 3)模块化设计上位机软件,划分 Modbus IO 控制模块、Dashboard 程序管控模块、远程脚本下载模块、实时状态解析模块;
4)完成整机联调,验证 IO 读写、程序下载、启停控制、状态采集功能稳定性与实时性。
二、UR 机器人 TCP/IP 通信端口与协议原理
UR 机器人控制器内置多组独立 TCP 服务器,机器人固定作为通信服务端,上位机作为 TCP 客户端主动建立 Socket 连接,不同端口承载差异化控制功能,各端口相互独立运行、互不干扰,共同构成完整远程控制通信体系。各端口核心功能划分如表 1 所示。 表 1 UR 机器人 TCP 通信端口功能总览
|
端口号 |
通信协议 |
服务名称 |
核心功能 |
数据交互特性 |
|
502 |
Modbus TCP |
Modbus 服务器 |
机器人全部数字 / 模拟 IO 读写、寄存器状态读取 |
标准 Modbus 功能码,毫秒级响应 |
|
29999 |
ASCII 明文 TCP |
Dashboard 仪表板服务 |
远程开关机、程序加载、程序启动 / 暂停 / 停止、运行模式切换 |
文本指令交互,以换行符 |
|
30001 |
URScript TCP |
Primary 主编程端口 |
下发单行 URScript 脚本、轻量程序片段下载 |
低频状态反馈(5Hz),支持运动指令下发 |
|
30002 |
URScript TCP |
Secondary 次编程端口 |
后台辅助脚本下发,不阻塞主运动程序 |
与 30001 端口并行独立通信 |
|
30003 |
RTDE 实时数据端口 |
实时数据交换服务 |
完整机器人状态高频采集、大批量 URP 程序远程下载 |
125Hz 高速数据包反馈,二进制结构化数据 |
2.1 502 端口 Modbus TCP IO 通信原理
UR 控制器原生搭载 Modbus TCP 服务器,监听 502 端口,上位机以 Modbus TCP 客户端身份发起连接,通过标准 Modbus 功能码读写机器人 IO 寄存器,实现全部数字输入、数字输出、模拟量输入输出远程控制。机器人内部完成 IO 信号与 Modbus 寄存器一一映射:数字输出对应 0 号线圈寄存器,数字输入对应 10000 号离散输入寄存器,模拟量信号映射至 40000 保持寄存器。
上位机发送标准 Modbus TCP 报文,报文包含事务 ID、协议标识、长度、单元 ID、功能码、寄存器地址、读写长度等字段。机器人服务端解析报文后完成 IO 电平切换,并返回响应报文确认执行结果。该端口仅负责 IO 硬件信号控制,不参与机器人运动、程序管理,通信延迟稳定低于 10ms,适合产线传感器、电磁阀、夹具等外设远程联动控制。
2.2 29999 端口 Dashboard 仪表板通信原理
29999 端口为 UR 官方仪表板专用 TCP 服务,采用无格式 ASCII 明文通信,所有控制指令以换行符\n作为结束标识,指令不区分大小写,上位机发送文本指令、机器人返回执行结果文本,用于机器人顶层运行状态管控。核心可用指令包括:
1)程序管控:load <程序名>远程加载本地 URP 程序、play启动程序、pause暂停程序、stop终止程序;
2)系统管控:power on机器人上电、power off断电、remote切换远程控制模式、get loaded program查询当前加载程序;
3)状态查询:get robot mode读取机器人运行模式(手动 / 自动 / 远程)、get safety status读取安全急停状态。
该端口具备最高操作权限,可管控机器人整机运行逻辑,是上位机实现远程启停程序的核心通道,但不支持运动脚本下发与高频状态采集。
2.3 30001/30002/30003 编程与实时交互端口原理
30001(Primary)、30002(Secondary)、30003(RTDE)均基于 URScript 机器人脚本语言通信,上位机发送标准 URScript 指令即可控制机器人关节运动、坐标偏移、参数修改,三者核心差异为数据反馈刷新率与文件传输能力。
1)30001 主端口:主控制通道,下发运动脚本、单行控制指令,机器人以 5Hz 低频返回基础状态,适合简单实时运动调试;
2)30002 次端口:后台辅助通信通道,可并行下发脚本,不占用主端口资源,多用于后台 IO 逻辑补充控制;
3)30003 RTDE 实时端口:本系统核心数据交互端口,两大核心能力:一是支持完整 URP 工程文件远程上传下载,实现整套机器人程序远程更新;二是控制器以 125Hz 高频向外推送二进制结构化数据包,数据包包含控制器时间戳、六轴关节实际角度 / 目标角度、关节电流扭矩、工具坐标 XYZ/RXRYRZ、IO 电平、故障代码、安全状态等全量设备信息,数据包长度固定 1108 字节,采用小端字节序存储浮点、整型数据,上位机解析后可完整还原机器人实时运行状态。
多端口协同逻辑:程序文件大批量下载选用 30003 端口,临时单行运动脚本下发选用 30001 端口,后台辅助逻辑使用 30002 端口,实时设备状态采集仅依赖 30003 端口,分工明确互不冲突。
三、远程控制系统整体架构设计
3.1 硬件架构
系统硬件由上位机工控机、UR 协作机器人控制器、工业以太网交换机、超五类屏蔽网线组成,硬件拓扑如图 1(文中配图对应 UR PolyScope 移动操作界面,为机器人本地示教界面,上位机通过以太网远程替代该本地操作功能)。 1)上位机:工业工控机,搭载 Windows 系统,运行自主开发 Qt 上位机软件,配置千兆网口作为 TCP 客户端; 2)UR 机器人控制器:内置多组 TCP 服务,设置静态 IP 地址,开启 Modbus 服务器、Dashboard、RTDE 实时服务; 3)通信链路:工业交换机组建独立设备控制网段,关闭网络防火墙,上位机与机器人控制器处于同一子网,保证 Socket 连接稳定。
硬件配置参数:机器人控制器 IP [192.168.1.100](192.168.1.100),上位机工控机 IP [192.168.1.1](192.168.1.1),子网掩码 [255.255.255.0](255.255.255.0),网关 [192.168.1.1](192.168.1.1)。
3.2 软件分层架构
上位机软件采用四层分层架构,自下而上分为通信链路层、协议解析层、功能业务层、人机交互 UI 层,实现通信、解析、业务、界面解耦,便于后期功能扩展。
1)通信链路层:基于 Socket 套接字开发,创建 5 组独立 TCP 客户端线程,分别对应 502、29999、30001、30002、30003 端口,线程独立运行避免端口通信阻塞,内置断线重连、心跳检测机制;
2)协议解析层:分协议封装解析类,Modbus 解析类处理 502 端口报文、Dashboard 文本解析类处理 29999 明文指令、URScript 脚本处理类管理 30001/30002 指令收发、RTDE 二进制数据包解析类完成 30003 高频 125Hz 数据包字节拆分、数据类型转换;
3)功能业务层:模块化划分四大业务单元:Modbus IO 远程控制单元、Dashboard 程序启停管控单元、URP 程序远程下载单元、机器人实时状态监测单元,实现工业业务逻辑封装;
4)人机交互 UI 层:基于 Qt 开发可视化界面,包含 IO 信号面板、程序管理面板、实时状态曲线面板、故障报警弹窗、网络连接状态监控,对应文中 UR 机器人 PolyScope 本地 “移动” 示教界面的全部功能,并拓展远程管控功能。
3.3 整体控制业务流程
上位机完整远程控制流程如下:
1)初始化:软件启动后,5 组 TCP 客户端线程自动连接机器人对应端口,心跳包检测链路连通性,断线自动重连;
2)IO 远程控制流程:上位机 UI 下发 IO 切换指令→协议层封装 Modbus TCP 报文→502 端口发送至机器人→控制器修改对应寄存器 IO 电平→返回 Modbus 响应报文,UI 同步刷新 IO 指示灯; 3)程序远程管控流程:上位机选择本地 URP 程序文件→30003 端口传输完整程序至机器人存储目录→29999 端口发送load指令加载程序→发送play指令远程启动运行;暂停 / 停止 / 断电指令均通过 29999 端口下发;
4)实时状态采集流程:30003 端口持续接收 125Hz 二进制数据包→协议层解析关节坐标、扭矩、故障、IO 数据→业务层缓存数据→UI 实时刷新坐标数值、绘制关节扭矩曲线,故障代码触发弹窗报警。
四、上位机软件模块化功能实现
本文基于 C++ Qt 开发上位机软件,模块化实现全部远程控制功能,各核心模块开发细节如下。
4.1 Modbus TCP IO 控制模块(502 端口)
采用标准 Modbus TCP 客户端开源库封装通信逻辑,UI 界面设计数字输入、数字输出、模拟量调节面板,支持单路 / 批量 IO 电平切换。模块内置寄存器地址映射表,将机器人物理 IO 与 Modbus 寄存器绑定:数字输出 DO0\DO15 对应线圈 0\15,数字输入 DI0\DI15 对应离散输入 10000\10015,模拟输出 AO0~AO1 对应保持寄存器 40000、40002。
交互逻辑:上位机点击 UI 输出开关,程序自动封装功能码 05(单线圈置位)Modbus 报文,通过 502 端口发送至机器人;周期 200ms 发送功能码 02 读取全部输入 IO 寄存器,刷新界面输入指示灯。模块内置通信超时判断,超过 50ms 未收到机器人响应则提示 IO 通信异常。
4.2 Dashboard 程序管控模块(29999 端口)
独立 TCP 线程维护 29999 端口长连接,封装指令发送函数,自动在每条指令末尾追加\n换行符。UI 设计程序操作按钮组:【加载程序】【启动】【暂停】【停止】【远程模式切换】【机器人上电 / 断电】。
程序下载联动逻辑:上位机通过 30003 端口将 URP 程序文件传输至机器人控制器programs目录后,自动调用 Dashboard 接口发送load 程序名指令,加载完成后弹窗提示;点击启动按钮发送play指令,同时持续查询get robot mode指令,实时在界面显示机器人当前运行状态(运行 / 暂停 / 停止 / 急停)。当机器人触发急停故障,Dashboard 端口返回安全状态文本,软件自动弹出急停报警窗口。
4.3 URScript 远程脚本与程序下载模块(30001/30002/30003)
1)30001/30002 单行脚本下发:UI 内置脚本编辑框,支持手动输入 URScript 运动指令(moveL线性运动、moveJ关节运动、set_tcp工具坐标设置等),选择主 / 次端口发送,机器人执行运动指令后返回执行日志;
2)30003 程序文件传输:基于 TCP 流文件分片传输,将本地 URP 工程分包发送至机器人控制器存储路径,传输进度实时显示在 UI 进度条;同时持续接收 125Hz 实时状态数据包,二进制数据包按字节偏移拆分,依次解析时间戳、六轴关节角度、工具位姿 XYZ/RXRYRZ、各轴电流扭矩、IO 状态、故障码等浮点、整型数据,转换为十进制数值供界面展示。
4.4 实时状态监测与数据解析模块
针对 30003 端口 1108 字节固定数据包设计专用解析函数,按字节偏移划分数据块:
1)字节 1~4:数据包总长度校验,过滤异常残缺数据包;
2)字节 5~12:控制器开机时间戳(微秒),用于数据时序对齐;
3)字节 13~444:核心机器人状态区,包含 6 轴目标 / 实际关节角度、速度、加速度、电流、扭矩;
4)后续字节段:工具 TCP 坐标、IO 状态、安全模式、故障代码、机器人运行模式。
解析后的数据分为两路输出:一路实时推送至 UI 界面,动态刷新文中截图所示基座 / 肩部 / 肘部 / 手腕关节角度、工具 XYZ 坐标数值;另一路写入本地 SQLite 数据库,存储历史运行数据,支持后期产线设备数据分析、故障追溯。当解析出非 0 故障代码时,软件立即高亮故障字段,同步触发声光报警提示运维人员。
4.5 网络通信保障模块
所有 TCP 客户端线程集成心跳检测与断线重连机制:每 500ms 向上对应端口发送心跳探测报文,若连续 3 次无机器人响应,则判定链路断开,自动关闭 Socket 并每 2 秒尝试重新建立连接;软件主界面实时展示 5 组端口连接状态,绿色标识连通、红色标识断开,直观呈现通信链路健康度。同时设置通信缓冲区,避免高频 30003 数据包堆积导致软件卡顿,保证 125Hz 数据流稳定处理。
五、系统联调与性能测试
5.1 测试环境搭建
测试硬件:UR5 六轴协作机器人、工业工控上位机、千兆工业交换机;软件环境:Qt5.15 上位机软件、UR PolyScope 5.11 控制器系统;测试场景:模拟白酒灌装自动化工位,完成 IO 夹具控制、远程程序下载、机器人运动控制、实时状态采集全流程测试。
5.2 功能完整性测试
逐项验证系统四大核心功能,测试结果如下:
1)502 端口 Modbus IO 控制:全部 16 路数字输入、16 路数字输出、2 路模拟输出可远程读写,IO 电平切换指令响应时间 7~10ms,无信号丢失、误触发问题;
2)29999 端口 Dashboard 管控:远程上电、断电、程序加载、启动、暂停、停止指令全部执行正常,急停、故障状态可实时上传至上位机,指令反馈延迟低于 20ms;
3)30001/30003 程序下载与脚本控制:单套 500KB URP 灌装程序通过 30003 端口完整下载耗时 1.2s,无文件损坏;30001 端口下发关节运动指令,机器人可精准跟随目标坐标运动;
4)30003 实时状态采集:稳定以 125Hz 频率接收机器人数据包,关节角度、工具坐标、扭矩数值与机器人本地 PolyScope 界面(文中截图)数值完全一致,无数据丢包、延迟偏移。
5.3 系统稳定性压力测试
连续 72 小时不间断运行上位机软件,循环执行 IO 切换、程序启停、实时数据采集操作,记录系统运行指标:
1)TCP 断线重连:人为断开网线 10 次,恢复网络后全部端口可在 2s 内自动重连,无程序崩溃; 2)实时数据流稳定性:72 小时累计接收数据包约 3.24 亿帧,丢包率<0.01%;
3)软件资源占用:工控机 CPU 占用率稳定 12%~18%,内存占用低于 300MB,长时间运行无内存泄漏、界面卡顿现象。
5.4 测试结论
基于多端口 TCP/IP 协同通信的上位机远程控制系统,完整覆盖 UR 机器人 IO 控制、程序远程下载、运行状态管控、设备实时监测全部需求,通信实时性、系统稳定性满足工业自动化现场使用标准,可替代现场 PolyScope 示教界面实现远程集中管控,大幅降低产线设备运维成本。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)