以两台 S7-200 PLC 构建 MODBUS 通信网络,将主站的 I0.0 信号传递给从站,控制从站的 Q0.0 输出,核心是通过 MODBUS RTU 协议完成主从站之间的数字量信号传输。以下是详细的实现步骤,包括硬件配置、参数设置、程序编写和故障排查。
一、前期准备与硬件配置
1. 硬件清单(核心组件)
2. 硬件接线(关键:RS485 通讯连接)
S7-200 的 CPU 自带的 RS485 通讯口为PORT 0,引脚定义如下:
| 引脚号 | 功能 | 标识 |
|---|---|---|
| 3 | RS485+ | A/RD+ |
| 8 | RS485- | B/TD- |
接线方式:
3. 通讯参数约定(主从站必须一致)
二、核心原理:MODBUS RTU 数据传输逻辑
三、程序编写(分主站和从站)
1. 地址与变量定义(统一约定)
| 设备 | 变量 / 寄存器 | 功能说明 |
|---|---|---|
| 主站 | I0.0 | 控制信号输入(启动 / 停止) |
| 主站 | VW100 | 存储 I0.0 的状态(0 或 1) |
| 从站 | VW100 | 接收主站写入的状态(对应 40001 寄存器) |
| 从站 | Q0.0 | 受控输出端 |
| 通用 | 从站地址:2 | MODBUS 从站地址(主站为 1) |
| 通用 | 通讯端口:PORT 0 | S7-200 的默认通讯口 |
2. 主站程序编写(MODBUS 主站,发送控制信号)
主站需要完成:初始化通讯参数 → 读取 I0.0 状态 → 通过 MODBUS 写入从站寄存器。
ladder
// 网络1:PLC上电初始化通讯参数(波特率9600,偶校验,PORT 0) LD SM0.1 // 上电首次扫描脉冲 MOVB 16#0D, SMB30 // SMB30:PORT 0通讯参数配置 // 16#0D = 00001101 → 波特率9600,8位数据,偶校验,1位停止位 MOVB 1, SMB31 // 主站地址设为1(可省略,默认1) // 启用MODBUS主站模式(S7-200的MODBUS主站指令需要先初始化) CALL MBUS_INIT, 0, 1, 9600, 0, 1, M0.0, M0.1 // MBUS_INIT参数说明: // 0:PORT 0;1:主站模式;9600:波特率;0:偶校验; // 1:1位停止位;M0.0:初始化完成标志;M0.1:初始化错误标志 // 网络2:读取I0.0的状态,存储到VW100 LD SM0.0 // 始终扫描 MOVB I0.0, VB100 // 将I0.0的BOOL状态转为字节存储到VB100(VW100的低字节) MOVB 0, VB101 // VW100的高字节置0,确保VW100的值为0或1 // 网络3:通过MODBUS主站指令,将VW100写入从站(地址2)的40001寄存器(对应从站VW100) LD SM0.0 CALL MBUS_WR, 2, 3, 1, &VB100, 1, M0.2, M0.3 // MBUS_WR参数说明: // 2:从站地址;3:寄存器类型(3=保持寄存器4xxxx); // 1:起始寄存器地址(40001,注意:S7-200的MODBUS地址偏移为0,所以写1对应40001); // &VB100:主站要发送的数据地址;1:写入的寄存器数量; // M0.2:写入完成标志;M0.3:写入错误标志
关键参数解释:
3. 从站程序编写(MODBUS 从站,接收信号并输出)
从站需要完成:初始化通讯参数 → 启用 MODBUS 从站模式 → 读取寄存器状态,控制 Q0.0。
ladder
// 网络1:PLC上电初始化通讯参数(与主站一致) LD SM0.1 // 上电首次扫描脉冲 MOVB 16#0D, SMB30 // PORT 0:9600波特率,偶校验,8位数据,1位停止位 MOVB 2, SMB31 // 从站地址设为2(必须与主站的从站地址一致) // 网络2:启用MODBUS从站模式(S7-200的MODBUS从站需要映射寄存器) CALL MBUS_SLAVE, 0, 1, 1, 0, M0.0, M0.1 // MBUS_SLAVE参数说明: // 0:PORT 0;1:从站地址(2,这里参数是偏移?不,S7-200的MBUS_SLAVE的第二个参数是“起始地址偏移”,实际从站地址由SMB31设置) // 简化理解:该指令启用PORT 0的MODBUS从站功能,映射保持寄存器4xxxx到V区(默认VW0对应40001) // M0.0:从站初始化完成;M0.1:从站错误标志 // 网络3:读取VW100的状态,控制Q0.0输出 LD SM0.0 LDB= VB100, 1 // 判断VW100的低字节是否为1(主站I0.0为ON) = Q0.0 // 若为1,Q0.0置ON;否则置OFF
关键说明:
四、触摸屏 / 编程软件配置要点
五、常见故障排查
| 故障现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 从站 Q0.0 无反应 | 1. 通讯线接反(A/B 交叉)2. 通讯参数不一致3. 从站地址错误4. MODBUS 指令参数错误 | 1. 调换从站的 A/B 引脚接线;2. 核对主从站的 SMB30 配置(波特率、校验位);3. 检查从站 SMB31 是否设为 2;4. 核对 MBUS_WR 的从站地址和寄存器地址 |
| 通讯时断时续 | 1. 通讯线屏蔽层未接地2. 无终端电阻(长距离)3. 现场干扰大 | 1. 将通讯线屏蔽层单端接地(主站端);2. 加装 120Ω 终端电阻;3. 更换屏蔽性能更好的 Profibus 电缆 |
| MODBUS 指令错误标志置位 | 1. 从站未上电或未运行2. 寄存器地址超出范围3. 数据长度错误 | 1. 检查从站 PLC 的电源和运行状态;2. 确认寄存器地址为 40001(对应 VW100),未超出从站 V 区范围;3. 核对 MBUS_WR 的数据长度是否为 1 |

