本文目录
- 1. 一、应用场景与方案优势
- 2. 二、硬件接线说明
- 3. 三、Modbus地址映射
- 4. 四、S7-200 SMART编程示例
- 5. 五、S7-1200/1500编程示例
- 6. 六、常见问题与排查
- 7. 七、示例工程下载
- 8. 西门子PLC与网络及串口型MODBUS继电器通讯示例工程¥6.99
西门子PLC(S7-200 SMART/S7-1200/S7-1500等系列)通过Modbus协议与网络型或串口型继电器模块通讯,是工业自动化中常见的分布式IO扩展方案。本文详细介绍硬件接线、PLC编程配置、Modbus地址映射以及完整的示例工程,帮助工程师快速实现西门子PLC对继电器模块的读写控制。
一、应用场景与方案优势
在中小型控制系统中,西门子PLC通常作为主控制器,而继电器模块作为远程IO从站,通过RS485总线或以太网连接。这种方案的优势在于:
- 节省布线成本:继电器模块安装在设备现场,只需一根总线连接到PLC,无需将每根控制线拉到控制柜
- 扩展灵活:可根据需要随时增加从站模块,每个RS485总线最多支持32个从站
- 维护方便:模块故障时只需更换现场模块,不影响PLC程序
- 通讯可靠:Modbus RTU协议成熟稳定,抗干扰能力强,适合工业环境
- 成本低廉:相比PLC专用IO模块,Modbus继电器模块价格仅为其1/3到1/5
二、硬件接线说明
2.1 串口型(RS485)接线
串口型继电器模块通过RS485总线与PLC的通讯模块连接。接线方式如下:
- PLC端:使用S7-200 SMART的RS485口(Port0/Port1),或S7-1200/1500加装CM 1241 RS485通讯模块
- 模块端:A端子接PLC的D+(3号针),B端子接PLC的D-(8号针)
- 地线:建议将PLC和模块的信号地(SG)连接,提高抗干扰能力
- 终端电阻:总线两端(距离最远的两个设备)接入120Ω终端电阻
- 电源:继电器模块使用独立24V DC供电,注意电源功率要满足所有继电器同时吸合的需求
2.2 网络型(以太网)接线
网络型继电器模块通过以太网与PLC通讯,支持Modbus TCP协议:
- 使用网线将模块连接到交换机或直接连接PLC的网口
- 模块默认IP地址通常为192.168.1.100,需与PLC在同一网段
- 单网口版设备必须在网络配置中将【透传】模式更改为【Modbus TCP】模式
- Modbus TCP默认端口号为502
三、Modbus地址映射
继电器模块的Modbus地址映射遵循标准协议,以8路继电器模块为例:
| 功能 | Modbus功能码 | 地址范围 | 说明 |
|---|---|---|---|
| 读取继电器状态 | 0x01(读线圈) | 0x0000-0x0007 | 1=吸合,0=断开 |
| 写单个继电器 | 0x05(写单线圈) | 0x0000-0x0007 | FF00=吸合,0000=断开 |
| 写多个继电器 | 0x0F(写多线圈) | 0x0000-0x0007 | 按位写入 |
| 读取输入状态 | 0x02(读离散输入) | 0x0000-0x0007 | 光耦输入状态 |
| 读取寄存器 | 0x03(读保持寄存器) | 0x0000-0x0001 | 模块地址、波特率等 |
四、S7-200 SMART编程示例
S7-200 SMART使用Modbus RTU主站指令库进行通讯。首先需要在STEP 7-Micro/WIN SMART中加载Modbus主站指令库,然后编写以下程序:
4.1 初始化通讯参数
// 主程序 OB1
// 首次扫描时初始化Modbus主站
LD SM0.1
CALL MBUS_CTRL, 1, 9600, 0, 1000, &VB100, &VB200
// 参数说明:
// 1 = 使用Port0口
// 9600 = 波特率9600
// 0 = 无校验(0=无,1=奇,2=偶)
// 1000 = 超时时间1000ms
// &VB100 = 主站状态指针
// &VB200 = 从站响应数据指针
4.2 读取继电器状态
// 读取从站1的8路继电器状态
LD SM0.5 // 每秒触发一次
EU
CALL MBUS_MSG, 1, 1, 1, 0, 8, &VB300, &VB100
// 参数说明:
// 1 = 使能位
// 1 = 从站地址1
// 1 = 功能码01(读线圈)
// 0 = 起始地址0
// 8 = 读取8个
// &VB300 = 数据存储地址
// &VB100 = 状态指针
// 读取结果存储在VB300开始的字节中
// VB300.0 = 第1路继电器状态
// VB300.1 = 第2路继电器状态
// ...以此类推
4.3 控制继电器吸合/断开
// 写单个继电器:控制第1路继电器吸合
LD I0.0 // 按下按钮
EU
CALL MBUS_MSG, 1, 1, 5, 0, 1, 1, &VB100
// 参数说明:
// 功能码05 = 写单线圈
// 地址0 = 第1路继电器
// 数值1 = FF00(吸合),0 = 0000(断开)
// 写多个继电器:同时控制前4路
LD I0.1
EU
MOVB 16#0F, VB400 // 低4位置1,前4路吸合
CALL MBUS_MSG, 1, 1, 15, 0, 4, &VB400, &VB100
// 功能码15 = 写多线圈
// 数量4 = 写4个线圈
// VB400 = 按位写入的数据
五、S7-1200/1500编程示例
S7-1200/1500使用TIA Portal中的Modbus通信指令,需要先在设备配置中添加Modbus主站功能。
5.1 SCL语言示例
#MB_CLIENT(
REQ := "Tag_Request", // 请求触发
DISCONNECT := FALSE, // 保持连接
MODE := 0, // 0=读,1=写
DATA_ADDR := 40001, // Modbus地址
DATA_LEN := 10, // 数据长度
DATA_PTR := PEEK(area := 16#81, dbNumber := 1, byteOffset := 0), // 数据指针
CONNECT := "MB_Connect_DB", // 连接参数
DONE => "Tag_Done", // 完成标志
BUSY => "Tag_Busy", // 忙标志
ERROR => "Tag_Error", // 错误标志
STATUS => "Tag_Status" // 状态字
);
六、常见问题与排查
6.1 通讯失败常见原因
- 地址不匹配:PLC程序中的从站地址必须与模块拨码或软件设置的地址一致
- 波特率不一致:PLC和模块的波特率、校验位、停止位必须完全相同
- 接线错误:A/B线接反是最常见的问题,交换A/B线试试
- 未接终端电阻:长距离通讯时总线两端必须接120Ω终端电阻
- 电源问题:模块供电不足会导致通讯不稳定,建议使用24V/2A以上电源
- 干扰问题:RS485线应远离动力线,使用屏蔽双绞线并单端接地
6.2 错误代码说明
| 错误码 | 含义 | 解决方法 |
|---|---|---|
| 0x01 | 非法功能码 | 模块不支持该功能码,检查功能码设置 |
| 0x02 | 非法地址 | 读取/写入地址超出模块范围 |
| 0x03 | 非法数据值 | 写入的数据值不合法 |
| 0x04 | 从站设备故障 | 模块硬件故障,重启或更换模块 |
| 超时 | 无响应 | 检查接线、地址、波特率、电源 |
七、示例工程下载
本文配套的西门子S7-200 SMART和S7-1200完整示例工程包含:
- S7-200 SMART完整程序(含初始化、读线圈、写线圈、错误处理)
- S7-1200 TIA Portal工程(SCL和LAD两种版本)
- Modbus地址映射表Excel
- 硬件接线图PDF
- 详细的调试步骤说明
示例工程在文章底部进行下载,下载后可直接导入到编程软件中使用。建议先使用默认参数(地址1、9600波特率、无校验)测试通讯,成功后再根据实际需求修改参数。
发表回复