1. 项目背景与核心需求
在工业自动化领域,PLC与称重设备的稳定通讯一直是产线数据采集的关键环节。最近我在一个食品包装项目中,需要实现西门子S7-200 SMART PLC与托利多IND560电子秤的实时数据交互。这种非标通讯场景下,自由口协议(Freeport)成为了最具性价比的解决方案。
不同于常见的Modbus RTU协议,自由口通讯需要手动处理所有底层数据帧结构。通过RS485接口,我们实现了每秒10次的稳定重量数据采集,误差控制在±0.05%以内。这个方案特别适合老款称重设备改造,无需更换硬件就能接入自动化系统。
2. 硬件连接与参数配置
2.1 物理层连接要点
使用西门子CPU SR40的RS485接口(端口0)连接托利多电子秤的COM2口,接线时特别注意:
- 电子秤的T/R+接PLC的RS485 A(3号针脚)
- 电子秤的T/R-接PLC的RS485 B(8号针脚)
- 屏蔽层单端接地(PLC侧)
重要提示:托利多IND560的终端电阻拨码开关需要设置为OFF,否则会导致信号反射。实测通讯距离超过50米时,建议在PLC侧添加120Ω终端电阻。
2.2 电子秤关键参数设置
通过IND560的Service菜单配置以下参数:
code复制Protocol → User Defined
Baud Rate → 9600(与PLC保持一致)
Data Bits → 8
Stop Bits → 1
Parity → None
Terminator → CR LF(对应ASCII码13和10)
电子秤数据输出格式设置为连续输出模式,通过"Output Format"菜单自定义数据帧:
code复制ST,GS,WT 000.00 kg,GS,ET
其中GS为分组符(ASCII 29),实际输出示例:
code复制02 00 00 00 20 20 2B 30 30 30 2E 30 30 20 6B 67 0D 0A
3. PLC程序开发详解
3.1 自由口初始化程序
在S7-200 SMART的编程软件STEP 7-Micro/WIN SMART中,使用以下初始化代码:
stl复制LD SM0.1
MOVB 9, SMB30 // 自由口模式,9600bps,无校验
MOVB 16#0D, VB100 // 接收结束符1(CR)
MOVB 16#0A, VB101 // 接收结束符2(LF)
MOVB 2, VB102 // 最大接收字符数200
ATCH INT_0, 8 // 绑定接收完成中断
ENI // 全局中断使能
3.2 数据接收处理逻辑
中断程序INT_0中实现数据解析:
stl复制LD SM0.0
MOVD &VB200, AC1 // 接收缓冲区首地址
MOVB *AC1, VB300 // 读取起始符
INCD AC1
MOVB *AC1, VB301 // 读取状态字
INCD AC1
// 提取重量数据(ASCII转实数)
MOVB *AC1, VB310
INCD AC1
...(重复6次对应6位重量数据)
ATH VB310, VD400, 6 // ASCII转十六进制
DI_R VD400, VD500 // 转浮点数
3.3 数据校验与异常处理
增加重量数据有效性检查:
stl复制LD SM0.0
LPS
AW= VB301, 16#20 // 检查状态位(第6位为1表示数据稳定)
MOVR VD500, VD600 // 有效数据存储
LPP
NOT
MOVR 0.0, VD600 // 不稳定数据清零
4. 现场调试经验实录
4.1 典型故障排查表
| 故障现象 | 排查步骤 | 解决方案 |
|---|---|---|
| 通讯完全中断 | 1. 测量RS485 AB线间电压(应2-6V) 2. 检查PLC端口模式 3. 确认电子秤协议使能 |
1. 纠正接线极性 2. 重新下载PLC程序 3. 检查电子秤Service菜单 |
| 数据偶发乱码 | 1. 示波器检查信号质量 2. 调整通讯速率至4800bps测试 3. 检查接地环路 |
1. 增加终端电阻 2. 改用屏蔽双绞线 3. 单点接地改造 |
| 重量更新延迟 | 1. 监控接收缓冲区 2. 检查电子秤输出间隔 3. 排查中断冲突 |
1. 优化PLC程序周期 2. 调整电子秤输出速率 3. 禁用非必要中断 |
4.2 抗干扰优化措施
- 在PLC输入端并联0.1μF/100V陶瓷电容,有效抑制高频干扰
- 通讯线远离变频器动力线(实测间距>30cm时,误码率下降90%)
- 电子秤单独使用稳压电源,避免与电机共用电网
- 在OB35循环中断中增加看门狗复位逻辑,防止通讯死锁
5. 系统扩展与优化
5.1 多秤体轮询方案
通过PLC的Q0.0-Q0.3输出控制4路继电器,实现多秤体分时复用:
stl复制LD SM0.5 // 1Hz时钟脉冲
EU
INCB VB500 // 计数器递增
LDW= VB500, 4
MOVB 0, VB500 // 循环计数
LD SM0.0
MOVB VB500, QB0 // 激活当前通道
XMT VB100, 0 // 发送查询指令
5.2 数据平滑处理算法
在数据块DB1中实现移动平均滤波:
stl复制// 循环存储10组数据
LD SM0.0
MOVD &DB1.DBD0, AC1
FOR VW100, 1, 9
MOVD *AC1, *AC1+4
INCD AC1
NEXT
// 计算平均值
MOVR 0.0, VD200
FOR VW110, 0, 9
+R DB1.DBD[VW110*4], VD200
NEXT
/R 10.0, VD200
这个项目让我深刻体会到,工业现场通讯的关键在于细节处理。比如电子秤的GS分隔符容易被误认为无效数据,实际却是帧结构定位的关键。建议在调试阶段先用串口助手抓取原始数据帧,确认格式后再编写解析逻辑,可以节省大量调试时间。