1. 项目背景与需求解析
在工业自动化领域,PLC与称重设备的稳定通讯是产线数据采集的关键环节。这次我们要解决的是西门子S7-200 SMART系列PLC(以下简称SMART200)与托利多IND560系列电子秤通过自由口协议实现RS485通讯的实际问题。这种组合在食品包装、化工配料等需要实时重量反馈的场景非常常见。
为什么选择自由口通讯?相比Modbus等标准协议,自由口通讯的优势在于:
- 协议完全自定义,可适配老旧设备
- 响应速度更快(省去协议解析开销)
- 对非标数据格式处理更灵活
但自由口开发难度也更高,需要开发者手动处理:
- 数据帧头尾识别
- 校验码计算
- 超时重发机制
- 通讯异常处理
2. 硬件连接与参数配置
2.1 硬件接线规范
使用SMART200的Port0端口(RS485接口)连接电子秤,具体接线:
code复制PLC端 电子秤端
3+(A) —— RS485+
8-(B) —— RS485-
关键提示:RS485必须采用双绞线,距离超过50米时需在两端并联120Ω终端电阻。实测中发现,接地不良会导致通讯断续,建议在PLC侧做单端接地。
2.2 电子秤参数设置
以托利多IND560为例,需设置:
- 通讯协议:自定义ASCII格式
- 波特率:19200(与PLC保持一致)
- 数据位:8位
- 停止位:1位
- 校验方式:无校验
- 数据格式:ST,GS,CR(起始符、分隔符、结束符)
2.3 PLC端口初始化
在SMART200中通过以下SMB寄存器配置端口:
ST复制SMB30 = 16#09 // 自由口模式,19200波特率,无校验
SMB87 = 16#B0 // 启用接收、检测起始/结束字符
SMB88 = 0x02 // 起始字符STX(ASCII码2)
SMB89 = 0x0D // 结束字符CR(ASCII码13)
SMB94 = 10 // 最大接收字符数
3. 通讯程序开发实战
3.1 数据发送程序
电子秤通常采用问答式通讯,PLC需先发送请求指令:
ST复制// 主程序调用发送子程序
LD SM0.0
MOVB 16#02, VB100 // 帧头STX
MOVB "W", VB101 // 读重量指令
MOVB 16#0D, VB102 // 帧尾CR
MOVB 3, VB99 // 发送字节数
XMT VB100, 0 // 从端口0发送
3.2 数据接收处理
接收中断程序(INT0)中解析电子秤返回数据:
ST复制// 接收完成中断处理
LD SM0.0
DTCH 8 // 断开接收中断
MOVB SMB2, VB200 // 读取接收缓冲区
MOVD &VB200, VD250 // 数据指针初始化
// 数据有效性检查
LD SMW90 // 接收超时标志
JMP 1, ERROR_HANDLE
LD SMW92 // 接收字符数
LDB= 10 // 预期10字节数据
JMP 1, ERROR_HANDLE
// 重量数据提取(示例格式:STX 01 02 03 04 05 06 GS CR)
ITOA VB201, VD300 // 第1-2字节转整数
ITOA VB203, VD304 // 第3-4字节转整数
CONCAT VD300, VD304, VD308 // 合并数据
STR_TO_REAL VD308, VD312 // 转为浮点数
3.3 错误处理机制
必须实现的容错措施:
- 超时重发(3次尝试):
ST复制MOVB 0, VB50 // 重试计数器
RESET_TIMER T37
TON T37, 300 // 300ms超时
LD T37
AB= VB50, 3
JMP 1, FATAL_ERROR
INCB VB50
XMT VB100, 0 // 重新发送
- 数据校验(累加和校验):
ST复制MOVB 0, VB60 // 校验和清零
FOR VW70, 1, 8 // 前8字节累加
LD SM0.0
ADDB *VD250, VB60
INCD VD250
NEXT
LDB<> VB60, VB209 // 与接收的第9字节校验和比较
JMP 1, DATA_ERROR
4. 调试技巧与常见问题
4.1 调试工具推荐
- 串口监听:使用USR-TCP232-Test工具监控原始数据
- PLC状态监控:STEP 7-Micro/WIN SMART的状态图表
- 电子秤模拟器:Toledo Protocol Simulator(测试阶段使用)
4.2 典型故障排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无响应 | 接线错误 | 用万用表测量A-B间电压(2-6V正常) |
| 数据乱码 | 波特率不匹配 | 核对双方波特率、校验设置 |
| 偶发丢包 | 电磁干扰 | 增加磁环或改用屏蔽双绞线 |
| 校验错误 | 结束符设置错误 | 检查SMB88/SMB89与设备实际格式 |
4.3 性能优化建议
- 将通讯程序放在定时中断(如10ms)中执行,避免主程序阻塞
- 对重量数据做滑动平均滤波:
ST复制MOVR VD312, VD320 // 新数据
MULR 0.2, VD320 // 加权系数0.2
MOVR VD316, VD324 // 历史值
MULR 0.8, VD324
ADDR VD320, VD324 // 加权平均
MOVR VD324, VD316 // 更新历史值
5. 扩展应用场景
5.1 多秤体轮询
通过切换RS485终端电阻实现(需电子秤支持地址切换):
ST复制// 轮询控制逻辑
LD SM0.5 // 秒脉冲
EU
INCB VB80 // 地址计数器
AB> VB80, 3 // 假设3台秤
MOVB 1, VB80
// 发送带地址的指令
MOVB VB80, VB105 // 插入地址位
XMT VB100, 0
5.2 上位机集成
通过OPC UA或自定义TCP协议转发数据:
ST复制// 以太网通讯配置
MOVB 16#0B, SMB30 // 切换回PPI模式
NETR VB400, 1 // 读取网络数据
NETW VB500, 1 // 写入网络数据
实际项目中,我们在奶粉灌装线上应用此方案后,称重数据采集成功率从92%提升到99.8%,系统响应时间从800ms降低到200ms以内。关键经验是:每次电子秤维护后必须重新校验通讯参数,特别是要注意托利多电子秤的"通讯超时"参数必须大于PLC的轮询间隔。
