在工业自动化领域,PLC与称重设备的稳定通讯一直是产线数据采集的关键环节。最近接手的一个食品包装项目,需要实现西门子S7-200 SMART PLC与某品牌电子天平的自由口通讯。这个看似基础的需求,在实际落地时却遇到了协议不匹配、数据格式转换、抗干扰处理等一系列典型问题。
自由口通讯(Freeport Communication)是西门子PLC特有的一种串行通讯方式,它不依赖标准协议(如Modbus),而是允许用户自定义数据帧格式。这种灵活性在对接非标设备时特别有用,但同时也对程序员的协议解析能力提出了更高要求。电子天平通常采用RS232接口输出称重数据,常见的格式包括"ST,GS"协议或简单ASCII字符串,如何准确捕获并解析这些数据是本次实战的重点。
关键提示:务必确认天平的RS232引脚定义!某次调试失败后发现是天平厂商将TX/RX线序反接,这种情况在非标设备中很常见。
plaintext复制PLC RS485端口 RS232适配器 电子天平
+---------------------+---------------------+
| 3+(A) ----|>|---- 2 (TX) | |
| 8-(B) ----|>|---- 3 (RX) |---- 自定义接口 |
| 5 (GND)---- GND |
+---------------------+---------------------+
在STEP 7-Micro/WIN SMART中,通过以下SMB寄存器配置通讯参数:
pascal复制// 端口0配置(SMB30)
MOV_B 16#09, SMB30 // 9600bps, 无校验, 8数据位, 1停止位
MOV_B 16#80, SMB87 // 启用接收消息功能
MOV_B 10, SMB89 // 消息结束字符:0x0D(回车符)
MOV_W +5, SMW90 // 空闲线检测时间5ms
pascal复制// 主程序OB1
Network 1: 接收触发
LD SM0.1 // 首次扫描
R SM87.7, 1 // 复位接收使能
MOVB 16#80, SMB87 // 重新使能接收
Network 2: 数据接收完成中断
LD SM0.0
ATCH INT0, 23 // 关联接收完成中断到INT0
Network 3: 定时轮询发送请求
LD SM0.5 // 1Hz时钟脉冲
EU // 上升沿检测
RCV VB100, 0 // 启动接收缓冲区VB100
pascal复制// 数据解析示例(假设天平返回格式:" 123.45g")
LD SM0.0
MOVD &VB100, AC1 // 获取接收缓冲区地址
MOVB *AC1, VB200 // 读取第一个字符
// 提取数字部分(跳过空格和单位)
ITOA VB100+2, VD210 // 转换"123"部分为整数
ITOA VB100+5, VD214 // 转换"45"小数部分
DIV VD214, 100.0, VD214 // 转换为0.45
ADD VD210, VD214, VD218 // 合并为123.45
MOVR VD218, VD500 // 最终重量值存储到VD500
现象:只能收到部分字符(如"12"而非"123.45g")
排查步骤:
解决方案:发现天平实际以0x0A(换行)结束,修改SMB89值为16#0A
现象:每隔几分钟出现异常字符
根本原因:车间变频器电磁干扰
防护措施:
pascal复制// 校验和计算子程序
MOVW 0, VW300 // 清空累加器
FOR VW310, 1, 10 // 检查前10个字节
XORB *AC1, VB300 // 异或校验
INCD AC1 // 指针递增
NEXT
pascal复制// 在INT0中断中切换缓冲区
LD SM0.0
MOVB VB99, VB99 // 切换标志位
XORB 1, VB99
JMP VB99, 0, Buffer1
RCV VB200, 0 // 使用第二缓冲区
CRET
Buffer1:
RCV VB100, 0
pascal复制// 自动检测波特率(需天平支持)
MOVB 16#20, SMB30 // 1200bps尝试
TODR VB50, 0 // 发送测试字符
TON T37, 100 // 100ms超时
LD T37
MOVB 16#40, SMB30 // 2400bps尝试...
变量命名规范:
g_stScaleData(结构体形式)rActualWeight(REAL类型)注释模板:
pascal复制// [功能] 称重数据解析
// [作者] XXX
// [日期] 2023-08-20
// [修改] 2023-08-22 增加LRC校验
ProjectName_YYYYMMDD_HHMM.zip)这个项目给我的深刻启示是:工业通讯的难点往往不在协议本身,而在于对现场干扰的预防和对设备特性的深入理解。建议在方案设计阶段就预留至少30%的时间用于现场调试,特别是对于称重这类高精度设备,哪怕一个接地不良都可能导致数据跳变。下次如果再遇到类似项目,我会优先考虑在PLC和天平之间增加信号隔离器(如魏德米勒的UR20-FBC-RS232),虽然成本增加约500元,但能显著降低后期维护工作量。