当欧姆龙NX1P遇上三菱FX5U:Modbus TCP硬核联机指南
欧姆龙NX1P与三菱FX5U modbus tcp通讯案例 MTCP库介绍 NJ/NX并不支持ModbusTCP协议库文件是在socket的基础上开发出来的功能块。 库文件共有10个功能块根据不同的功能块实现不同的modbusTCP的功能版本不一样有的库文件内的功能块数量只有6个。 10个功能块分别为客户端使用9个功能块客户端连接、读线圈、读输入寄存器、读保持寄存器、写单个线圈、写单个保持寄存器、写多寄存器服务器使用一个功能块。工业现场里想让不同品牌的PLC握手言和今天咱们就实操欧姆龙NX1P和三菱FX5U的Modbus TCP通讯。这俩设备原生都不支持Modbus TCP协议但欧姆龙的MTCP库硬是用Socket套接字搓出了完整功能手动狗头。先看装备清单欧姆龙NX1P客户端三菱FX5U服务器模式Sysmac Studio和GX Works3编程环境一根能让它们物理上牵手的网线核心武器——MTCP库欧姆龙家的MTCP库有10个功能块客户端独占9个服务器端就1个孤零零的守家。重点说说几个高频使用的// 客户端全家桶 MB_TCP_CLIENT_CONNECT // 建立连接 MB_TCP_READ_HOLD_REG // 读保持寄存器 MB_TCP_WRITE_MULTI_REG // 写多寄存器 MB_TCP_DISCONNECT // 断连连接实战代码先上连接功能块配置MB_TCP_CLIENT_CONNECT Instance : 连接实例名 Execute : 上升沿触发 ID : 连接ID填1 IPAddress1 : 192.168.1.10[0] //FX5U的IP首段 IPAddress2 : 192.168.1.10[1] //第二段类推... Port : 502 //Modbus默认端口 TimeOut : 3秒 //别设太短 Done : 连接成功标志 Busy : 通讯中标志 Error : 错误状态 ErrorID : 具体错误码这里有个坑IP地址要拆成四个UINT变量分别传入。比如192.168.1.10需要拆分成四个变量分别存储192、168、1、10用数组索引方式传递。数据搬运工操作读取FX5U保持寄存器的硬核操作MB_TCP_READ_HOLD_REG Instance : 读取实例 Execute : 执行信号 ID : 与连接ID对应 UnitID : 1默认从站号 StartAddr : 40001对应的0地址 //注意地址转换 Quantity : 读取字数 DataPtr : 数据存放地址 Done : 完成标志 Error : 错误信息重点提示三菱的保持寄存器地址是4xxxx但实际填入时要转换成从0开始的地址。比如要读40001地址这里填0就对了。调试翻车现场实录连不上设备先查物理层ping一下确认物理连接正常三菱侧需在参数设置中启用Modbus TCP服务器功能欧姆龙侧的端口号必须与三菱侧一致别用保留端口数据地址换算最容易翻车建议先用Modscan32测试性能优化黑科技读写操作建议间隔50ms以上多个读写操作需串行执行Busy信号做互锁重要数据建议双通道校验异常处理一定要做ErrorID会告诉你具体跪在哪了// 典型错误处理逻辑 IF Error THEN CASE ErrorID OF 16#0001: 记日志(超时错误) 16#0002: 记日志(连接ID冲突) 16#8002: 记日志(三菱侧拒绝连接) END_CASE MB_TCP_DISCONNECT(Force:TRUE) //强制断连 END_IF最后说个骚操作其实可以用MBTCPWRITEMULTIREG批量写入比单字写入效率提升50%以上。但要注意三菱侧最大支持120字/包别超限了。欧姆龙NX1P与三菱FX5U modbus tcp通讯案例 MTCP库介绍 NJ/NX并不支持ModbusTCP协议库文件是在socket的基础上开发出来的功能块。 库文件共有10个功能块根据不同的功能块实现不同的modbusTCP的功能版本不一样有的库文件内的功能块数量只有6个。 10个功能块分别为客户端使用9个功能块客户端连接、读线圈、读输入寄存器、读保持寄存器、写单个线圈、写单个保持寄存器、写多寄存器服务器使用一个功能块。搞定这些你的NX1P和FX5U就能愉快地玩耍了。下次遇到通讯问题记得先冷静点根烟多半是地址换算或者超时设置的问题别问我是怎么知道的。