Fanuc 机器人的 RMI (Robot Message Interface) 是一种强大的通信功能,允许外部设备(如 PLC、PC、HMI 或 ROS 系统)通过 TCP/IP 与机器人控制器进行双向数据交换 和命令控制。以下是关键信息与使用指南:
核心功能
-
实时数据交换
-
读取/写入机器人寄存器(R, I/O, 位置寄存器, 系统变量等)。
-
监控机器人状态(运行/停止、报警、程序行号)。
-
-
远程控制
-
启动/停止程序。
-
选择并执行指定宏程序。
-
触发特定动作(如工具开关)。
-
-
低延迟通信
- 基于 TCP/IP 协议,响应速度通常在毫秒级。
配置步骤
1. 启用 RMI 功能
-
前提 :确保机器人控制器已安装 RMI 选项 (选项代码:
R632
或更高版本)。 -
设置路径 :
MENU > SETUP > HOST COMM > RMI CONFIG
-
启用
RMI Server = ON
。 -
设置端口号(默认
6008
)。
-
2. 设置数据映射表
-
定义外部设备可访问的变量(需在 TP 示教器操作):
plaintext
MENU > SETUP > RMI > DATA MAP
-
示例映射:
变量类型 机器人变量地址 RMI 映射地址 输出信号 DO[101] 1001 寄存器 R[10] 2001 位置数据 PR[1] 3001
3. 外部设备连接
-
连接协议:TCP Socket(文本或二进制格式)。
-
消息格式(文本模式示例):
-
读取数据:
MRD <映射地址>
→ 响应ACK <值>
-
写入数据:
MWR <映射地址> <值>
→ 响应ACK
-
执行宏程序:
RUN <宏程序名>
-
ROS 2 集成示例
通过 Python 实现 RMI 通信:
python
import socket
# 配置机器人IP和端口
FANUC_IP = "192.168.1.10"
PORT = 6008
def send_rmi_command(command: str) -> str:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((FANUC_IP, PORT))
s.sendall(command.encode() + b'\r\n') # Fanuc 需要回车换行
response = s.recv(1024).decode()
return response
# 示例:读取映射地址 1001 (对应 DO[101])
print(send_rmi_command("MRD 1001")) # 响应: ACK 0 或 ACK 1
# 示例:触发宏程序 "GRIPPER_OPEN"
print(send_rmi_command("RUN GRIPPER_OPEN"))
安全注意事项
-
权限控制
- 在
RMI CONFIG
中设置访问密码或 IP 白名单。
- 在
-
互锁逻辑
- 外部控制命令需与机器人安全电路(如急停、防护门)联锁。
-
超时处理
- 通信超时后自动断开连接(默认 60 秒)。
常见问题排查
问题现象 | 可能原因 | 解决方案 |
---|---|---|
连接超时 | 网络不通 / RMI 未启用 | 检查 IP 和端口,确认 RMI Server=ON |
返回 NAK 错误 |
映射地址无效 / 无权限 | 检查 DATA MAP 配置 |
机器人无响应 | 程序未运行 / 处于暂停状态 | 确保机器人处于 AUTO 模式 |
高级应用
-
二进制模式:更高传输效率(需解析 Fanuc 二进制协议)。
-
多通道通信:同时连接多个外部设备(需配置不同端口)。
-
与 ROS 2 节点集成:封装为 ROS Service/Action 供其他模块调用。
通过 RMI,Fanuc 机器人可无缝融入工业物联网(IIoT)或柔性产线系统。如需深入协议细节,请参考 Fanuc 手册《RMI Operator's Manual》(B-80687EN)。