:多从站管理与Modbus TCP以太网通讯)
本文承接上篇讲解多设备总线管理、Modbus TCP以太网通讯、故障冗余方案以及实际项目中常见踩坑点。适合想系统掌握三菱PLC Modbus通讯的开发者。一、温故知新上篇核心要点上篇讲解了Modbus RTU基础和单设备通讯以下内容需要读者已经掌握RS485硬件接线A/B-极性GX Works3串口Modbus RTU模式配置ADPRW指令读写寄存器通讯错误代码含义本篇在上篇基础上攻克两个更高阶的课题一台PLC同时管理多台Modbus从站设备从RS485升级到Modbus TCP以太网通讯二、多从站管理RS485总线实战2.1 为什么需要多从站工厂里往往有多台变频器同时运行一条传送带有3段独立调速 → 3台变频器中央空调系统有冷却泵、冷却塔风机、冷冻泵 → 至少3台污水处理需要多台搅拌器、曝气设备用一台PLC的RS485总线可以最多挂247个从站。2.2 总线拓扑与接线规范code复制┌─────────┐ ┌─────────────│ FX5U │─────────────┐ │ │ RS485 │ │ │ └─────────┘ │ │ │ ───┼─── A ──── A ──── A ──── A ──┼─── │ │ ───┼─── B- ──── B- ──── B- ──── B- ──┼─── │ │ │ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │ └────│VFD│───│VFD│───│VFD│───│VFD│───┘ │ #1│ │ #2│ │ #3│ │ #4│ └───┘ └───┘ └───┘ └───┘关键接线规范规范说明总线式连接所有设备并联在总线A/B-上终端电阻总线两端加120Ω终端电阻支线长度支线长度1米越短越好屏蔽接地单端接地主站端切勿两端接地线材选型推荐0.75mm²双绞屏蔽线2.3 多从站地址分配每台变频器必须设置唯一的通讯地址设备从站地址说明变频器#11主传送电机变频器#22副传送电机变频器#33搅拌电机温控仪#110加热区温控温控仪#211冷却区温控2.4 多从站轮询程序PLC按顺序逐个与各从站通讯这就是轮询Polling机制pascal复制// 多从站轮询程序结构化文本 ST PROGRAM Modbus_Polling VAR iStep : INT : 0; // 当前轮询步骤 tScan : TON; // 扫描定时器 rFreq1 : INT; // 变频器1频率 rFreq2 : INT; // 变频器2频率 rFreq3 : INT; // 变频器3频率 rTemp1 : INT; // 温控仪1温度 bSendOk : BOOL; // 发送完成标志 END_VAR // 轮询步骤分配每500ms切换一个从站 tScan(IN:TRUE, PT:T#500MS); IF tScan.Q THEN tScan(IN:FALSE); iStep : (iStep 1) MOD 5; // 5个设备循环 CASE iStep OF 0: // 读取变频器#1频率 ADPRW(K1, 1, H0003, H2100, 1, D100, M100); 1: // 读取变频器#2频率 ADPRW(K1, 2, H0003, H2100, 1, D110, M110); 2: // 读取变频器#3频率 ADPRW(K1, 3, H0003, H2100, 1, D120, M120); 3: // 读取温控仪#1温度 ADPRW(K1, 10, H0003, H1000, 1, D200, M130); 4: // 写入变频器#1频率设定 ADPRW(K1, 1, H0006, H1001, 1, D10, M140); END_CASE; END_IF; // 处理返回值按步骤对应存储 IF M100 THEN rFreq1 : D100; END_IF; // 变频器1完成 IF M110 THEN rFreq2 : D110; END_IF; // 变频器2完成 IF M130 THEN rTemp1 : D200; END_IF; // 温控仪1完成2.5 轮询时序图code复制时间轴 ─────────────────────────────────────────────────────► [ 0ms ] ── 发送 ──► [从站1响应] ── 500ms ──► [从站2响应] [500ms] ── 发送 ──► [从站2响应] ── 500ms ──► [从站3响应] [1000ms] ── 发送 ──► [从站3响应] ── 500ms ──► [从站4响应] [1500ms] ── 发送 ──► [温控仪1] ── 500ms ──► [返回步骤0] 扫描周期 设备数量 × 单次通讯时间 ≈ 5 × 500ms 2.5s三、Modbus TCP以太网通讯配置3.1 为什么升级到Modbus TCP当设备分散在不同位置或者数据量较大时RS485的局限性显现对比项Modbus RTUModbus TCP通讯速率最高115200bps100Mbps提升800倍设备数量247台无限制受IP网络限制通讯距离1200米全球依赖网络布线成本专用通讯线复用工厂局域网实时性较低高适合升级Modbus TCP的场景设备分散在不同车间需要与SCADA系统对接数据量大多寄存器批量读取需要远程监控和调试3.2 FX5U以太网配置GX Works3 → 参数 → FX5UCPU → 模块参数 → 以太网端口设置IP地址参数设定值说明IP地址192.168.1.100PLC的IP地址子网掩码255.255.255.0局域网网段默认网关192.168.1.1路由器地址启用Modbus TCP服务器参数设定值协议选择Modbus TCP连接模式Active主动模式连接对象数43.3 Modbus TCP通讯帧结构Modbus TCP在以太网TCP/IP协议栈上运行帧结构如下code复制TCP头部(6B) Modbus应用数据单元(MBAP) ┌──────────┬──────────────┬────────────┬──────────────┐ │ 事务ID │ 协议ID0 │ 长度(2B) │ 单元ID(从站) │ │ (2B) │ (2B) │ │ (1B) │ └──────────┴──────────────┴────────────┴──────────────┘读取1号变频器H2100的频率值以太网code复制发送帧 00 01 00 00 00 06 01 03 21 00 00 01 └──TCP头──┘ 单元 功能码 地址 数量 接收帧 00 01 00 00 00 05 01 03 02 12 34 └──TCP头──┘ 单元 功能码 数据3.4 GX Works3 Modbus TCP指令三菱FX5U使用SP.SOCOPEN / SP.SOCRECV / SP.SOCSEND进行TCP通讯pascal复制// Modbus TCP通讯程序 PROGRAM ModbusTCP_Client VAR socket : INT : -1; // Socket编号 txBuf : ARRAY[0..15] OF BYTE; // 发送缓冲区 rxBuf : ARRAY[0..15] OF BYTE; // 接收缓冲区 iLen : INT; bConn : BOOL : FALSE; END_VAR // Step 1: 建立TCP连接目标192.168.1.10端口502 IF NOT bConn THEN socket : SP.SOCOPEN(1, 192.168.1.10, 502); IF socket 0 THEN bConn : TRUE; END_IF; END_IF; // Step 2: 构建Modbus TCP读取请求读取H21001字 IF bConn THEN txBuf[0] : 16#00; txBuf[1] : 16#01; // 事务ID txBuf[2] : 16#00; txBuf[3] : 16#00; // 协议ID txBuf[4] : 16#00; txBuf[5] : 16#06; // 长度6 txBuf[6] : 16#01; // 从站地址1 txBuf[7] : 16#03; // 功能码读 txBuf[8] : 16#21; txBuf[9] : 16#00; // H2100 txBuf[10]: 16#00; txBuf[11]: 16#01; // 数量1 iLen : 12; // 发送请求 SP.SOCSEND(socket, txBuf, iLen); // 接收响应 SP.SOCRECV(socket, rxBuf, iLen); // 解析数据rxBuf[9]*256 rxBuf[10] 频率值 D100 : TO_INT(rxBuf[9]) * 256 TO_INT(rxBuf[10]); END_IF;四、实战案例PLC 多变频器 HMI监控系统4.1 系统架构code复制┌─────────────┐ Ethernet ┌─────────────┐ │ GX Works3 │───────────────────│ FX5U CPU │ │ (编程) │ Modbus TCP │ │ └─────────────┘ └──────┬──────┘ │ RS485 总线 │ ┌──────────────────────────────┼────────────────┐ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │变频器#1 │ │变频器#2 │ │变频器#3 │ │ 地址1 │ │ 地址2 │ │ 地址3 │ │ 7.5kW │ │ 5.5kW │ │ 3.7kW │ └─────────┘ └─────────┘ └─────────┘4.2 HMI触摸屏配置以威纶通MT8103iE为例HMI作为Modbus TCP客户端连接PLCHMI设置项设定值PLC类型Modbus TCP/IPIP地址192.168.1.100端口502通讯超时3000ms读取PLC数据地址映射HMI地址对应PLC说明4x0001D1变频器1频率设定4x0002D2变频器2频率设定4x0003D3变频器3频率设定4x0101D101变频器1当前频率4x0102D102变频器2当前频率4.3 完整程序多变频器协同控制pascal复制// 多变频器协同控制程序ST PROGRAM MultiVFD_Control VAR // 频率设定值由HMI写入 wFreqSet1 : INT : 3000; // 变频器130.00Hz wFreqSet2 : INT : 2500; // 变频器225.00Hz wFreqSet3 : INT : 2000; // 变频器320.00Hz // 实际反馈值 wFreqAct1 : INT; wFreqAct2 : INT; wFreqAct3 : INT; // 运行状态 atRun1, atRun2, atRun3 : BOOL; // 轮询步骤 iStep : INT : 0; tPoll : TON; END_VAR // 轮询调度每300ms处理一个从站 tPoll(IN:TRUE, PT:T#300MS); IF tPoll.Q THEN tPoll(IN:FALSE); iStep : (iStep 1) MOD 8; // 8个操作循环 CASE iStep OF 0: ADPRW(K1, 1, H0006, H1001, 1, wFreqSet1, M1); // 写变频器1频率 1: ADPRW(K1, 2, H0006, H1001, 1, wFreqSet2, M2); // 写变频器2频率 2: ADPRW(K1, 3, H0006, H1001, 1, wFreqSet3, M3); // 写变频器3频率 3: ADPRW(K1, 1, H0003, H2100, 1, wFreqAct1, M4); // 读变频器1频率 4: ADPRW(K1, 2, H0003, H2100, 1, wFreqAct2, M5); // 读变频器2频率 5: ADPRW(K1, 3, H0003, H2100, 1, wFreqAct3, M6); // 读变频器3频率 6: ADPRW(K1, 1, H0003, H2102, 1, D10, M7); // 读变频器1电流 7: ADPRW(K1, 2, H0003, H2102, 1, D11, M8); // 读变频器2电流 END_CASE; END_IF; // 频率自动同步补偿机械惯性 // 当设定值与实际值偏差5Hz时分步调整防止冲击 IF ABS(wFreqSet1 - wFreqAct1) 500 THEN wFreqAct1 : wFreqAct1 SIGN(wFreqSet1 - wFreqAct1) * 100; ADPRW(K1, 1, H0006, H1001, 1, wFreqAct1, M1); END_IF;五、常见踩坑与解决方案坑1波特率不一致通讯全挂症状PLC能发变频器不回所有设备都无响应。排查powershell复制# 用串口调试助手直连变频器测试 # 如果PC直连变频器能通讯说明是PLC侧问题 # 检查项 # 1. PLC侧波特率是否一致变频器常见9600/19200PLC默认可能不同 # 2. 变频器P14.01参数是否匹配 # 3. 数据位/校验/停止位是否完全一致坑2RS485总线终端电阻没加症状距离超过50米后数据开始随机丢包。解决在总线两端PLC端和最后一台设备端各加一个120Ω终端电阻。code复制PLC端 ────[120Ω]─── 总线主线 ────[120Ω]─── 最后一台设备坑3从站地址重复症状读取地址2的设备返回的却是地址1的数据。解决逐台检查变频器P14.00或对应通讯地址参数确保不重复。坑4Modbus TCP端口被防火墙拦截症状本地测试正常远程连不上。解决防火墙开放502端口Modbus TCP标准端口确认PLC以太网模块固件版本支持Modbus TCP检查路由器/交换机的VLAN设置坑5寄存器地址写错症状PLC写入后变频器没反应或者行为异常。注意不同品牌的Modbus寄存器地址映射不同汇川MD580频率设定H1001运行频率H2100三菱E800频率设定H0001运行频率H0002台达VFD-B频率设定H2001运行频率H2101一定要查对应设备的Modbus寄存器映射表六、总结与进阶方向本系列核心收获技能点掌握情况Modbus RTU/TCP协议原理✅FX5U RS485/以太网配置✅ADPRW指令读写寄存器✅多从站轮询程序✅常见故障排查方法✅PLCHMI数据联动✅进阶学习方向SCADA系统对接用Modbus TCP接入组态王/WinCC数据采集与边缘计算PLC Python/MQTT 云端工业机器人通讯Modbus TCP控制ABB/安川机器人EtherCAT/PROFINET高速运动控制总线感谢阅读。上篇《三菱PLC与Modbus通讯实战上环境配置与基础通讯》如果觉得有帮助欢迎收藏、点赞。有工控项目经验想交流的欢迎在评论区留言。