前阵子有个做产线集成的朋友跟我抱怨,现在的项目越来越不像“单品牌”活了。主控选了西门子S7-1500,工位专机用的却是汇川AM600,两边的工程师各调各的,一到联锁联动就头疼。他问我:这两家PLC之间,到底走什么通信协议最省心?
放在五年前,我大概率会建议Modbus TCP——简单、通用、两边都支持。但这几年我自己的项目里,跨品牌PLC互联已经开始大面积转向Ethernet/IP。尤其在西门子和汇川共存的产线上,Ethernet/IP已经从“备选方案”变成了“首选方案”。这篇文章我就把为什么选它、怎么配置、坑在哪里一次说清楚。适合正在做跨品牌PLC对接的电气工程师、系统集成商,以及准备在新项目里定通信方案的自动化从业者。
1. 为什么西门子和汇川之间必须重新考虑通信方式
1.1 从混合产线看通信刚需
先说一个这几年最常见的现场状态:一条产线里不再清一色只有一个品牌。主工艺段用了西门子,因为它逻辑稳定、生态全;周边设备用了汇川,因为它性价比高、供货快、调试起来也顺手。客户不会管你“两家PLC能不能通信”,他们只关心产线能不能联动、数据能不能监控。
我遇到过三种典型场景。第一种是混流生产线,主控用S7-1500,每台专机用汇川的PLC,产线节拍变化时需要实时切换工艺参数和工作状态。第二种是老线改造,原有西门子设备不能动,新增设备全是汇川,新旧系统要在一个总控下协作。第三种是系统集成商交付,总包方指定主站用西门子,子站由分包方用汇川实现,合同里明确写了“所有设备需能通过标准工业以太网互联”。
这些场景的共同点是:通信量未必很大,但要求可靠、可调试、可维护。以前的做法很简单,硬接线加Modbus TCP。信号少的时候没问题,一旦信号变多,比如几十个模拟量加几百个开关量,Modbus TCP那种“地址表全靠人工维护”的方式就开始出问题。更麻烦的是,现场电气工程师还经常遇到“同样的握手逻辑,在A家设备写起来顺手,在B家设备里就是不通”。所以通信方案不是“能不能通”的问题,而是“好不好通、好不好维护”的问题。
1.2 传统方案的四个坑
先说Modbus TCP。它最大的优点是普及率高,几乎所有PLC都支持。但它的数据模型本质上就是一堆寄存器地址,没有设备对象、没有连接管理。做工程时你得自己记录“40001是转速、40010是温度”,换个人维护就是一场灾难。数据断链时,Modbus TCP只能告诉你“连接超时”,至于是谁的问题、哪个数据丢包,基本靠猜。
然后是Profinet。西门子的Profinet生态确实强,但前提是“同一个朋友圈”。第三方设备接入时,绝大多数要厂家提供GSD文件,且很多国产品牌的Profinet从站实现并不完整。一旦遇到一个支持列表里没有的设备,整个方案就要推倒重来。
再说OPC UA。它跨平台、信息安全、信息模型都做得很好,适合做管理系统集成。但在PLC到PLC的实时联锁这个环节,它显得“太重了”:配置复杂度高,而且通用实现里的节点访问效率并不适合高速循环数据交换。为了传输几个BOOL值去搭一套UA服务器和客户端,很多现场工程师都觉得没必要。
最后是私有协议。确实有厂商提供自己的一套协议专门对接自家设备,但跨品牌场景下一旦用了私有协议,后续维护就被绑死了。换设备、加站点、升级固件,都要找原厂。综合来看,在“西门子加汇川”这种混合场景下,最值得重新审视的,就是Ethernet/IP。
2. 通信协议选型:为什么Ethernet/IP会是这个答案
2.1 工业以太网协议横向对比
Ethernet/IP不是新协议,它由CIP协议延伸而来,在欧美自动化市场一直有很深的积累。真正让它这几年在国内“翻红”的,是它在跨厂商设备接入时的一套标准化机制。先看对比表:
| 维度 | Modbus TCP | Profinet | Ethernet/IP | OPC UA |
|---|---|---|---|---|
| 标准组织 | Modbus组织 | PI组织 | ODVA | OPC基金会 |
| 设备描述文件 | 无标准文件 | GSDML | EDS | 信息模型 |
| 实时性 | 一般 | 较强 | 较高 | 中等 |
| 跨品牌接入 | 易但手工多 | 依赖GSD | 标准EDS | 依赖信息模型 |
| 工程诊断能力 | 弱 | 中 | 强 | 强 |
这张表里,我不认为哪个协议绝对好、哪个绝对差,关键是匹配场景。Modbus TCP的优势是极低的接入门槛,几乎所有PLC都支持,但它的工程体验完全依赖工程师自己的变量表。Profinet在西门子生态里很强,一旦跨品牌,支持度和调试手段就参差不齐。OPC UA在管理和信息化层面无可替代,但在PLC之间的高频联锁场景里偏重。
Ethernet/IP恰好卡在中间:网络层是标准以太网,传输层有明确的周期连接机制,数据层有CIP对象。对第三方设备,设备描述文件是标准EDS,接入逻辑统一。这种“中间生态位”正好覆盖了混合品牌产线的需求。
2.2 Ethernet/IP崛起的产品信号
协议再好,如果两家PLC不支持也是白搭。这几年真正让我感觉Ethernet/IP“起来了”的,是产品端的动作。
西门子这边,S7-1200、S7-1500在近几代固件中已经原生支持Ethernet/IP通信,意味着不需要额外加通信模块,在TIA中可以直接组态。S7-1500可以被组态为Scanner主动去读写第三方设备,S7-1200系列受限于型号和固件,通常在项目中作为Adapter使用。当然,具体支持范围一定要以固件版本和TIA版本为准,选型时先查兼容列表。
汇川这边,AM系列、H5U等中型PLC在主站和从站两个方向上都有Ethernet/IP能力,编程软件里直接有配置入口,也能导出标准EDS文件。这在国内PLC品牌里算是做得比较完整的。
还有一个不能忽视的因素是生态链条。过去Ethernet/IP主要在欧美设备里常见,现在国产PLC厂商为了出海和对接外资产线,也在系统性地完善这一块。汇川就是典型的例子,从中型PLC到伺服、变频都能在同一套Ethernet/IP体系里做集成。西门子在TIA中的支持也不断加强。两个主流品牌在同一个协议上“双向奔赴”,意味着集成商不用再为每一对品牌组合开发专用的脚本或转换逻辑。协议支持度就是选型的底气,这一点别的配置再花哨也替代不了。
3. 只用搞清楚这三点,Ethernet/IP就入门了
3.1 Scanner、Adapter和连接的概念
Ethernet/IP里的三个核心概念,搞懂它们就入门了。
Scanner是主站,相当于“包工头”。它主动发起通信连接,按设定周期读写数据。Adapter是从站,相当于“干活的人”,它准备好数据,等主站来读,也接收主站下发的命令。在西门子加汇川的场景里,通常S7-1500当Scanner,汇川PLC当Adapter,但这并不是固定的,主从可以根据项目需要互换。
连接是两个设备之间的一条“合同”。Scanner发送ForwardOpen请求,带上自己期望的通信参数,Adapter同意后连接建立,双方按约定周期交换数据。这个过程有标准报文,和Modbus TCP那种“发一条读指令、等一条响应”完全不同。连接一旦建立,数据就持续循环流动,这在联锁控制里非常重要。
连接里的核心参数是RPI,即请求数据包间隔。你可以把它理解成“货物多久发一次”。RPI越小,响应越快,但对网络带宽和CPU占用也越大;RPI太大,控制的实时性又跟不上。普通产线上我一般从10ms起步,如果需要更快的联锁,再看设备支持范围往下调。连接还有一个超时倍数概念:当连续几个周期没收到数据时,按超时倍数判定连接断开。这个参数在排障时非常关键。
3.2 Assembly:数据打包机制
有了连接,数据怎么传?这是Ethernet/IP和Modbus TCP最本质的区别之一。
在Ethernet/IP中,Adapter侧会把多个数据打包成Assembly(组装对象)。比如一台汇川PLC,可以把运行状态、当前速度、报警码、温度一起打包成一个固定长度的输入Assembly,把启动、停止、设定值打包成一个输出Assembly。对西门子侧的工程师来说,不需要知道汇川内部每个寄存器多少号,只需要在配置时选择正确的实例号,并声明数据长度。
我经常打一个比方:Modbus TCP像是去仓库按编号取件,你得拿着取件单核对每一个货号。Ethernet/IP像是直接拿走一箱打包好的货,箱子外面写着“这就是这台设备的全部输入数据”,里面东西怎么摆放,只看装箱单,而不用关心仓库内部布局。
汇川侧配置的核心任务之一,就是定义这个“装箱单”。哪些变量进输入Assembly、哪些变量进输出Assembly,实例号填多少,都要在组态里明确。配置得当,联调时两端的数据就是完整对齐的;配置错了,最常见的结果是数据对不上位。
3.3 隐式报文和显式报文
Ethernet/IP的通信量分两类。一类是隐式报文,走UDP端口2222,承载周期性I/O数据,也是联锁控制的主要通道。另一类是显式报文,走TCP端口44818,承载参数读写、设备诊断、EDS信息读取等非周期性请求。
这两类流量分开,最大的好处是排障定位快。如果周期性数据时断时续,但PLC之间还能互相Ping,那就要重点排查UDP 2222的连通性和连接参数。如果连设备都识别不了,可能问题出在TCP 44818。实际现场排查中,很多“连不上”的案例,最终都定位到工业交换机配置了ACL或防火墙,把某个端口隔断了。知道端口号,往这个方向查会快很多。
4. 西门子侧实操:如何把S7-1500组态成Ethernet/IP Scanner
4.1 前提条件确认
先说组态之前要确认的事。第一,硬件版本。S7-1500作为Scanner运行时,对CPU固件有版本要求,TIA软件的版本也要对应。不要在项目快交付时才发现固件不支持,选型阶段就把兼容版本查清楚。
第二,EDS文件。Ethernet/IP设备都有对应的EDS文件,通常由Adapter设备厂家提供。在汇川侧配置完成后,导出EDS,再拿到西门子TIA里去导入。这一步是整个配置的“钥匙”。没有正确的EDS文件,TIA里根本无法识别设备。
第三,物理网络。Ethernet/IP跑在标准以太网上,用普通工业交换机就能组网。建议先把两台PLC的IP固定在同一网段,测试阶段不要加VLAN,减少变量。产线中交换机端口模式、电口和光口混用、网络风暴等问题,留到联调阶段再处理。
4.2 在TIA中组态Ethernet/IP设备的六个步骤
以S7-1500作为Scanner对接一台汇川AM600为例,配置步骤大致如下。不同TIA版本菜单名略有差异,但思路一致。
- 新建项目,添加S7-1500站点,并在设备视图里给CPU分配好IP地址。
- 在“设备与网络”视图里,从“其他现场设备”中找到Ethernet/IP设备列表。如果列表里没有汇川设备,点击安装EDS文件,选择从汇川侧导出的EDS。
- 将设备从硬件目录拖到网络视图,给它分配IP地址,并把它连接到CPU所在的那个子网。
- 双击这台设备,打开Ethernet/IP连接配置。这里要设置Scanner侧的连接参数:RPI、输入输出数据长度、连接的I/O地址区。
- 分配I/O地址区。TIA中会为这台Ethernet/IP设备分配一组I地址和Q地址,后续在PLC程序里直接读I、写Q就能访问到汇川设备的数据。
- 编译、下载、在线监视,检查连接状态是否为已建立。
第4步最容易出错。Ethernet/IP的输入输出长度必须和汇川侧定义的Assembly长度完全一致,多一个字节或少一个字节都会导致连接异常。第5步的地址区也不是越宽越好,按实际数据长度申请,避免I/O资源浪费。
4.3 数据映射到DB块的字节序处理
连接建起来后,另一个经典问题就是字节序。
Ethernet/IP协议在传输整型、浮点型数据时使用小端序,而西门子S7系统在字和双字寻址上是标准的大端序。结果就是:你在汇川侧看到的一个INT数值,跑到西门子侧后,按MW直接读可能是反的。
我在调试时习惯用一个“固定值探测法”。先在汇川侧程序里给输出Assembly的第一个INT写一个固定值,比如十六进制0xAA01,然后去西门子侧看对应的MW。如果显示0x01AA,说明字节顺序反了,后面所有整形和浮点数据都需要做字节交换。
处理方式有两种。一种是在西门子侧的程序里对每个整形、浮点数据做字节交换,可以用SCL写SWAP函数,也可以直接用博途自带的字节交换功能块。另一种是在汇川侧组态时调整数据排列,让输出时已经是大端序。我建议统一在西门子侧处理,因为一个项目里第三方设备可能不止一台,统一在主站侧交换,后期维护更清晰。
提示:字节序问题不是“会不会遇到”,而是“什么时候遇到”。只要数据里有INT、REAL、DINT,就必须做一次固定值验证,别等接完线才发现温度显示成负数。
5. 汇川侧实操:把PLC设置为Adapter(从站)并完成对接
5.1 汇川软件里打开Ethernet/IP从站功能
到汇川这边,配置动作正好反过来。以AM系列为例,在汇川的PLC编程软件(不同系列叫InoProShop或AutoShop)里,新建工程后找到Ethernet/IP相关配置项。
首先要启用Adapter从站模式。软件里通常会有“主站/从站”的选择,本项目里汇川PLC作为Adapter,也就是从站,端点上只需要提供数据并响应Scanner的连接请求。启用后,把输入输出两个Assembly实例定义好:一个负责把汇川程序里的状态变量打包给西门子,一个负责接收西门子下发的控制字和设定值。
然后把实际变量映射到Assembly。这一步相当于“装箱”:状态字、当前速度放到输入Assembly,启停命令、设定速度放到输出Assembly。变量排列顺序会直接影响西门子侧的数据视图,所以前几个字节最好设计成规范的状态和控制字,后续扩展也方便。
所有映射完成后,生成并导出EDS文件。导出的EDS文件要保存好,它不仅是给西门子工程师用的,也是这个设备的“数据身份证”。
5.2 参数匹配:RPI、超时不求人
适配器侧的连接参数要和Scanner侧一致,才容易建连。最关键的依然是RPI。
正常情况下,Scanner发送的RPI请求是主导,Adapter收到后判断自己是否支持,支持就接受连接。如果你在西门子侧设置了一个汇川设备不支持的最小RPI,连接就会被拒绝。所以稳妥的做法是:先去汇川侧查看该设备支持的RPI范围,再回TIA里设置,宁可稍微偏大,不要贪小。
超时时间依据RPI和超时倍数计算,现场经常被忽略。有的工程师只调RPI不动超时,导致网络一抖动就判定连接断开,频繁报警。建议把超时常数适当放大,让偶尔的一两帧丢失不至于直接断链,配合心跳信号做通信质量监控,比单纯追求最小RPI实用得多。
我在现场的标准做法是:先用默认RPI和偏大的超时把链路调通,再逐步调小RPI到项目需求。这样一次联调的成功率最高。
5.3 联调现场的小技巧
联调时不要急着上真实数据。我会先做两件事。
第一,固定值握手。在汇川侧程序里,把输入Assembly的前几个字节写死,比如0x11、0x22、0x33、0x44,然后在西门子侧看接收到的值。如果完全一致,说明数据路径、长度、地址都对;如果顺序不对,立刻能判断是字节序问题。反过来再从西门子侧写固定值,验证下行链路。
第二,心跳信号。在数据包中加一个周期递增的计数器,西门子侧可以监控这个数是否持续变化。心跳正常,说明连接和数据流稳定;心跳卡住,说明某些周期存在丢包。
还有一个容易被忽略的原则:两边不要同时改参数。调试Ethernet/IP时,我要求自己每次只动一端,另一端保持不动,改完观察连接状态,再决定下一步。否则RPI、长度、地址同时变化,出了问题根本不知道是哪边导致的。现场带新人的时候,这个习惯能省很多事。
6. 常见问题与排查策略
6.1 连接建立不起来
最典型的故障是Scanner侧一直显示“Waiting for Connection”,或者汇川侧设备的连接计数一直没有增加。遇到这种情况,我按这个顺序排查。
先Ping,确认物理链路和IP在同一网段。Ping不通就看网线、交换机端口、IP配置。Ping通了再看设备识别:TIA里有没有正确安装EDS文件,设备类型是否匹配。然后是参数范围:RPI设置是否小于Adapter的最小支持值,数据长度是否和Assembly定义一致。最后看工业交换机,有没有开启端口隔离、ACL、风暴抑制或者VLAN划分。
抓包工具也很实用。在交换机的镜像口抓Ethernet/IP流量,重点看UDP 2222端口有没有出现ForwardOpen请求和响应。能抓到ForwardOpen但始终没有成功响应,多半是Adapter侧的参数不匹配;连ForwardOpen都看不到,问题大概率出在主站侧或网络路径上。
6.2 数据错位和乱跳
连接通了,但数据“不对”,这种问题更容易让人头疼。表现为:温度值翻倍下跌、布尔量对不上、模拟量忽大忽小。
常见的三个原因。第一,字节序问题。小端和大端的差异在前面已经说过,凡是整型和浮点型都要检查。第二,Assembly选择错误。汇川侧明明定义了实例100作为输入,TIA里却对着实例101来组态,能对上才怪。第三,长度不一致。数组长度多声明了几个字节,后续数据全部向后错位。
遇到“乱跳”先别急着怀疑干扰,先把数据改成固定值测试,问题就缩小到“方向、长度、字节序”三个维度的组合。逐项排除法在找这个问题时最高效,盲目改RPI反而容易引入新问题。
6.3 掉线和恢复异常
还有一种情况是平时看着正常,偶尔报几秒通信超时,又自动恢复。这类问题最考验现场经验。
我排查时会分三步。第一步,看RPI是否过小。产线上如果交换机跳数多、网络负载大,RPI调到5ms以下很容易偶发超时。第二步,看超时倍数。RPI对应的超时时间太短,网络一抖动就误判断链。第三步,看交换机端口。工业交换机上有没有丢弃错误报文、是否限制广播,以及其他设备对网络的冲击。
另外提醒一点,如果连接恢复需要很长时间,检查Adapter侧是否设置了“禁止自动重连”,很多从站在掉线后需要手动恢复。这类参数在不同固件版本里的默认值不一致,值得提前确认。现场出现过厂家升级固件后行为变化的情况,调试时记得记录固件版本。
最后聊点个人体会。我从几年前的Modbus TCP“半路出家”,到如今在西门子和汇川的混合产线上默认就考虑Ethernet/IP,最大的感受是:它不是万能的,但它在“跨品牌、可交付、可维护”这三个维度上找到了一个很务实的平衡点。如果你手头的项目也面临同样的对接问题,我建议先别急着照搬网上的配置参数,老老实实走一遍固定值握手、心跳监控、字节序验证,这套基本功用熟了,Ethernet/IP给你的回报会超出预期。也欢迎在评论区和我说说你遇到的奇葩通信问题。