1. 项目背景与通信需求解析
工业自动化领域长期存在不同品牌PLC之间数据互通的需求。西门子S7-200 SMART和三菱FX3U作为市场上两款主流的小型PLC,经常出现在同一个工厂的不同设备中。这次要实现的Modbus RTU通信,本质上是通过RS485物理层建立的经济型数据交换方案。
实际场景中,这种通信组合常见于以下情况:某条产线的主控采用西门子PLC,而配套的检测设备使用三菱PLC;或者老设备改造时,新增加的模块采用不同品牌。传统做法是通过硬接线传递信号,但面临布线复杂、扩展困难等问题。采用Modbus协议后,仅需两芯屏蔽双绞线就能实现多设备组网,成本可降低60%以上。
2. 硬件准备与接线规范
2.1 硬件选型要点
- 西门子S7-200 SMART:需确认CPU型号后缀带"ST"(如CPU ST30),这类本体集成RS485接口。若使用标准型号,需额外配置CM01信号板
- 三菱FX3U:必须搭配FX3U-485ADP-MB专用适配器(注意后缀MB表示Modbus版本)
- 通信线材:推荐使用AWG22规格的屏蔽双绞线,屏蔽层单端接地。我曾测试过普通网线,在30米以上距离时误码率明显升高
2.2 接线实操细节
plaintext复制西门子DB9引脚 —— 三菱接线端
3(B+/R+) —— SDA
8(A-/R-) —— SDB
外壳地 —— 屏蔽层(通过端子压接)
关键提示:务必在两端PLC的RS485接口上并联120Ω终端电阻。曾有个项目因忘记终端电阻,导致通信时好时坏,排查三天才发现问题。
3. 西门子侧参数配置
3.1 硬件组态设置
在STEP 7-Micro/WIN SMART中:
- 进入"系统块→通信端口"
- 设置波特率(建议19200)、偶校验、8数据位、1停止位
- 勾选"Modbus主站"选项
- 将系统块下载到PLC
3.2 主站程序编写
使用MBUS_CTRL指令初始化端口:
stl复制LD SM0.1
CALL MBUS_CTRL, SBR1
EN :=1, // 使能
Mode :=1, // 0=PPI 1=Modbus
Baud :=19200, // 波特率
Parity:=2, // 1=无校验 2=偶校验
Timeout:=1000, // 超时ms
Done :=M1.0, // 完成位
Error :=MB1 // 错误代码
MBUS_MSG指令配置示例(读取三菱的D100寄存器):
stl复制LD M0.0
EU
CALL MBUS_MSG, SBR2
EN :=1, // 使能
First :=1, // 首次扫描触发
Slave :=1, // 从站地址
RW :=0, // 0=读 1=写
Addr :=400101, // Modbus地址=400100+D100
Count :=2, // 读取2个字
DataPtr:=&VB100, // 存储到VB100开始区域
Done :=M1.1, // 完成位
Error :=MB2 // 错误代码
4. 三菱侧参数配置
4.1 特殊寄存器设置
通过GX Works2写入以下参数:
plaintext复制D8120 = H4086 // 波特率19200/偶校验/8数据位
D8121 = 1 // 本机站号
D8129 = 1000 // 超时时间(ms)
4.2 数据映射处理
三菱PLC需要特殊处理Modbus地址映射:
- 线圈(0x):对应M寄存器,地址=Modbus地址-1
- 输入(1x):无法直接访问,需通过程序中转
- 保持寄存器(4x):对应D寄存器,地址=Modbus地址-400001
示例程序(处理西门子写入D100的请求):
stl复制LD M8000 // 常ON
MOV D100 D8120 // 将D100数据映射到通信区
5. 通信调试实战技巧
5.1 诊断工具应用
推荐使用ModScan32(主站模拟)和ModSim32(从站模拟)进行分段测试。我曾遇到一个案例:先用ModSim模拟三菱PLC,确认西门子程序正常;再用ModScan测试三菱PLC,最终发现是波特率微调电容问题。
5.2 典型错误代码速查
| 错误码 | 含义 | 解决方案 |
|---|---|---|
| 3 | 从站无响应 | 检查接线/终端电阻/站号 |
| 4 | CRC校验错误 | 确认双方校验方式一致 |
| 5 | 从站否定应答 | 检查三菱的D8120设置 |
| 6 | 从站忙 | 增加超时时间 |
5.3 性能优化建议
- 轮询间隔设置:对于非关键数据,建议最小间隔200ms。实测在19200波特率下,单个读写命令耗时约15ms
- 数据打包策略:尽量合并读取(如一次性读10个连续寄存器而非分10次读)
- 错误处理机制:添加重试计数器,连续3次失败后触发报警
6. 高级应用扩展
6.1 多从站组网配置
当需要连接多个三菱PLC时:
- 设置各FX3U的D8121为不同站号(1-247)
- 西门子主站采用轮询方式访问
- 建议增加通信看门狗程序,监测各从站状态
6.2 数据格式转换
处理32位浮点数时需注意:
- 西门子使用高位在前格式
- 三菱使用低位在前格式
转换程序示例:
stl复制// 将西门子发来的VD100(浮点)转存到三菱D200
MOV VB100 D201 // 字节顺序调整
MOV VB101 D200
MOV VB102 D203
MOV VB103 D202
7. 维护与故障排查
建立系统时应预留以下诊断点:
- 通信错误计数器(VB区)
- 最后一次错误代码存储区
- 通信质量监测(如心跳包检测)
常见干扰解决方案:
- 在RS485线路两端并接100Ω电阻+0.1μF电容组成消扰电路
- 长距离传输时,每500米增加一个中继器
- 避免与变频器动力线平行走线,交叉时保持90度角