跳到主要内容 发那科机器人与西门子 PLC 通讯方案:网关与 Modbus TCP 配置及代码 | 极客日志
编程语言
发那科机器人与西门子 PLC 通讯方案:网关与 Modbus TCP 配置及代码 介绍发那科机器人与西门子 PLC 通讯的两种方案:网关跨协议版(Profinet 转 EtherNet/IP)和 Modbus TCP 低成本版。涵盖硬件准备、机器人侧配置、PLC 侧组态及代码示例。重点强调 IP 网段一致性、数据长度匹配、重启生效及地址映射逻辑,提供故障排查方法,适用于不同规模产线的自动化集成需求。
氛围 发布于 2026/4/5 更新于 2026/4/13 1 浏览发那科机器人与西门子 PLC 通讯全方案
在工业自动化现场,发那科(FANUC)机器人与西门子 PLC 的组合十分常见,但两者协议壁垒常常让工程师头疼——发那科机器人原生支持 EtherNet/IP,而西门子 PLC(S7-1200/1500)主打 Profinet,直接通讯往往语言不通。
本文结合实际产线项目经验,整理两种经过现场验证的通讯方案(网关跨协议版 + Modbus TCP 低成本版),步骤拆解到每一步按键操作,标注新手常踩的坑,附 PLC 测试代码和故障排查方法,适合工控工程师参考落地。
核心前提
发那科机器人 :支持 EtherNet/IP 或 Modbus TCP 功能(需确认系统选件,无选件需联系厂家授权,如 Modbus TCP 需 R602 选件),本文以 R-30iB 系列为例。
西门子 PLC :S7-1200/S7-1500(本文分型号适配步骤),安装 TIA Portal(博图)软件(V15 及以上版本)。
硬件准备 :网线、协议网关(仅网关版需要,如 WL-ABC2006、赫优讯 NT151-RE-RE/+MLE)、调试电脑。
核心原则 :无论哪种方案,机器人、网关(如有)、PLC 的 IP 必须在同一网段,数据长度(输入/输出字数)必须完全一致,否则通讯必失败。
方案一:网关版(推荐,稳定高效,适配 S7-1500+ 发那科 R-30iB) 适用场景 :中大型产线、需要高速实时通讯(如焊接、搬运协同)、多设备联动,通过 Profinet 转 EtherNet/IP 网关打破协议壁垒,本文以 WL-ABC2006 网关为例(实测兼容所有主流网关),全程实操可复现。
第一步:发那科机器人侧配置(EtherNet/IP 从站,核心步骤) 机器人侧核心是开启 EtherNet/IP 功能、设置 IP 和数据参数,每一步都需确认状态,避免后续返工。
功能验证(关键前置)
打开机器人示教器,按下【MENU】键 → 进入【状态(Status)】→ 选择【版本 ID(Version ID)】,确认列表中存在 EtherNet/IP 选项,若无则需购买对应选件,否则无法继续配置。
设置 IP 地址(通讯基础)
路径:【MENU】→ 【设置(Setup)】→ 【主机通讯(Host Comm)】→ 【TCP/IP】;
选择【端口#1】,设置 IP 地址(如 192.168.1.100),子网掩码 255.255.255.0(与后续网关、PLC 保持一致);
⚠️ 注意 :修改 IP 后必须重启机器人控制器,否则 IP 不生效,很多新手卡在这里!
EtherNet/IP 核心配置(数据交互关键)
重启机器人后,路径:【MENU】→ 【I/O】→ 【EtherNet/IP】;
此时会看到 Connection 1 状态为运行(Run),无法修改参数,需选中该连接,按下【F5】键,设置为无效(Inactive)(解锁参数);
按下【F4】进入适配器配置,设置:输入大小(Input Size)=4 Words(64 位),输出大小(Output Size)=4 Words(64 位);
⚠️ 重点 :该数据长度需牢记,后续网关、PLC 配置必须完全一致,差 1 字节都会导致通讯失败;
设置完成后,再次按下【F5】激活连接,重启机器人,确认 Connection 1 状态恢复为运行(Run),底层链路打通。
获取 EDS 文件(网关识别机器人用)
在示教器【文件】菜单中备份 EDS 文件,或记录文件中 Connection Point(连接点/实例号),后续配置网关时需填写。
第二步:协议网关配置(翻译官部署,承上启下) 网关的作用是实现 Profinet 与 EtherNet/IP 的协议转换,一边对接西门子 PLC(Profinet 主站),一边对接发那科机器人(EtherNet/IP 从站),配置核心是参数对应。
网关软件安装
安装网关配套配置软件(如 WL-ABC2006 对应专属配置软件),打开软件新建项目(如 PN2EIPm 项目)。
Profinet 侧配置(对接 PLC)
在软件左侧 Profinet 设置栏,设备名称留空(由 TIA Portal 后续分配,填错会导致 PLC 无法识别网关);
数据处理设置:掉线后数据处理设为保持最后值,避免机器人因通讯中断突然急停,引发生产事故。
EtherNet/IP 侧配置(对接机器人)
切换到 EtherNet/IP 设置页,网关作为主站连接机器人;
设置网关 IP(如 192.168.1.10),确保与机器人 IP(192.168.1.100)在同一网段;
添加从站:输入机器人 IP(192.168.1.100),填写之前记录的连接点(实例号);
数据映射:严格对应机器人设置的 4 字输入、4 字输出,⚠️ 关键逻辑 :网关的输出对应机器人的输入,网关的输入对应机器人的输出,别配反!
配置下载与生效
点击软件下载按钮,将配置下载到网关,重启网关,观察网关指示灯有节奏闪烁,说明网关配置生效。
第三步:西门子 PLC 侧配置(S7-1500,TIA Portal 实操) PLC 侧核心是导入网关 GSDML 文件、硬件组态、数据映射,完成与网关的通讯,进而实现与机器人的数据交互。
导入 GSDML 文件
打开 TIA Portal,新建项目,选择对应 S7-1500 型号;
路径:【选项】→ 【管理通用站描述文件】,导入网关对应的 GSDML 文件(官网可下载最新版本),刷新硬件目录,即可找到网关型号。
硬件组态与设备点名
在网络视图中,将网关拖入 Profinet 网络,连接 Profinet 网线;
右键点击网关图标,选择【分配设备名称】,输入与网关软件中一致的名称(之前留空的名称,此处统一填写),点击【分配】;
当软件提示设备名称匹配成功(绿色对勾),说明 PLC 与网关建立物理连接,随后为网关分配 IP(如 192.168.1.11),与机器人、网关在同一网段。
数据映射与程序编写
双击网关设备,在设备视图添加 IO 模块,选择 4 Words Input / 4 Words Output 配置(与机器人、网关保持一致);
记录 PLC 分配的地址区(如 IW256 开始为机器人状态,QW256 开始为 PLC 控制命令);
下载硬件组态到 PLC,编写测试程序(附实测代码 + 详细注释),实现信号交互:
// 西门子 S7-1500 测试代码(机器人状态读取 + 控制命令发送) // 注释:该代码核心实现 PLC 与机器人的双向信号交互,适配前文配置的 4 字输入/输出(与机器人、网关配置一致),可直接复制到 OB1 中使用 VAR Robot_Status: ARRAY[0..3] OF WORD; // 机器人状态存储数组(4 字,对应 PLC 输入 IW256-IW262) // 数组索引 0 对应 IW256,1 对应 IW258,依次类推(间隔 2 是因为 1 字=2 字节),与前文记录的 PLC 地址区完全对应 PLC_Command: ARRAY[0..3] OF WORD; // PLC 控制命令存储数组(4 字,对应 PLC 输出 QW256-QW262) // 数组索引 0 对应 QW256,1 对应 QW258,与机器人输入地址一一对应,匹配前文机器人侧 4 字输入配置 Start_Signal: BOOL := FALSE; // 机器人启动信号(可绑定 PLC 外部按钮或 HMI 开关,用于触发机器人启动动作) Reset_Signal: BOOL := FALSE; // 机器人复位信号(用于故障后复位或停止机器人,与前文通讯测试中的复位逻辑一致) END_VAR // 读取机器人状态(核心逻辑:将机器人输出的状态信号,读取到 PLC 输入地址,存入数组) // IW256 对应机器人输出的第一个字,后续地址依次递增 2(IW256、IW258、IW260、IW262),与前文记录 PLC 分配的地址区完全匹配 Robot_Status[0] := "PN_IO_Device_1".Inputs.IW256; // 读取机器人输出第 1 字(如运行状态、故障状态,对应通讯测试中机器人反馈的状态信号) Robot_Status[1] := "PN_IO_Device_1".Inputs.IW258; // 读取机器人输出第 2 字(如轴状态、工位信号,适配产线联动需求) Robot_Status[2] := "PN_IO_Device_1".Inputs.IW260; // 读取机器人输出第 3 字(如报警代码、完成信号,方便故障排查和流程判断) Robot_Status[3] := "PN_IO_Device_1".Inputs.IW262; // 读取机器人输出第 4 字(自定义备用信号,可根据实际项目需求拓展) // 发送控制命令(核心逻辑:根据控制信号,给 PLC 输出地址赋值,发送命令到机器人) // QW256 对应机器人输入的第一个字,0 位为启动信号位,1 位为复位信号位(可根据实际需求调整,与前文机器人侧输入配置匹配) // 启动信号:置位 QW256 的 0 位(十六进制 16#0001,对应二进制 0000 0000 0000 0001),与通讯测试中 PLC→机器人的启动信号一致 IF Start_Signal THEN PLC_Command[0] := 16#0001; // 启动命令:给机器人发送启动信号,对应通讯测试中 QW256 设为 16#0001 的操作 ELSIF Reset_Signal THEN PLC_Command[0] := 16#0002; // 复位命令:给机器人发送复位信号(对应 QW256 的 1 位),用于故障复位或停止机器人 ELSE PLC_Command[0] := 16#0000; // 无命令:停止发送启动/复位信号,机器人保持当前状态,避免误触发 END_IF; // 将控制命令数组的值,赋值到 PLC 输出地址,发送给机器人,与前文网关数据映射逻辑一致(PLC 输出对应机器人输入) "PN_IO_Device_1".Outputs.QW256 := PLC_Command[0]; // 发送第 1 字控制命令(启动/复位),对应通讯测试的核心控制信号 "PN_IO_Device_1".Outputs.QW258 := PLC_Command[1]; // 发送第 2 字控制命令(自定义,如速度调节,适配产线速度需求) "PN_IO_Device_1".Outputs.QW260 := PLC_Command[2]; // 发送第 3 字控制命令(自定义,如工位选择,适配多工位联动) "PN_IO_Device_1".Outputs.QW262 := PLC_Command[3]; // 发送第 4 字控制命令(自定义备用,可根据项目拓展功能)
第四步:通讯测试与验证 配置完成后,必须进行测试,确保通讯稳定、数据交互正常,避免现场调试踩坑。
状态检查
确认机器人示教器 EtherNet/IP 连接为运行,网关指示灯正常闪烁,TIA Portal 中网关设备状态为在线。
信号交互测试
PLC→机器人 :在 TIA Portal 监控表中,将 QW256 设为 16#0001(启动信号),观察机器人示教器中对应 DI 点是否置位,机器人是否执行启动动作;
机器人→PLC :手动在机器人示教器中置位 DO 点,观察 TIA Portal 监控表中 IW256 对应数据是否变化,确保状态正常反馈。
稳定性测试
持续运行 30 分钟,观察数据无丢包、无误码,机器人动作与 PLC 命令一致,说明通讯稳定。
方案二:Modbus TCP 版(低成本,适配 S7-1200+ 发那科机器人) 适用场景 :小型工作站、简单信号交互(如启动、停止、状态反馈)、低成本需求,无需额外网关,通过 Modbus TCP 协议直接通讯,实测 S7-1200 与发那科 R-30iB 完美兼容。
第一步:发那科机器人侧配置(Modbus TCP 服务器/从站)
功能验证
打开示教器,【MENU】→ 【I/O】→ 【Modbus TCP】,若无此选项,需安装 Modbus TCP 软件选项(R602)。
基础参数设置
角色设为【服务器(Server)/从站(Slave)】;
机架号(Rack)设为 96(发那科 Modbus TCP 标准机架号),插槽(Slot)设为 1;
设置输入字数(Input Words)和输出字数(Output Words),各设为 4 字(64 位),修改后重启机器人控制器生效。
I/O 信号分配
【MENU】→ 【I/O】→ 【数字量(DI/DO)】,找到机架号 96 的设备,分配具体点位范围(如 DI1-DI64、DO1-DO64),用于后续信号映射。
第二步:西门子 S7-1200 PLC 侧配置(Modbus TCP 客户端/主站)
建立连接
打开 TIA Portal,新建 S7-1200 项目,进入【程序块】→ 【系统块】→ 【连接】,新建连接,选择【TCON_IP_V4】;
填写机器人 IP 地址(如 192.168.1.100),端口号设为 502(Modbus TCP 默认端口),记录连接 ID(如 1)。
调用 MB_CLIENT 指令
在 OB1 中调用 MB_CLIENT 指令,参数配置如下:
REQ :用上升沿触发(如 M0.0 配合 P 触发器),避免高频连续触发;
CONNECT_ID :填入上述连接 ID(如 1);
IP_PORT :502;
MB_MODE :0(读)、1(写);
MB_DATA_ADDR :寄存器起始地址(⚠️ 注意 :发那科 DO 对应 400001 开始,DI 对应 400065 开始,需根据分配的字数调整);
MB_DATA_LEN :4(与机器人设置的字数一致);
MB_DATA_PTR :指向 DB 块(如 P#DB1.DBX0.0 WORD 4),用于存放读写数据。
数据处理与测试代码
⚠️ 注意 :S7-1200 与发那科字节顺序可能不一致(大小端问题),若 PLC 写入 16#0001,机器人读到 16#0100,需用 SWAP 指令交换字节;
附实测测试代码(含详细注释):
// 西门子 S7-1200 Modbus TCP 测试代码 // 注释:该代码实现 S7-1200 作为 Modbus TCP 客户端,与发那科机器人(服务器)的读写交互,适配前文配置的 4 字输入/输出,可直接复制到 OB1 使用 VAR MB_Client: MB_CLIENT; // Modbus TCP 客户端指令(S7-1200 自带,无需额外添加,与前文调用 MB_CLIENT 指令步骤对应) Connect_ID: INT := 1; // 连接 ID(与系统块中新建的 Modbus TCP 连接 ID 保持一致,不可随意修改,对应前文记录连接 ID(如 1)) Req_Read: BOOL := FALSE; // 读请求触发信号(上升沿触发,避免高频触发导致通讯超时,与前文 REQ 参数配置要求一致) Req_Write: BOOL := FALSE; // 写请求触发信号(上升沿触发,与读请求分开,避免冲突,符合前文 MB_CLIENT 指令配置规范) DB1: DB1; // 数据存储 DB 块(需提前新建,用于存放读写的机器人数据,数据类型为 WORD 数组,适配 4 字读写长度) Swap_Data: WORD; // 字节交换临时变量(解决 S7-1200 与发那科的大小端不一致问题,对应前文大小端问题的解决方案) END_VAR // 读机器人状态(核心逻辑:读取机器人 DI 信号,对应 Modbus 地址 400065,长度 4 字,与前文机器人侧 DI 分配及 Modbus 地址规则一致) // MB_MODE=0 表示读操作,MB_DATA_ADDR=400065 是发那科 DI 对应的起始寄存器地址(前文注意已强调该地址不可错) MB_Client( REQ := Req_Read, // 读请求触发(如绑定 PLC 按钮,按下触发一次读操作,符合前文 REQ 上升沿触发要求) CONNECT_ID := Connect_ID, // 连接 ID,与系统块中配置一致,对应前文记录连接 ID 步骤 IP_PORT := 502, // Modbus TCP 默认端口,不可修改,与前文端口号设为 502 完全匹配 MB_MODE := 0, // 0=读操作,1=写操作,此处为读取机器人状态,对应前文读取机器人 DI 状态需求 MB_DATA_ADDR := 400065, // 发那科 DI 对应 Modbus 起始地址(固定偏移,不可错,前文注意已重点强调) MB_DATA_LEN := 4, // 读取长度 4 字,与机器人侧设置的输入字数一致,符合前文核心配置原则 MB_DATA_PTR := P#DB1.DBX0.0 WORD 4, // 读取的数据存入 DB1.DBX0.0 开始的 4 个 WORD,与前文 MB_DATA_PTR 参数配置示例一致 BUSY := DB1.Busy, // 通讯忙信号(为 TRUE 时表示正在读取,不可重复触发,避免通讯冲突) DONE := DB1.Done, // 读取完成信号(为 TRUE 时表示读取成功,可用于后续流程判断) ERROR := DB1.Error, // 读取错误信号(为 TRUE 时表示读取失败,需排查故障,对应前文故障排查逻辑) STATUS := DB1.Status // 状态码(用于故障排查,如超时、地址错误等,辅助定位通讯问题) ); // 写控制命令到机器人(核心逻辑:给机器人 DO 信号赋值,对应 Modbus 地址 400001,长度 4 字,与前文机器人侧 DO 分配及 Modbus 地址规则一致) // MB_MODE=1 表示写操作,MB_DATA_ADDR=400001 是发那科 DO 对应的起始寄存器地址(前文注意已强调该地址不可错) MB_Client( REQ := Req_Write, // 写请求触发(如绑定 PLC 按钮,按下触发一次写操作,符合前文 REQ 上升沿触发要求) CONNECT_ID := Connect_ID, // 连接 ID,与系统块中配置一致,对应前文记录连接 ID 步骤 IP_PORT := 502, // Modbus TCP 默认端口,不可修改,与前文端口号设为 502 完全匹配 MB_MODE := 1, // 1=写操作,0=读操作,此处为发送控制命令,对应前文发送启动信号需求 MB_DATA_ADDR := 400001, // 发那科 DO 对应 Modbus 起始地址(固定偏移,不可错,前文注意已重点强调) MB_DATA_LEN := 4, // 写入长度 4 字,与机器人侧设置的输出字数一致,符合前文核心配置原则 MB_DATA_PTR := P#DB1.DBX8.0 WORD 4, // 写入的数据从 DB1.DBX8.0 开始读取,与前文 MB_DATA_PTR 参数配置示例一致 BUSY := DB1.Busy2, // 通讯忙信号(写操作忙,不可重复触发,避免通讯冲突) DONE := DB1.Done2, // 写入完成信号(为 TRUE 时表示写入成功,可用于后续流程判断) ERROR := DB1.Error2, // 写入错误信号(为 TRUE 时表示写入失败,需排查故障,对应前文故障排查逻辑) STATUS := DB1.Status2 // 写操作状态码(用于故障排查,如超时、地址错误等,辅助定位通讯问题) ); // 字节交换(解决大小端问题,关键步骤,对应前文大小端问题的说明) // 注释:S7-1200 是小端模式,发那科是大端模式,不交换字节会导致数据错位(如 16#0001 变成 16#0100),影响通讯准确性 Swap_Data := SWAP(DB1.Write_Data[0]); // 将 DB1 中要写入的数据进行字节交换,解决大小端错位问题 DB1.Write_Data[0] := Swap_Data; // 交换后的数据重新存入 DB1,再发送给机器人,确保数据传输准确
第三步:通讯测试与故障排查
测试步骤
启动 PLC 和机器人,触发读请求,观察 DB 块中是否正确读取机器人 DI 状态;触发写请求,发送启动信号,观察机器人是否响应。
常见故障解决
连接失败 :检查机器人防火墙设置,确保允许 PLC IP 连接;确认端口 502 未被占用,网线连接正常。
数据错误 :核对 MB_DATA_ADDR 地址是否正确,检查字节顺序,必要时使用 SWAP 指令。
读写超时 :调整 REQ 触发方式,避免高频连续触发,等待 DONE 或 ERROR 信号结束后再发送下一条请求。
两大方案对比与核心避坑总结
对比项 对比项 网关版(Profinet 转 EtherNet/IP) Modbus TCP 版 适用场景 中大型产线、高速实时通讯、多设备联动 小型工作站、简单信号交互、低成本需求 硬件成本 需额外购买协议网关 无额外成本(仅需网线) 实时性 高(适合急停、运动轨迹控制) 一般(适合离散量信号) 配置难度 中等(需配置网关,步骤较多) 简单(直接协议对接)
核心避坑点
参数一致性 :机器人、网关(如有)、PLC 的输入/输出字数必须完全一致,IP 必须在同一网段,这是通讯成功的前提,缺一不可。
发那科重启生效 :修改机器人 IP、Modbus TCP 参数、EtherNet/IP 数据长度后,必须重启控制器,否则参数不生效。
网关映射逻辑 :网关的输入/输出与机器人的输入/输出是交叉映射,别配反,否则信号无法正常交互。
GSD/EDS 文件 :PLC 导入网关 GSDML 文件、网关导入机器人 EDS 文件,必须使用最新版本,否则会出现设备无法识别的问题。
Modbus 地址 :发那科 DI/DO 对应 Modbus 寄存器地址有固定偏移(DO=400001,DI=400065),需核对手册,避免地址写错导致数据读取失败。
总结 本文两种方案均经过工业现场实测验证,可根据自身项目的成本、通讯需求选择:中大型产线优先选网关版,追求稳定高效;小型工作站选 Modbus TCP 版,低成本快速落地。
所有步骤均拆解到具体按键和代码,新手可直接照搬,老手可快速跳过基础步骤,重点看避坑点和故障排查。如果在调试过程中遇到问题,建议查阅官方文档或寻求技术支持。
参考资料:基于赫优讯、稳联技术网关实操案例,发那科 R-30iB 系统手册,西门子 TIA Portal 官方文档。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown 转 HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
HTML 转 Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online