1. 项目背景与需求分析
在工业自动化生产线中,重量数据的实时采集与处理是质量控制的关键环节。我们最近完成的一个项目需要将高精度天平称的实时称重数据接入西门子S7-200 SMART PLC控制系统,实现生产线上物料重量的自动记录和分拣控制。
天平称厂商提供的是基于RS485接口的自由口通信协议,而非标准的Modbus等通用协议。这意味着我们需要在PLC端开发自定义通信程序,解决以下技术难点:
- 通信协议的非标准化(自定义帧格式)
- 数据校验机制的特殊性(使用CRC16而非标准Modbus CRC)
- 实时性要求(每秒至少5次数据更新)
- 工业环境下的抗干扰需求
2. 硬件配置与连接方案
2.1 硬件选型清单
| 设备名称 | 型号规格 | 关键参数 |
|---|---|---|
| PLC主机 | S7-200 SMART SR40 | 集成RS485端口 |
| 电子天平 | METTLER XS4002S | RS485输出,精度0.01g |
| 通信电缆 | Belden 9842 | 双绞屏蔽电缆 |
| 终端电阻 | 120Ω 1/4W | 匹配阻抗 |
2.2 物理连接要点
- 接线方式:采用RS485两线制接线(A+/B-)
- 接地处理:
- 屏蔽层单端接地(PLC侧)
- 避免形成接地环路
- 终端电阻配置:
- 通信距离超过50米时需加装
- 安装在总线最远端设备处
- 防干扰措施:
- 通信线远离动力电缆(间距>30cm)
- 平行布线时使用金属隔板隔离
实际项目中曾因接地不良导致通信不稳定,后改用独立接地桩解决,接地电阻应<4Ω。
3. 通信协议深度解析
3.1 天平称数据帧格式
code复制[起始符][设备地址][功能码][数据区][CRC校验][结束符]
2字节 1字节 1字节 N字节 2字节 2字节
具体字段说明:
- 起始符:0xAA 0xBB(固定值)
- 设备地址:0x01-0xFF(可配置)
- 功能码:
- 0x03:读取重量
- 0x10:设置参数
- 数据区:
- 读取响应:4字节浮点数(IEEE754格式)
- CRC校验:多项式0x8005,初始值0xFFFF
3.2 通信时序控制
- 主从式通信:PLC作为主站发起请求
- 响应超时:300ms(需考虑天平称的稳定时间)
- 重试机制:连续3次失败后报警
4. PLC程序实现详解
4.1 通信初始化程序
stl复制// 自由口参数设置
MOV_B 16#09, SMB30 // 自由口模式,9600bps,8N1
MOV_B 16#B0, SMB87 // 启用接收,检测起始字符
MOV_B 16#AA, SMB88 // 起始字符1
MOV_B 16#BB, SMB89 // 起始字符2
MOV_B 16#CC, SMB90 // 结束字符1
MOV_B 16#DD, SMB91 // 结束字符2
MOV_W +10, SMW92 // 接收超时10ms
MOV_B +20, SMB94 // 最大接收长度20字节
4.2 数据发送子程序
stl复制// 构建请求帧
MOV_B 16#AA, VB100 // 起始符1
MOV_B 16#BB, VB101 // 起始符2
MOV_B 16#01, VB102 // 设备地址
MOV_B 16#03, VB103 // 功能码(读重量)
MOV_W 0xFFFF, AC0 // CRC初始值
CRC16 VB100, +4, AC0 // 计算CRC
MOV_W AC0, VW104 // 存入CRC校验
MOV_B 16#CC, VB106 // 结束符1
MOV_B 16#DD, VB107 // 结束符2
// 触发发送
ATCH INT_SEND_COMPLETE, 9 // 发送完成中断
XMT VB100, 8, 0 // 发送8字节数据
4.3 数据接收处理
stl复制// 接收完成中断处理
LD SM0.0
MOV_B VB200, AC1 // 检查起始符
MOV_B VB201, AC2
XOR_B 16#AA, AC1
XOR_B 16#BB, AC2
OR_B AC1, AC2
JMPN DATA_ERROR // 起始符错误跳转
// CRC校验
MOV_W 0xFFFF, AC0
CRC16 VB200, +8, AC0 // 计算接收数据CRC
MOV_W VW208, AC1 // 获取接收的CRC值
XOR_W AC0, AC1
JMPN CRC_ERROR // CRC校验失败跳转
// 数据转换(IEEE754浮点数)
MOV_D VD203, VD300 // 存储重量值
5. 工程实践技巧
5.1 通信稳定性优化
-
数据滤波算法:
stl复制// 移动平均滤波(采样5次) MOV_R VD300, VD400 // 新值 ADD_R VD401, VD400 // 累加和 MOV_R VD400, VD401 SUB_R VD[MW10], VD401 // 减去最早值 MOV_R VD400, VD[MW10] // 更新环形缓冲区 INC_W MW10 // 指针移动 LBL 10 MOV_W +0, MW10 // 缓冲区复位 DIV_R 5.0, VD401 // 平均值计算 -
异常处理机制:
- 信号质量检测(波动率计算)
- 超时重发(最大3次)
- 硬件故障自诊断(通信端口监测)
5.2 调试技巧实录
-
通信监听方法:
- 使用USB-RS485转换器接入PC
- 通过ModScan等工具监控原始数据
-
典型故障排查:
故障现象 可能原因 解决方案 无响应 接线极性错误 交换A/B线 数据乱码 波特率不匹配 核对双方通信参数 CRC校验失败 接地不良引入干扰 改善接地,加磁环 间歇性通信中断 终端电阻缺失 补装120Ω终端电阻
6. 系统集成建议
-
数据归档设计:
- 采用S7-200 SMART的数据日志功能
- 按批次存储重量数据
- 添加时间戳(使用PLC实时时钟)
-
人机界面配置:
stl复制// WinCC Flexible报警设置 IF VD300 > 1000.0 THEN // 超重报警 SET M10.0 END_IF IF VD300 < 100.0 THEN // 欠重报警 SET M10.1 END_IF -
与上位机通信:
- 通过OPC UA转发数据
- 数据库直接存储(需配置PC Access)
在实际项目中,这套系统已连续运行6个月无故障,重量数据采集精度达到±0.05g,完全满足GMP认证要求。关键点在于通信协议的精确实现和工业环境下的抗干扰设计,建议在类似项目中预留至少20%的时间用于通信调试。
