☰
跨品牌PLC的EtherNet/IP通讯实战:实例ID与字节映射配置指南
2026/10/15 10:51:01 网站建设 项目流程

简介:面向工业自动化与PLC调试工程师的PDF技术文档,围绕汇川小型PLC与欧姆龙PLC通过EtherNet/IP(EIP)协议实现跨品牌通讯的完整配置过程展开,适合需要实现汇川与欧姆龙设备互联的现场调试及学习人员。资料包共1个PDF文件,大小846KB,内容精炼集中;目前已有644人浏览学习,具有一定参考热度。文档按两端分别说明:汇川侧涵盖AutoShop工具箱中Generic EtherNet/IP device的添加、从站IP设置、连接实例ID(组合消耗0->T为105、组合生产T->0为106)、数据字节长度(0->T 6字节、T->0 12字节)、心跳格式转换及数据集变量映射;欧姆龙侧则包括Sysmac Studio中结构体与全局变量建立、网络公开选项设置、EtherNet/IP连接设置、全部注册以及实例ID由Auto改为与汇川对应的105/106等关键步骤。对于首次搭建EIP通讯的工程师,可依据此案例少走弯路,快速定位参数配置位置并完成数据读写验证。

1. 汇川小型PLC与欧姆龙EIP通讯:从对不上茬到一次打通

去年做过一条混线设备的改造,一边是欧姆龙中型PLC做主站,一边是汇川小型PLC做从站,两边都想用EtherNet/IP把IO数据拉通。本来以为都是走标准CIP协议,结果翻欧姆龙手册讲的是Sysmac Studio里的Tag注册,汇川这边讲的是AutoShop里的通用EIP设备连接,两个软件的术语完全对不上,折腾了一整天才把链路跑起来。说白了,这套通讯的精髓就几组数字:实例ID用105和106,O->T方向配6字节、T->O方向配12字节,转换格式必须选心跳。只要能把这几个值在两边软件里对齐,跨品牌EIP通讯就是个配置活,适合做设备改造、混线集成的电气工程师直接抄作业。

2. 汇川做从站:通用EIP设备、实例ID 105/106与字节长度怎么填

2.1 谁发谁收:EIP的角色划分决定实例ID怎么对

EtherNet/IP的结构和普通工业以太网不太一样,通讯前必须分清谁是Scanner、谁是Adapter。Scanner是主站,主动发起连接、周期性刷新IO数据;Adapter是从站,被动等待连接,提供数据区。在这个案例里,欧姆龙是Scanner,汇川是Adapter,所以汇川侧要做的第一件事,是在AutoShop里给这台PLC挂一个EIP从站设备,而不是去新建什么Socket连接。

EIP报文的两个方向,官方叫法容易把人绕晕。O->T指的是Originator(主站)发往Target(从站)的数据,也就是主站写给从站的输出;T->O是从站发往主站的数据,也就是主站读到的输入。汇川的AutoShop界面里,O->T方向叫“组合消耗”,T->O方向叫“组合生产”。我第一次配的时候也愣了一下,后来才反应过来,消耗就是收,生产就是发,站在从站视角理解这两个词反而很直白。

选择连接设备时,我一般不会在AutoShop的设备库里挑具体型号,因为汇川的设备列表里没有欧姆龙这种第三方品牌对应的EDS文件。正确做法是在Other Device里找到Generic_EtherNet_IP_device这个通用连接文件,它就是一个标准的隐式报文模板,不依赖品牌专属配置文件,什么Scanner都能用它对话。通用连接文件的灵活性在于,实例ID、字节长度、刷新方式全部手动指定,这正好满足跨品牌场景里两边参数需要精确对齐的要求。

2.2 AutoShop 里加载通用 EIP 设备与从站 IP 设置

操作入口在AutoShop左侧工具箱,路径是:工具箱 -> EtherNet/IP Device -> Other Device -> Generic_EtherNet_IP_device。找到后双击,系统会弹出这个EIP设备的配置界面。如果你的AutoShop里这一层是空的,什么都看不到,那基本可以断定是软件版本问题,旧版本没有集成EIP设备库,升级AutoShop后才会出现这个选项。升级软件的时候注意先备份工程,不同大版本的工程文件虽然能打开,但界面菜单会有细微差别,我遇到过升级后旧工程的网络配置被还原成默认值的情况。

接着要设置从站IP地址。汇川小型PLC的以太网口支持修改IP,建议在AutoShop的程序里先把PLC的本地IP固定下来,比如设成192.168.1.20,然后在这个EIP设备界面的“通用”选项卡里填入这个IP。IP必须和欧姆龙侧能ping通,一个最基础的坑是网段不一致,欧姆龙在192.168.1.1网段,汇川却配成了192.168.0.20,连接根本建立不起来。EIP是二层以上的协议,三层IP不通,后面什么都白搭。

IP填好以后,“添加连接”,这时候会生成一条“普通连接1”的条目,双击进去就能看到连接参数配置页。这页就是整条EIP链路最核心的地方,下一节详细拆里面的参数。

2.3 添加连接:组合消耗/组合生产、实例ID与6/12字节

连接参数页里有几个字段要逐个确认,分别是实例ID、字节大小和转换格式。实例ID是EIP报文里用来标识数据流类型的编号,标准的CIP协议里,每条连接至少要有一对O->T和T->O的实例ID。汇川界面的“组合消耗(0->T)”就是O->T方向,需要把实例ID改成105,字节大小改成6;“组合生产(T->O)”是T->O方向,实例ID改成106,字节大小改成12。这两对数字不能凭感觉填,必须保证和欧姆龙侧注册的实例ID完全一致,差一个数字,连接都建立不了。

那6和12是怎么定出来的?其实这是欧姆龙侧结构体变量编译后的实际字节长度。假如欧姆龙发给汇川的数据是由一个INT(2字节)和一个DINT(4字节)组成,加起来就是6字节,对应O->T大小填6;汇川回传给欧姆龙的数据由三个DINT组成,就是12字节,对应T->O大小填12。说白了,字节大小不是随便拍的,而是把两边数据区的每一个变量累加起来算出来的。这里强调一点:EIP在传输时只按字节偏移解析数据,不携带变量名,所以两边的变量名完全不一样也没关系,但每个变量的数据类型和排列顺序必须一致。

“转换格式”这个下拉选项,务必改成“心跳”。心跳对应的就是Class 1隐式IO报文,周期性地在以太网上刷新数据,这是EIP通讯的正常工作模式。如果漏掉这一步或者选了非周期模式,连接可能建立成功,但数据根本不会自动刷新,现场表现就是两边状态都是RUN,变量却纹丝不动,这个坑我在后面避坑章节里还会展开。

2.4 数据集映射:变量顺序就是字节偏移,千万不能乱

实例ID和字节长度设好后,接下来就是往连接里挂变量。在连接配置界面切到“数据集”标签,点“增加”,会弹出变量选择窗口,把需要参与通讯的变量一个一个加进来,然后为每个变量选择数据类型。这里的数据类型决定了它占几个字节、在数据区里的偏移量,选完之后变量会按添加顺序排成一张表。

这张表的顺序,就是EIP数据区里的字节顺序,不是你想怎么排就怎么排。比如你要发送一个WORD,又发送一个INT,表里顺序是WORD在前、INT在后,那么欧姆龙侧第1、2字节解析出来就是那个WORD,第3、4字节才是INT。一旦顺序颠倒,两边解析出来的数据就会错位,而且这种错位用万用表量不出来,只能在监控里肉眼识别,特别隐蔽。

我再给一个实际项目的映射表做参考,方便理解字节累计的概念:

顺序变量名数据类型字节大小累计偏移
1Start_FlagBOOL10
2Mode_WordWORD21
3Speed_ValueDINT43
4Alarm_CodeWORD27

看到第几行就能明白:EIP是纯字节拷贝,第1个变量从偏移0开始,第2个变量紧跟其后,中间没有任何字段名标记。所以汇川侧数据集里加的变量,顺序必须和欧姆龙侧结构体成员的顺序一一对应。我一般的做法是先画一张字节偏移草图,两边同时对着这张草图配变量,配完再核对一遍偏移,形成习惯后基本一次就能通。很多新手上来就在两个软件里凭感觉加变量,结果数据错位了还以为是网络问题,查了半天才发现是偏移对不上。

配置完数据集,汇川侧的工作就收尾了。把程序下载到PLC,让PLC处于运行状态,EIP从站会自动监听Scanner发来的连接请求。

3. 欧姆龙做主站:结构体、网络公开与把Auto改成105/106

3.1 在 Sysmac Studio 里建立结构体:成员顺序照着汇川数据集排

欧姆龙侧配置用的是Sysmac Studio,入口在左侧工程树:编程 -> 数据 -> 数据类型。在这个节点下新建一个结构体,把刚才汇川侧数据集里的变量以成员的形式填进去。结构体的好处是把多个变量打包成一个连续的内存块,EtherNet/IP通讯时可以直接把整块内存映射到网络缓冲区,不需要逐个变量去注册。

建立结构体时有个细节值得注意:成员顺序必须严格照抄汇川侧数据集的顺序,因为EIP数据区里只认字节偏移,不认变量名。你在欧姆龙里把第1个成员定义成Start_Flag,汇川那边第1个变量也叫Start_Flag,两边对应没错;但如果汇川那边第1个变量是Mode_Word,你在欧姆龙里把Mode_Word放在第3位,那解析出来就完全错位了。

结构体的成员类型选择上,我一般建议能用WORD、UINT、DINT就用这些整型,尽量别用BOOL。不是说BOOL不能用,而是不同PLC对BOOL的位存储方式有差异,有的按位打包,有的按字节对齐,一旦涉及位填充,结构体长度就可能和预期不一致。比如一个结构体里第1个成员是BOOL,第2个成员是DINT,按4字节对齐规则,DINT的起始偏移可能直接从偏移4开始,中间空出3个字节,整个结构体长度就不是5而是8,和汇川侧累计出来的6字节对不上。现场遇到长度对不上的情况,优先检查结构体里有没有BOOL成员。

3.2 全局变量与网络公开:输入/输出选错,列表里就是空的

结构体建立以后,要在全局变量表里声明变量,类型选刚才建的结构体,这一步就是把结构体实例化。全局变量表的“网络公开”这一列,是EIP能不能找到这个变量的关键开关,下拉选项里有隐藏、输入、输出等。选了隐藏,这个变量只活在PLC程序里,网络上完全看不见;只有选了输入或输出,Sysmac Studio才会把它发布到EtherNet/IP的Tag表里,供通讯配置界面检索。

这里要特别提醒:欧姆龙界面里的“输入/输出”命名视角,和汇川侧完全不一样。汇川把它叫组合消耗和组合生产,欧姆龙直接叫输入变量和输出变量。同一个数据流,左边的“输入变量”实际对应的是欧姆龙从网络上接收的数据,也就是汇川侧T->O方向发过来的数据;而“输出变量”是欧姆龙往外发的数据,对应汇川侧O->T方向。如果方向搞反,注册倒是能成功,通讯也正常,但数据搬家的方向反了,汇川收到的是欧姆龙的输入变量初值,欧姆龙读到的也是汇川那边的无关数据。

按照原案例的配置:欧姆龙输入变量对应实例ID 105,输出变量对应实例ID 106。配置时的对照关系是这样的:

汇川侧配置实例ID数据方向欧姆龙侧注册位置
组合消耗(O->T)105欧姆龙发往汇川输出变量
组合生产(T->O)106汇川发往欧姆龙输入变量

所以建议一开始就把两边实例ID写在同一张对照表里,照着表去选“输入/输出”,而不是靠在软件界面里猜。现场调EIP最忌讳的就是对着欧姆龙的界面去想汇川侧的术语,两边各说各话,必然翻车。

3.3 连接设置与实例ID手动修正:Auto 不等于能用

变量声明好后,到Sysmac Studio菜单栏的“工具”里找到“EtherNet/IP连接设置”,选择端口一,双击进入配置界面。这个界面分两个列表,一个是输入变量注册表,一个是输出变量注册表,点“全部注册”后,刚才设置了网络公开的变量会出现在可注册列表里,勾选注册进去就行。

注册完成后,界面里每个变量旁边都会显示一个实例ID,默认状态下是Auto,也就是系统自动分配。这个Auto字段是最容易忽略的坑,很多人以为系统分配的总不会错,就保持Auto直接运行,结果通讯就是不通,因为Auto自动分配的实例ID并不一定是105和106,而汇川侧那边已经填死了105和106。两边实例ID不一致,CIP连接就建立不起来。

正确做法是注册完成后,把实例ID从Auto手动改为实际值:输入变量改成105,输出变量改成106,和汇川侧完全对齐。改完以后,连接设置界面下方还有一个RPI刷新周期参数,默认值可能是10ms,如果现场PLC扫描周期在5ms左右,网络里还挂着HMI和其他设备,RPI设10ms会让CPU负担偏重。我一般会设在20到50ms之间,EIP对刷新周期其实并不敏感,慢一点不影响逻辑正确性,反而能降低网络丢包概率。通讯参数不是越快越好,稳定才是第一位的。

到这里,欧姆龙侧的主站配置也完成了。把工程同步到PLC并运行,两边的连接状态灯应该都能变绿。

4. 避坑排查:EIP链路五个高频现场与解决顺序

4.1 现象:AutoShop工具箱里找不到Generic_EtherNet_IP_device

现象:打开AutoShop工具箱,EtherNet/IP Device分类下只有一个空壳,或者只有几个老的通信设备,找不到Other Device里的通用EIP连接文件。

原因:AutoShop软件版本太旧。通用EIP设备文件是后期版本才集成的,早期版本只覆盖了MODBUS和部分串口协议,根本不含EtherNet/IP设备库。

解决:升级AutoShop到新版本,重新打开工程文件。升级前先把当前工程文件备份到本地,因为新版本打开旧工程时,网络配置部分有可能被重置。升级后再进入工具箱,Other Device节点就会出现这个通用连接文件。

4.2 现象:欧姆龙“全部注册”后变量列表空荡荡

现象:在EtherNet/IP连接设置界面点“全部注册”,输入变量和输出变量列表里什么都没有,或者只有一两个默认系统变量。

原因:全局变量表的“网络公开”选项没有修改,变量仍然是隐藏状态。Sysmac Studio只发布网络公开为“输入”或“输出”的变量,隐藏变量不会进入Tag表。

解决:回到全局变量表,把需要通讯的变量在网络公开列改为输入或输出,再回到连接设置界面重新点“全部注册”。改完以后如果列表还是空,检查一下变量类型是不是结构体,Sysmac Studio对结构体变量的发布需要先建立数据类型,类型没有编译同步也会导致检索不到。

4.3 现象:连接状态正常但数据全是0,两边监控都是初值

现象:欧姆龙和汇川两侧的连接状态都显示正常运行,EIP连接建立成功,但监控变量时发现数据一直是0,怎么强制写都没有反应。

原因:实例ID两边不一致。最常见的情况是欧姆龙侧实例ID保持Auto没有手动修改,Auto自动分配的号和汇川侧写死的105/106对不上;还有一种情况是输入输出方向注册反了,两边数据流没有对上。

解决:把两边实例ID列表拉出来横向对比,欧姆龙输入变量和汇川T->O必须同为106,欧姆龙输出变量和汇川O->T必须同为105。发现不一致就手动改,改完重新同步PLC,连接会自动重建。

4.4 现象:数据错位,值能读出来但位置偏了两个字节

现象:通讯正常,数据也刷新,但欧姆龙侧读到汇川送来的第2个变量,数值值域明显不对。比如汇川发的是0到100的整数,欧姆龙读出来却是几千几万,频率还很高,说明字节错位了。

原因:两端数据区成员排列顺序不一致,或者结构体里有BOOL成员导致编译器做了对齐填充。EIP按字节偏移解析数据,不校验变量名,偏移错一位,后面全部错位。

解决:先画一张字节偏移表,把汇川数据集变量顺序和欧姆龙结构体成员顺序逐行比对,确保类型和顺序完全一致。结构体里如果有BOOL,改成WORD或UINT重新编译,消除对齐填充的影响。修改后重新下载程序,数据就会回到正确位置。

4.5 现象:断电重启后连接恢复要十几秒,设备反复报警

现象:PLC断电重启后,EIP连接恢复时间很长,中间设备因为看门狗超时报警,生产节拍被打乱,甚至需要手动复位才能恢复。

原因:CIP连接重新建立需要经过ARP解析、TCP/UDP连接和Forward Open完整流程。如果程序中一运行就立刻读取EIP数据,此时连接还没建立,数据区是旧值或0,逻辑就会误判。

解决:在PLC程序中增加连接建立等待逻辑,启动后延时1到2秒再读取EIP数据区,或者监控连接状态寄存器,等状态变为RUN后再开放数据处理。同时把欧姆龙侧连接超时时间调大一点,我一般设成RPI的三到四倍,给网络偶发波动留出余量。

5. 验证技巧:强制赋值、心跳计数与链路健康度判断

5.1 强制赋值验证数据读写五步走

EIP通讯配置完,先不要急着写完整的业务逻辑,用强制赋值的方法把链路跑一遍,确认数据方向、偏移、实例ID全部正确,再开始写程序。这个验证流程我固定走五步:

第一步,欧姆龙侧进入在线模拟模式,找到输出变量(对应O->T方向),强制赋一个特殊值,比如十六进制5A5A,这个值不容易撞上现场正常数据。第二步,在汇川侧监控对应数据集里的变量,观察是否变成5A5A。如果变了,说明欧姆龙到汇川方向的实例ID、字节偏移都正确。第三步,反向操作,在汇川侧给T->O方向的发送变量强制写一个固定值,比如100。第四步,到欧姆龙侧看输入变量,确认读到100。第五步,把字节长度再对一遍,确认6和12不是拍脑袋填的,而是和两端结构体编译后的实际长度一致。

验证时还有个技巧:每次强制写一个值,就把这个值递增1,观察对端读到的数是否也跟着递增。这样能发现“值对但变化不稳定”的隐蔽问题,比如RPI刷新周期导致的跳变。

5.2 心跳计数:把掉线检测从分钟级提到秒级

两侧数据完全打通后,我习惯再往数据区里塞一个心跳计数器。具体做法是在汇川侧T->O方向的数据集末尾增加一个WORD变量,程序里每个扫描周期对它加1,然后把这个计数器一起发给欧姆龙。欧姆龙侧在程序里做判断:每次扫描比较计数器值是否变化,连续200毫秒没有变化,就判定链路异常,触发报警逻辑。

检测项判断条件报警延时
心跳计数器200ms内无递增200ms
连接状态位状态非RUN500ms
数据有效性特殊数值校验失败1s

相比单纯依赖EIP连接状态位,心跳计数能反映出“连接还挂着但数据不刷新”的中间状态。连接状态位只告诉你CIP连接是否存在,心跳却告诉你数据到底有没有在流动。这个技巧在后来的项目里帮我逮到过一次交换机端口松动导致的间歇性丢帧,连接状态一直是RUN,心跳却一个周期跳一个周期停,事后排查才发现是物理链路质量出了问题。

从那以后,我接跨品牌EIP项目时,都会先画一张字节映射表,把实例ID、字节长度、变量顺序全部写在纸上,再进软件操作。这个习惯帮我省掉了大量现场来回试错的时间,也把每次联调的未知数降到了最低。这套配置过程中的截图和映射表样例,都整理在配套的资源文档里了,照着一项项对就能配通,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询