1. 项目概述:SMART200双串口通信实战
在工业自动化现场,PLC与各类仪表的通信连接是最基础也最关键的环节。西门子SMART200系列PLC凭借其稳定的性能和亲民的价格,成为中小型自动化项目的热门选择。我最近完成的一个污水处理厂监控项目,就需要同时对接两种不同协议的仪表:一路是采用自定义自由口协议的pH值传感器,另一路是通过MODBUS RTU协议读取的流量计。这个案例完美展现了SMART200双串口的灵活应用场景。
对于PLC初学者而言,串口通信往往是第一个需要攻克的难点。不同于数字量I/O的简单开关控制,串口通信涉及协议栈、数据帧解析、超时处理等复杂概念。但别担心,通过这个项目,我将带你从硬件配置到软件编程,完整走通整个开发流程。只要跟着步骤操作,2小时内你就能建立起可运行的通信系统。
2. 硬件配置详解
2.1 端口分配与物理连接
SMART200 CPU模块自带一个RS485端口(端口0),通过扩展CM01通信模块可以增加第二个RS485端口(端口1)。在我的项目中:
- 端口0连接采用自由口协议的pH传感器(波特率9600,8数据位,无校验)
- 端口1连接MODBUS RTU流量计(波特率19200,8数据位,偶校验)
关键提示:RS485接线务必注意A/B线极性,建议使用双绞屏蔽线,屏蔽层单端接地。通信距离超过50米时,需在总线两端加装120Ω终端电阻。
2.2 端口参数配置步骤
-
自由口配置:
- 打开STEP 7-Micro/WIN SMART软件
- 导航至"系统块"→"通信端口"
- 设置端口0参数:
- 协议:自由口
- 波特率:9600
- 数据位:8
- 校验:无
- 停止位:1
- 勾选"启用消息定时器",超时设为100ms
-
MODBUS配置:
- 在同一个界面配置端口1:
- 协议:MODBUS
- 从站地址:1(PLC自身地址)
- 波特率:19200
- 校验:偶校验
- 保存配置并下载到PLC
- 在同一个界面配置端口1:
3. 软件编程实战
3.1 数据块规划
创建两个数据块用于通信缓冲:
plc复制// DB1:自由口通信数据区
STRUCT
pH_Receive : ARRAY[0..7] OF BYTE // 接收缓冲区
pH_Send : ARRAY[0..5] OF BYTE // 发送指令帧
pH_Value : REAL // 解析后的pH值
END_STRUCT
// DB2:MODBUS通信数据区
STRUCT
Flow_Request : ARRAY[0..7] OF BYTE // MODBUS请求帧
Flow_Response : ARRAY[0..9] OF BYTE // 响应缓冲区
Flow_Rate : REAL // 流量值(m³/h)
END_STRUCT
3.2 自由口通信实现
自由口通信需要手动处理数据收发,核心逻辑如下:
- 发送指令:
plc复制LD SM0.0
MOVB 16#01, DB1.pH_Send[0] // 设备地址
MOVB 16#03, DB1.pH_Send[1] // 读数据指令
MOVB 16#00, DB1.pH_Send[2] // 起始地址高字节
MOVB 16#08, DB1.pH_Send[3] // 起始地址低字节
MOVB 16#00, DB1.pH_Send[4] // 数据长度高字节
MOVB 16#01, DB1.pH_Send[5] // 数据长度低字节
XMT DB1.pH_Send, 0, 6 // 从端口0发送6字节
- 接收处理:
plc复制LD SM0.0
RCV DB1.pH_Receive, 0, 8 // 从端口0接收8字节
LD SM86.7 // 接收完成标志
MOVR VD100, DB1.pH_Value // 将接收到的浮点数存入结果区
3.3 MODBUS主站实现
使用MODBUS库指令简化开发:
- 初始化:
plc复制LD SM0.1
MOVB 1, MB1_Addr // 从站地址
MOVW 9600, MB1_Baud // 波特率
MOVB 1, MB1_Parity // 偶校验
MOVB 8, MB1_DataBits // 数据位
MOVB 1, MB1_StopBits // 停止位
CALL MBUS_CTRL, MB1_Init // 初始化端口1
- 数据轮询:
plc复制LD M0.0 // 每5秒触发一次
TON T37, 50
LD T37
CALL MBUS_MSG, MB1_Req // 读取保持寄存器40001
EN := 1,
Slave := 2, // 流量计地址
RW := 0, // 读操作
Addr := 40001, // 起始地址
Count := 2, // 读取2个寄存器(浮点数)
DataPtr := &DB2.Flow_Rate,
Done => M0.1,
Error => MW10
4. 调试技巧与问题排查
4.1 常见故障处理
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 通信超时 | 波特率不匹配 | 检查设备与PLC的波特率设置 |
| 数据乱码 | 校验位设置错误 | 确认奇偶校验配置一致 |
| 偶发通信失败 | 线路干扰 | 加装磁环,检查接地 |
| MODBUS无响应 | 从站地址错误 | 使用MODBUS扫描工具确认地址 |
4.2 实用调试工具
-
串口监听工具:
- 推荐使用FreeMaster或COM Monitor
- 可实时捕获通信数据帧
- 支持MODBUS协议解析
-
PLC在线监控:
- 在STEP 7中启用状态图表
- 监控关键变量:SM86(自由口状态)、MB1_Error(MODBUS错误码)
-
信号测量:
- 使用万用表测量RS485差分电压(应≥1.5V)
- 用示波器观察信号波形质量
5. 性能优化建议
-
通信时序优化:
- 错开两个端口的轮询时间(如自由口每2秒,MODBUS每5秒)
- 使用S7-200 SMART的通信事件中断(中断事件8/9)
-
数据校验增强:
- 自由口通信添加CRC校验
- 对关键数据做范围检查(如pH值应在0-14之间)
-
错误恢复机制:
- 连续3次通信失败触发报警
- 自动复位通信端口(通过SMB34/SMB35)
在实际项目中,我发现最影响通信稳定性的往往是接地问题。曾有个现场因为传感器与PLC未共地,导致通信时好时坏。后来在PLC端增加隔离型RS485转换器后问题彻底解决。这也提醒我们,工业现场的环境复杂性远超实验室条件。
