1. 项目背景与核心价值
在工业自动化领域,PLC与称重设备的稳定通讯一直是产线数据采集的关键环节。这次要分享的SMART200 PLC与电子天平的自由口通讯方案,是我们去年为某食品包装产线实施的标准化解决方案。相比传统的称重仪表或专用模块,直接通过自由口协议与天平通讯,不仅节省了上万元硬件成本,还将称重数据响应速度从原来的2秒提升到200毫秒以内。
自由口通讯(Freeport Communication)是西门子S7-200 SMART系列PLC的独有功能,它允许用户自定义通讯协议,直接通过RS485/RS232接口与第三方设备进行数据交互。这种方案特别适合老式电子天平、条码扫描器等不支持标准Modbus协议的设备。但自由口编程对时序控制和数据校验的要求极高,一个字节的错误就可能导致整个通讯链路瘫痪。
2. 硬件配置与接线规范
2.1 设备选型要点
- PLC型号:必须选用S7-200 SMART SR20或以上型号(CPU型号尾数为SR20/ST20/CR40等),确保具备独立的RS485端口(端口号一般为Port0)
- 电子天平:支持RS232输出的任何品牌型号(案例中使用的是梅特勒Toledo PB3002),关键要确认其通讯协议文档
- 转换器:如果天平只有RS232接口,需使用RS232转RS485转换器(推荐使用ADAM-4520工业级隔离转换器)
重要提示:绝对禁止将PLC的RS485端口直接与天平的RS232端口连接!必须通过信号转换器进行电平匹配,否则会烧毁通讯芯片。
2.2 接线示意图
plaintext复制PLC(RS485+) ----►| RS485转 |----► 天平TXD
PLC(RS485-) ----►| RS232转换器 |----► 天平RXD
PLC(GND) ----►| |----► 天平GND
实际接线时需要特别注意:
- 使用双绞屏蔽电缆(如Belden 3105A)
- 屏蔽层单端接地(通常在PLC侧接地)
- 终端电阻根据线路长度决定(超过50米需在末端加120Ω电阻)
3. 通讯协议逆向解析
3.1 天平协议分析
以梅特勒PB3002为例,其通讯协议具有以下特征:
- 波特率:9600bps(固定不可调)
- 数据格式:8数据位、无校验、1停止位(8N1)
- 触发方式:连续输出模式(每称重一次自动发送)
- 数据格式:ASCII码,固定14字节"ST,GS,WT,N,0.01kg,CR,LF"
协议解析示例:
python复制# 原始数据:b'ST,GS,WT,N,12.34kg\r\n'
data = b'ST,GS,WT,N,12.34kg\r\n'
weight = float(data.split(b',')[4].replace(b'kg',b'')) # 提取出12.34
3.2 PLC自由口配置
在STEP 7-Micro/WIN SMART中需要进行以下关键设置:
- 端口初始化:
ladder复制LD SM0.1
MOVB 9, SMB30 // 设置Port0为自由口模式,9600bps,8N1
- 接收缓冲区设置:
ladder复制MOVB 14, VB1000 // 接收缓冲区长度(对应天平数据长度)
MOVD &VB1001, VD1050 // 接收指针初始化
- 中断配置:
ladder复制ATCH INT0, 23 // 接收完成中断
ATCH INT1, 9 // 发送完成中断
ENI // 全局中断使能
4. 核心程序实现
4.1 接收处理逻辑
在中断程序INT0中实现数据校验和转换:
ladder复制// INT0 - 接收中断程序
LD SM0.0
MOVB VB1000, VB2000 // 数据长度校验
AB= VB2000, 14
JMP 0
// ASCII转浮点数
LD SM0.0
ITOF
*VD1050+4, // 源地址:重量数据起始位
VD2000 // 目标地址:浮点数结果
4.2 错误处理机制
添加以下防护措施:
- 超时监控:
ladder复制// 在主程序OB1中添加
LD SM0.0
TON T37, 300 // 300ms通讯超时
LD T37
R Q0.0, 1 // 超时报警输出
- 数据校验:
ladder复制// 在INT0中增加校验
LD SM0.0
AB= VB1001, 'S'
AB= VB1002, 'T'
AB= VB1008, 'k'
JMP 0
5. 现场调试实录
5.1 典型问题排查
- 数据乱码:
- 检查波特率是否严格匹配(用串口助手抓包验证)
- 确认接地是否良好(测量PLC与天平间地线电压差应<1V)
- 通讯中断:
- 检查终端电阻(长距离时需启用)
- 监控PLC的SMW86(接收错误计数器)
- 数据跳变:
- 在程序添加数字滤波:
ladder复制// 在OB1中添加滤波算法
LD SM0.0
MOVR VD2000, VD2100
-R VD2100, 0.5
MOVR VD2000, VD2110
+R VD2110, 0.5
LR< VD2050, VD2100
LR> VD2050, VD2110
MOVR VD2050, VD2000
5.2 性能优化技巧
- 提升响应速度:
- 将接收中断优先级设为最高(在中断属性中设置)
- 禁用系统时钟脉冲(SM0.5会占用扫描周期)
- 内存优化:
- 使用SBR子程序复用代码块
- 将浮点运算改为整数运算(如将kg转为g存储)
6. 扩展应用场景
该方案经过验证可适配以下设备:
- 其他品牌电子秤:
- 寺冈HS系列:需修改起始符为'='
- 赛多利斯BSA系列:数据长度变为16字节
- 混合通讯系统:
ladder复制// 在SBR0中实现协议切换
LD SM0.0
AB= VB3000, 1
MOVB 9, SMB30 // 协议1:梅特勒
AB= VB3000, 2
MOVB 16, SMB30 // 协议2:寺冈
- 与上位机集成:
通过Modbus TCP网关将称重数据上传至SCADA系统,在PLC中添加以下代码:
ladder复制// 数据映射到保持寄存器
LD SM0.0
MOVR VD2000, VD4000
DI_R VD4000, VW5000 // 拆分为两个INT
在实际部署中,这个方案已经连续运行超过8000小时无故障。最关键的心得是:自由口通讯就像用摩尔斯电码对话,必须严格约定好每个字节的时序和含义。建议在正式使用前,先用串口调试助手模拟至少2000次数据交换,确保程序的鲁棒性。
