发那科机器人 + 西门子 S7‑1200 Modbus TCP 数据读写测试步骤
我给你最简单、现场最实用、零失败的测试方法,不用复杂编程,直接看信号通没通。
前提条件
发那科已开通 Modbus TCP 选项(R808)
双方已设置同网段 IP
西门子 PLC:
192.168.3.1发那科机器人:
192.168.3.10网线直连或接同一交换机
西门子已在 TIA 里写好 MB_SERVER(Modbus 服务器)
一、先做第一步:PING 测试(必须通)
电脑接机器人 / PLC 同一网络
cmd 输入:
plaintext
ping 192.168.3.1 (PLC) ping 192.168.3.10 (机器人)
通则继续,不通查 IP / 网线
二、发那科机器人端:配置 Modbus TCP(客户端)
1. 进入配置界面
示教器:MENU → 6. 系统 → 9. 选项功能 → Modbus TCP
2. 新建服务器连接(连接 PLC)
连接号:1
服务器 IP:192.168.3.1 (PLC IP)
端口号:502
模式:TCP
超时:1000ms
重试:3
3. 建立读写映射(测试用)
【读测试:PLC → 机器人】
类型:Read Holding Register
服务器地址:
0读取长度:
1(1 个寄存器 = 16 点)目标地址:
R1(机器人内部寄存器 R1)
【写测试:机器人 → PLC】
类型:Write Holding Register
服务器地址:
100写入长度:
1源地址:
R2(机器人 R2 写入 PLC)
保存 → 重启控制器
三、西门子 PLC 端:建立 Modbus 服务器
1. 在 OB1 添加 MB_SERVER 指令
plaintext
MB_SERVER EN = M0.0 PORT = 502 MB_DB = DB10
2. 新建数据块 DB100(MODBUS_DATA)
重要:必须取消 “优化块访问”
定义:
plaintext
PLC_TO_ROBOT AT DB100.DBW0: INT; // 地址0 → 机器人R1 ROBOT_TO_PLC AT DB100.DBW100: INT; // 地址100 ← 机器人R2
四、读写测试(最关键,一看就会)
测试 1:PLC 写 → 机器人读(最常用)
TIA 中把 DB100.DBW0 = 666
打开机器人 R 寄存器画面
MENU → 4. 数据 → 1. 寄存器
查看 R1 的值✅ R1 = 666 → 读成功!
测试 2:机器人写 → PLC 读(反向测试)
机器人把 R2 = 888
PLC 监控 DB100.DBW100✅ DB100.DBW100 = 888 → 写成功!
测试 3:Bool 点位测试(DI/DO)
PLC:
DB100.DBX0.0 = 1机器人查看:
对应 UI [1] 或 R1.0 = ON✅ 点位通
机器人:
UO[1] = ONPLC 查看:
DB100.DBX100.0 = 1✅ 点位通
五、快速判断通讯是否正常
发那科查看 Modbus 状态
MENU → 系统 → 选项功能 → Modbus TCP
连接状态:已连接
发送 / 接收计数:持续增加→ 说明通讯正常
PLC 查看 MB_SERVER 状态
NDR = 1
ERROR = 0→ 说明服务器正常
六、最常见 3 个坑(99% 问题都在这)
DB 块没取消优化块访问 → 数据读不到
发那科必须是 Client,PLC 是 Server
端口必须是 502。

