首页 / 资讯中心 / 文章详情

汇川H5U与欧姆龙NX1P2的EtherNet/IP通讯配置与排障指南

汇川H5U与欧姆龙NX1P2的EtherNet/IP通讯配置与排障指南 ★ FEATURED ARTICLE
简介汇川小型PLC与欧姆龙PLC通过EtherNet/IP协议进行通讯的完整配置案例适合工业自动化现场工程师、PLC编程与调试人员快速上手跨品牌组网。资源为1个PDF文件大小约846KB内容以图文步骤形式呈现无需安装额外环境即可阅读。文档先从汇川侧入手介绍在AutoShop中调用Generic EtherNet IP Device、配置从站IP地址、修改组合消耗与生产实例ID如105/106、设置传输字节数与心跳转换格式并添加所需变量再转向欧姆龙侧说明在Sysmac Studio中建立结构体变量、在全局变量表设置网络公开选项通过EtherNet/IP连接设置注册输入输出变量手动指定实例ID后验证数据读写。已有644人学习该资源通过这份案例可系统了解两种品牌PLC在EIP通讯中的关键配置差异与对应关系快速应用到实际项目中。1. 汇川小型PLC与欧姆龙EIP通讯为什么值得搭这条链路做设备改造的老工程师都清楚柜子里同时躺着两个不同品牌的PLC是常事产线上老设备用欧姆龙新上的工位为了成本或供货周期选了汇川小型PLC。两边要交换状态、启停命令和工艺参数最快最稳的路子就是走EtherNet/IP以下简称EIP通讯而不是加一堆中间继电器或改模拟量接线。EIP是工业以太网里比较“高级”的协议理论上不需要知道对方内部的寄存器表只要在两侧把“标签”对上就能点对点交换数据。但真到现场联调时IP规划、Scanner/Adapter角色、字节序、RPI这些参数会把人折腾一遍。这篇文章就用一个汇川小型PLC以H5U系列为例和欧姆龙PLC以NX1P2为例做EIP通讯的案例从协议原理、两侧参数配置到抓包验证把能抄作业的步骤和常见翻车点都拆开讲。2. EIP通讯原理与硬件选型搞清楚Scanner和Adapter各做什么2.1 EIP的协议栈CIP over Ethernet与隐式/显式报文EIP的全称是EtherNet/IP由ODVA推进核心是把PLC的“数据表”抽象成一个个CIP对象再通过标准以太网帧传输。它分为两种数据通道显式报文Explicit Message走TCP 44818端口用于读写参数、诊断这类非周期性信息隐式报文Implicit Message走UDP 2222端口用于周期性I/O数据交换实时性高、报文格式紧凑。我们平常说的“EIP通讯正常”多数情况下指的正是UDP 2222端口上那一路周期性IO连接。隐式报文的两个角色常被叫混。Scanner扫描器/主站是主动发起连接的一方设定刷新周期RPIRequested Packet Interval按固定节奏发送和接收数据Adapter适配器/从站则被动响应只监听网络上的连接请求按Scanner设置的RPI把本地数据打包发回去。因此你在汇川小型PLC侧看到的“EIP连接配置”本质是建立一个Scanner类型的连接指定对端IP和IO大小而在欧姆龙侧要做的不是去“连接汇川”而是“允许哪个Scanner连进来给本地数据预留多少空间”。这两个方向如果搞反通讯逻辑就会一直卡在握手阶段。2.2 为什么要选EIP而不是Modbus TCP很多人的第一反应是两个PLC都支持Modbus TCP用那个不是更简单确实Modbus TCP上手容易但它建立在“寄存器地址”上汇川侧要把欧姆龙的数据地址背熟欧姆龙侧还得手工维护一张地址映射表一旦程序版本更新地址对不上就是一场排查灾难。EIP则不相同它以“标签/变量”为通讯对象欧姆龙侧定义一个符号变量汇川侧直接用这个符号变量名做映射程序结构清晰得多。从刷新速度来看EIP隐式报文可以做到毫秒级周期性交换而且报文里自带连接ID和序列号链路异常能快速被两端PLC识别。Modbus TCP虽然也可以轮询到毫秒级但要靠主站程序自己编排数据一致性不如EIP的“定时快照”机制。对于需要频繁交换几十个字的现场EIP的体验更接近“一根虚拟网线直通对方内存区”。2.3 设备选型与准备工作清单先看汇川侧。小型PLC里带内置EtherNet/IP扫描器功能的主要是H5U系列它可以在AutoShop软件里做EIP连接配置不需要额外加通讯模块。如果手上是H3U这类偏Modbus TCP定位的型号就要加EIP网关或换H5U别指望固件升级能补上这个缺口。欧姆龙侧建议选内置EIP端口的型号比如NX1P2、CJ2M或者NJ系列。以NX1P2为例它自带双以太网口其中一个口可以独立配置为EIP Adapter不占用CPU上的串口资源也不会和上位机通讯冲突。工具和硬件方面汇川侧安装AutoShop欧姆龙侧装Sysmac StudioNX系列或CX-OneCJ系列。网络连接上最简单的办法是把两台PLC用一个工业交换机连起来交换机支持IGMP Snooping更佳因为EIP隐式报文会涉及组播。IP规划不要随意尽量避开DHCP自动分配固定成两段独立地址例如汇川192.168.1.10欧姆龙192.168.1.20子网掩码255.255.255.0。下面是一个典型的IP和通讯规划表照着填就能省掉不少事项目汇川H5U欧姆龙NX1P2IP地址192.168.1.10192.168.1.20子网掩码255.255.255.0255.255.255.0通讯角色Scanner主站Adapter从站EIP端口UDP 2222 / TCP 44818UDP 2222 / TCP 44818RPI建议值100ms调试期100ms由主站设置数据方向输入区欧姆龙 → 汇川输出区汇川 → 欧姆龙3. 汇川小型PLC侧EIP参数配置从IP规划到数据映射3.1 AutoShop工程中的EIP扫描器配置入口打开AutoShop新建工程型号选择H5U后左侧项目树里会有一个“EtherNet/IP”配置节点。双击进去首先要使能“EIP Scanner功能”再把PLC本机IP地址填好。这里有个细节在AutoShop里设置的IP地址会下载到PLC的以太网参数区如果你之前用了BOOTP或DHCP务必先把“自动获取IP”关掉否则下载完程序PLC会去抢一个和规划表不一致的IP。接下来是创建连接。点击“添加连接”目标IP填欧姆龙的192.168.1.20。你会看到“输入连接大小”和“输出连接大小”两个参数——这里的“输入”指的是从欧姆龙读进汇川的方向“输出”是汇川写给欧姆龙的方向与物理网口的收发方向无关。新手最容易在这把方向弄反结果就是两边都通但数据全是零。每个连接还要填“RPI”也就是隐式报文的刷新周期。调试初期建议设100ms稳定后再往下压到20ms或10ms避免一开始就因为报文太密导致交换机堵塞。配置完连接后AutoShop会自动为这个连接分配一组内部映射地址通常命名为EIP_Input_0和EIP_Output_0每个都是数组形式。这个映射区就是汇川CPU和EIP协议栈之间的数据中转站你的程序通过读写这些数组变量就能拿到欧姆龙发来的数据和把数据发给欧姆龙。3.2 输入输出缓冲区的长度与字节序设置输入/输出连接大小以“字节”为单位常见设置是32字节或64字节。建议两边的长度严格一致假设你只交换16个字的数据那每一侧就都填32字节。如果汇川填了32字节欧姆龙侧只配置了16字节连接大概率建立不起来反过来的话多出来的字节会被填充成随机值程序里读到会很迷糊。字节序是EIP联调的第一个大坑。EtherNet/IP协议本身规定数据在网络上传输时按大端序Big-Endian也就是高位字节在前。但汇川H5U的CPU内部寄存器按小端序处理数据欧姆龙NX系列的内部变量默认也按小端序排列。这就导致你在欧姆龙里往变量里赋一个16#1234汇川这边读到的可能是16#3412。AutoShop的EIP配置节点里有一个“字节交换”选项把它打开可以解决16位数据的字节逆序问题。如果是32位浮点数还要再核对一次必要时在程序里单独做位交换处理。下面是一个典型的ST代码块把EIP输入区里的数据同步到D区同时把D区另一段数据放到输出区// 汇川H5UAutoShop, ST语言 // 将EIP输入区数据复制到D100~D115 // 将D200~D215的数据放入EIP输出区 VAR i : INT; END_VAR FOR i : 0 TO 15 BY 1 DO %MW100[i] : EIP_Input_0[i]; // 从欧姆龙收到的数据 EIP_Output_0[i] : %MW200[i]; // 要发给欧姆龙的数据 END_FOR;代码逻辑非常直白EIP_Input_0和EIP_Output_0是AutoShop根据连接配置自动生成的数组变量每个元素是16位字。FOR循环把输入区16个字搬到D100起把D200起的16个字放上输出区的发送队列。参数说明循环次数16由连接大小除以2得到如果你连接配置的是64字节这里就应该是0到31。D区地址可以随意改但要注意别和系统保留区冲突。3.3 理解连接状态字与运行/停止联动H5U的EIP配置页里有一个“运行状态连接”选项建议在调试初期保持默认的“始终连接”。如果选了“仅在运行状态连接”PLC处于编程状态时EIP链路会自动断开欧姆龙那边可能会因为通讯超时报错容易误判成硬件故障。等程序完全调好、确认上电即运行后再根据应用需要决定是否切换。另外AutoShop会为每个连接生成一个状态字例如EIP_Status_0里面记录了连接当前状态、丢帧计数、最后一次错误码。程序里加一段监控逻辑把状态字里连接建立的那一位映射到一个内部线圈作为“通讯正常”标志给触摸屏显示。这样即使他人不在现场看HMI页面就能判断链路是否健康不用反复去翻软件诊断页。3.4 常见误设连接数量与目标端口H5U支持的EIP Scanner连接数量不是无限的小型PLC通常并发连接数在8个以内。别一次性创建十几条连接去连不同设备会直接导致后面的连接建立失败。如果现场有多台欧姆龙PLC要通讯优先做“网关转发”而不是一台汇川拖一堆从站——用一条连接连到欧姆龙的路由器或触摸屏再分发数据。目标端口默认是44818注意EIP隐式I/O不使用TCPUDP端口固定是2222虽然部分软件里会让你填端口号但一般保持默认即可。不要因为防火墙原因去改这个端口两端都改还不行会直接让Scanner找不到Adapter。4. 欧姆龙侧EIP从站配置标签连接与数据区映射4.1 在Sysmac Studio中启动EIP Adapter服务欧姆龙NX1P2使用Sysmac Studio进行配置。新建工程后双击“EtherNet/IP”节点把PLC的本机IP地址设置为192.168.1.20。默认情况下NX1P2的EIP服务是关闭的必须手动启用否则汇川扫描器发过来的连接请求根本没人应答。启用后PCB设置里会有“TCP/IP”和“EtherNet/IP”两个子项前者管普通以太网通讯后者管CIP通讯两者都是开着的并不冲突。接下来要处理“是否限制连接来源IP”。如果不确定客户端IP就选“接受所有IP地址的Scanner连接”省得误拦截。出于安全考虑也可以指定汇川的IP 192.168.1.10为允许连接对象。这里有个隐含问题欧姆龙侧一旦限定了来源IP要是汇川侧用了多网卡或者换了个IP链路马上断排错时容易被表象迷惑。4.2 定义要交换的数据变量欧姆龙侧不需要像传统PLC那样手工去写“EIP接收区地址”Sysmac Studio支持直接把全局变量暴露给EIP。你在全局变量表里新建两个数组变量例如RECV_DATA_USR[0..15]和SEND_DATA_USR[0..15]然后在EIP配置里把它们分别映射为Adapter的“输入缓冲区”汇川写入方向和“输出缓冲区”汇川读取方向。这样欧姆龙程序里正常读写这些变量EIP协议栈会自动帮你打包到网络上不需要额外的数据搬移指令。下面这段ST代码展示了欧姆龙侧如何处理接收和发送的数据// 欧姆龙NX1P2Sysmac Studio, ST语言 // 假设已配置变量: FROM_HUICHUAN : WORD[16]; TO_HUICHUAN : WORD[16]; // FROM_HUICHUAN 存放汇川发过来的数据TO_HUICHUAN 存放要发给汇川的数据 FOR i : 0 TO 15 DO // 把汇川下发的命令字转存到欧姆龙程序内部数组 Command_From_Huichuan[i] : FROM_HUICHUAN[i]; END_FOR; FOR i : 0 TO 15 DO // 把欧姆龙状态数据放入EIP发送缓冲区 TO_HUICHUAN[i] : Status_To_Huichuan[i]; END_FOR;这段代码的作用是隔离EIP缓冲区和业务程序FROM_HUICHUAN和TO_HUICHUAN是Sysmac Studio生成的EIP接口变量每周期由协议栈刷新Command_From_Huichuan和Status_To_Huichuan是业务程序真正使用的数组。不建议直接拿EIP接口变量当业务变量用因为没有中间层后期改程序时容易误动通讯配置。参数方面数组长度16对应汇川侧的32字节连接两侧保持一致。4.3 IO连接实例与CIP Assembly映射如果用了CX-Programmer而不是Sysmac Studio需要到“Network Configurator”里查看IO连接实例。欧姆龙做Adapter时每个连接会对应一个Assembly Object实例输入/输出数据对应不同实例号。汇川Scanner创建连接时会把目标实例作为握手参数发过来常见默认值是输入实例101、输出实例100这是CIP标准里推荐的值。如果两边用的第三方软件不一致可能要把实例号改成一致才能连上。遇到连接建立失败时先在欧姆龙侧看“Active Connection”列表里有没有汇川的条目没有就说明Scanner的连接请求根本没到达Adapter。4.4 不要忽视欧姆龙侧的数据一致性EIP缓冲区刷新周期由Scanner的RPI决定比如100ms刷新一次欧姆龙程序里读写这些变量时要考虑数据快照的“原子性”。如果汇川一次写了32字节欧姆龙程序恰好在写入中间读取可能读到前半段新数据、后半段旧数据。处理办法有两种一种是在欧姆龙侧先把EIP缓冲区拷到另一组变量再用这一组变量做业务判断另一种是让汇川在数据里放一个“批次号”字段欧姆龙先读批次号发现变化再取整个数组。第二种更可靠因为它在应用层保证了数据同步不依赖通讯底层。5. 联调避坑与排查EIP通讯失败的常见坑5.1 避坑一连接闪断状态在“Established”和“None”之间跳变现象汇川AutoShop的EIP监控页里连接状态一会儿是绿色“已建立”一会儿变成“无连接”欧姆龙侧也同步出现报警有时还会伴随“Connection timeout”错误。原因之一RPI设置太短比如设了5ms或10ms而工业交换机的转发延时和数据量导致报文无法在这个间隔内稳定到达Scanner认为链路超时主动断开连接。原因之二欧姆龙侧已经达到Adapter最大连接数限制新连接挤掉旧连接尤其调试时需要反复上下载程序连接资源没有及时释放。解决先把RPI放宽到100ms验证链路稳定性确定没问题再慢慢收紧到20ms。检查欧姆龙Sysmac Studio里“连接数量使用情况”把不用的调试连接全部关掉。如果现场允许把交换机的端口速率和双工模式强制为100M Full而不是自动协商减少握手时间。5.2 避坑二数据通了但数值高16位和低16位对调现象欧姆龙侧变量值为16#1234汇川侧读到16#3412或者浮点数读出来完全离谱比如1.0变成1.889E-38。原因EIP网络层按大端序传输但汇川H5U内部寄存器按小端序访问欧姆龙NX系列虽然CPU内部也是小端但变量定义方式和网络缓冲区的解析方式不同导致16位数据高低字节颠倒。如果是32位浮点数还涉及4个字节的排列组合问题更加隐蔽。解决汇川AutoShop的EIP连接配置里打开“字节交换”选项通常可以解决16位字数据。如果是浮点数建议在汇川侧做一次字节顺序交换后再解析。下面是一段在欧姆龙侧做字节交换的ST示例可以单独放在一个循环里用于测试// 欧姆龙侧将接收到的16位数据交换字节序 // 适用于未在EIP配置中启用自动交换的场景 FOR i : 0 TO 15 DO Temp[i] : (FROM_HUICHUAN[i] AND 16#00FF) * 16#0100 OR ((FROM_HUICHUAN[i] AND 16#FF00) / 16#0100) Command_From_Huichuan[i] : Temp[i]; END_FOR;不过更推荐的做法是直接在两侧配置里打开交换功能程序里的交换逻辑越多后期维护越痛苦。现场调试时先用一个固定值比如16#5A5A做测试从源端写、目标端读确认字节序无误再接正式数据。5.3 避坑三断电重启后连接断必须重新上下载程序才恢复现象调试时一切正常断电再上电后汇川显示EIP连接失败欧姆龙侧也没有收到连接请求。用手动触发一次“上电初始化”或者重传配置又能恢复。原因欧姆龙PLC上电启动比汇川慢。汇川Scanner作为主站上电后立刻发起EIP连接请求而此时欧姆龙CPU还在初始化阶段EIP服务没有就绪请求被丢弃。Scanner不会无限制重试重试次数耗尽后状态变成故障需要程序干预才能重新连接。解决在汇川侧程序中加入通电延时逻辑延时510秒后再让EIP连接参与工作。具体方法是把连接配置里的“始终连接”改为“由程序控制连接”用定时器控制一个线圈线圈ON才启动连接。欧姆龙侧则检查PLC电源的启动顺序尽量让欧姆龙先上电汇川后上电或者加一个小的断电延时继电器。这条看起来是电气问题但往往是被当成通讯问题排了半天才发现根因。5.4 避坑四偶发数据丢帧但网口指示灯全正常现象EIP链路没有断开但数据偶尔会“卡住”几秒钟不刷新触摸屏上的数值停留不动。查看交换机端口统计发现CRC错误包或丢包计数在缓慢增长。原因工业网络中广播报文过多比如其他设备在发DHCP请求、SNMP轮询或者NetBIOS广播。EIP隐式报文大概率会使用组播地址交换机如果不做IGMP Snooping这些组播报文会被当成广播转发到所有端口占用了有效带宽导致周期报文偶发丢帧。解决换用支持IGMP Snooping的工业交换机并在交换机上开启IGMP查询功能。如果条件不允许至少把汇川和欧姆龙用一根网线直连跳过交换机做验证确认是网络环境问题而不是PLC配置问题。直连测试通过、过交换机就丢包基本可以断定要把目光转移到交换机配置上。6. 验证技巧用诊断对象和Wireshark确认EIP链路稳定联调暂时跑通不算完我习惯在现场多留一步验证手段防止过两周用户打电话过来说“数据不动了”。最常见的验证就是在应用层加一个“心跳”让欧姆龙每周期递增一个计数器汇川这边判断计数器是否在变化。下面这段ST代码可以放在汇川H5U的周期性任务里// 通讯心跳检测欧姆龙侧每周期将Heartbeat加1写入EIP输出区 // 此处读取汇川EIP输入区的第0个字做比较 IF EIP_Input_0[0] Last_Heartbeat THEN Last_Heartbeat : EIP_Input_0[0]; Link_OK : TRUE; Drop_Count : 0; ELSE Drop_Count : Drop_Count 1; IF Drop_Count 10 THEN Link_OK : FALSE; // 连续10个扫描周期没更新判定断链 END_IF; END_IF;把Link_OK这个布尔量接到触摸屏的报警画面里就能及时感知通讯异常。这个习惯帮我排查过很多“看似通讯正常但数据不刷新”的隐性故障比单纯看EIP状态字要可靠得多——因为状态字有时候在偶发丢帧时不会立刻翻转而心跳计数器能直观反映每一次周期性刷新是否到位。进阶一点的验证是用Wireshark抓包。把电脑网卡接到汇川或欧姆龙所在的交换机上设置好镜像端口然后用显示过滤器锁定EIP隐式报文udp.port 2222 ip.addr 192.168.1.10 ip.addr 192.168.1.20。正常能看到固定间隔的周期报文间隔与RPI基本一致。如果发现报文间隔明显抖动或者出现TCP重传就去查网络拥塞和交换机配置。这个环节不需要改PLC程序是纯外部诊断现场排错时最优先做。调试到现在这类场景我已经不太信“多试几次就好”的运气流。EIP通讯只要角色分配清楚、IP规划固定、RPI和字节序两边对齐剩下的都是纯工程细节。每次做完项目我都会在程序里留一个心跳和一个诊断寄存器方便后续售后远程看问题。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站