两条总线方案:方案 1 Modbus TCP(推荐,标配网口,无需额外总线板卡);方案 2 EtherNet/IP(选配总线板卡,高速周期 IO,和你前面发那科 EIP 思路一致)机器人角色:从站(Slave),欧姆龙 NJ/NX 为主站 Client爱普生系统内置系统变量
$ERR:存放当前报警代码;无报警时$ERR=0。 控制器网口:LAN 口接交换机,不要用 TP 示教器网口。示例 IP:机器人192.168.1.50,欧姆龙 PLC192.168.1.10
方案 1:Modbus TCP
爱普生 RC700/RC900 自带 Modbus TCP Slave,不需要购买总线板卡,直接 RC + 软件配置。 原理:把系统变量
$ERR映射到保持寄存器,欧姆龙用 Modbus TCP Client 读保持寄存器拿到报警代码。
1、RC + 软件机器人侧配置(电脑 RC+,不是示教器)
连接机器人控制器,设置 → 系统设置 → 控制器 → 输入 / 输出 → 现场总线
现场总线类型选择:Modbus TCP;端口默认
502;从站 ID=1寄存器映射(核心两种方式)
方式 A:总线 IO 映射
现场总线输出(机器人→PLC)分配 1 个 16bit 寄存器,绑定系统变量$ERR
保持寄存器:40001(1 基地址,对应寄存器地址 0),存放报警代码
$ERR额外可增加:
40002:机器人状态字(伺服 ON / 运行 / 报警位)
40003:警告代码
$WARN
方式 B:SPEL 程序刷新变量
全局整形变量 Public Global_Err As Integer,周期把$ERR写入Global_Err,再映射到 Modbus 寄存器
Function Update_Err
Global_Err = $ERR '读取机器人当前报警代码
End Function
在后台监控任务循环执行Update_Err,实时刷新报警号。
保存配置,下载到控制器,重启机器人。
网络测试:电脑 CMD ping
192.168.1.50,确认连通。
2、欧姆龙 Sysmac Studio(NJ/NX)PLC 侧配置
添加 Modbus TCP Client 功能块,目标 IP:
192.168.1.50,端口 502,UnitID=1调用功能块 Read Holding Registers FC03
起始寄存器地址:0(对应 40001)
读取字数:1
读到的 16 位数值,就是机器人报警代码;数值 = 0 代表无报警。
程序逻辑:判断读到的报警号 > 0,触发 HMI 报警弹窗、报警记录。
CJ2M 老欧姆龙:使用 ETN 单元 Socket 报文调用 Modbus FC03 读取。
方案 2:EtherNet/IP(选配 EIP 总线板卡,高速总线,产线多信号交互推荐)
需要加装 EtherNet/IP 现场总线板卡(硬件选件),机器人作为 EIP Adapter 从站,欧姆龙 NJ 做 Scanner 主站,和你前面发那科 EIP 架构完全统一。
机器人 RC + 配置
设置 → 系统设置 → 控制器 → I/O → 现场总线,选择 EtherNet/IP
设置 Assembly:
Output Assembly(机器人→PLC):2 字节,用来传递报警代码(16bit)+ 状态 bit
Input Assembly(PLC→机器人):2 字节,PLC 下发启停、复位
信号映射:把系统变量
$ERR映射到现场总线输出字(16bit)导出爱普生 EIP 的 EDS 文件,保存给 Sysmac Studio 使用。
下载配置,重启控制器。
欧姆龙 Sysmac Studio 配置
EDS 库导入爱普生 EDS 文件
EtherNet/IP 网络添加机器人设备,填入机器人 IP
设置 Assembly Instance、字节长度,必须和机器人 RC + 完全一致
注册标签组,全局变量绑定 EIP 输入输出结构体;PLC 直接读取结构体里的报警代码。
RPI 推荐 10~20ms。
补充:爱普生报警相关系统变量(SPEL)
表格
| 系统变量 | 含义 |
|---|---|
$ERR | 当前报警代码,无报警 = 0(重点) |
$WARN | 警告代码,警告不触发停机 |
$ERRLVL | 报警等级:0 无,1 警告,2 严重报警 |
$SERVO | 伺服状态 ON/OFF |
$RUN | 程序运行状态 |
调试
Modbus 读出来一直是 0
RC + 现场总线映射没有绑定
$ERR;程序没有后台刷新变量;配置下载后没有重启控制器。地址 0 基 / 1 基混淆:40001 对应寄存器地址 0,很多人写成 1 就读错。
EIP 通讯连上但报警代码不刷新
Assembly 字节数、Instance 号两边不一致;EDS 版本不对;RC + 没有把
$ERR映射进输出 Assembly。报警复位后寄存器不会自动清零?✅
$ERR机器人报警复位后自动变为 0,总线寄存器同步刷新。网络偶尔断连焊接环境使用屏蔽网线;交换机端口强制 100M 全双工;Modbus 轮询周期≥100ms。

