1. 项目背景与需求分析
在工业自动化控制系统中,PLC与称重设备的通讯是常见且关键的技术需求。西门子SMART200系列PLC因其性价比高、编程简单而广受欢迎,而托利多电子秤则以精度高、稳定性好著称于工业称重领域。将两者通过自由口通讯方式连接,可以实现实时、精准的重量数据采集,为生产过程中的配料、分装、质量检测等环节提供可靠的数据支持。
自由口通讯(Freeport Communication)是西门子PLC特有的一种通讯方式,它允许用户自定义通讯协议,通过设置特殊寄存器和编写通讯程序,实现与各种非标设备的灵活对接。相比标准通讯协议(如Modbus),自由口通讯的优势在于:
- 可以适配各种特殊格式的通讯协议
- 通讯参数可完全自定义
- 程序控制更加灵活直接
在实际项目中,我们经常遇到托利多电子秤采用私有通讯协议的情况,这时自由口通讯就成为最理想的解决方案。通过本文分享的程序,您可以快速实现SMART200 PLC与托利多电子秤的稳定通讯,获取精准的重量数据。
2. 硬件连接与通讯参数设置
2.1 硬件连接方式
SMART200 PLC与托利多电子秤的物理连接通常采用以下两种方式:
-
RS232连接:
- 使用DB9接口的串口线
- 连接距离一般不超过15米
- 接线方式:
- PLC端(公头) - 电子秤端(母头)
- 2(TxD) - 2(RxD)
- 3(RxD) - 3(TxD)
- 5(GND) - 5(GND)
-
RS485连接(推荐):
- 使用双绞线连接
- 最长通讯距离可达1200米
- 接线方式:
- PLC端 - 电子秤端
- A+ - A+
- B- - B-
- 注意终端电阻设置
提示:实际接线前务必查阅双方设备的接口定义手册,不同型号设备可能存在引脚定义差异。
2.2 通讯参数配置
通讯双方必须使用相同的参数设置才能正常通讯。托利多电子秤的通讯参数通常可在其设置菜单中查看和修改,常见设置为:
- 波特率:9600bps(最常用)
- 数据位:8位
- 停止位:1位
- 校验方式:无校验(None)
在PLC程序中,这些参数通过特殊寄存器SMB30(端口0)或SMB130(端口1)进行设置。以9600波特率、8数据位、无校验为例,对应的设置值为16#98(十六进制)。
3. 通讯程序设计详解
3.1 程序整体架构
完整的自由口通讯程序包含三个主要部分:
- 初始化程序(首次扫描执行)
- 接收中断程序(数据接收触发)
- 发送中断程序(数据发送完成触发)
程序流程图如下:
code复制开始
│
▼
初始化通讯参数
│
▼
设置中断服务程序
│
▼
发送初始指令
│
▼
等待接收中断
│
▼
[接收中断触发]
│
▼
解析称重数据
│
▼
处理数据并存储
│
▼
准备下次发送
│
▼
[发送中断触发]
│
▼
发送新指令
│
▼
循环等待...
3.2 初始化程序实现
初始化程序在PLC的第一个扫描周期执行(通过SM0.1触发),主要完成以下工作:
stl复制// 网络1:自由口通讯初始化
LD SM0.1 // 首次扫描标志
MOVB 16#98, SMB30 // 设置端口0通讯参数:9600,8,N,1
MOVB 16#98, SMB130 // 设置端口1通讯参数(如使用)
ATCH INT_0, 23 // 关联接收完成中断(事件23)到INT_0
ATCH INT_1, 9 // 关联发送完成中断(事件9)到INT_1
ENI // 全局中断使能
XMT VB0, 0 // 首次发送,VB0为发送缓冲区
关键点说明:
- SMB30/SMB130:自由口控制寄存器,16#98对应二进制10011000,具体含义:
- 位7-5:100=9600波特率
- 位4:1=8位数据
- 位3-2:00=无校验
- 位1:0=1位停止位
- 位0:0=自由口模式
- 中断事件:
- 23:接收完成
- 9:发送完成
- XMT指令:启动发送,VB0为发送缓冲区,0表示端口0
3.3 接收中断程序设计
接收中断程序在每次接收到完整数据帧时自动触发,主要完成数据解析和存储:
stl复制// 网络1:接收数据处理
LD SM0.0 // 始终执行
MOVB SMB2, VB10 // 将接收字节存入VB10
MOVB VB10+4, VB20 // 提取重量数据起始字节
MOVW *VD20, AC0 // 将4字节数据转为字存入AC0
MOVW AC0, VW100 // 存储原始重量值
DIV +100, VW100 // 转换为实际重量(假设需要除以100)
MOVW VW100, VW200 // 存储最终重量值
数据解析说明:
- 托利多电子秤通常返回包含以下信息的帧:
- 起始符(1字节)
- 状态信息(2-3字节)
- 重量数据(4字节,ASCII或二进制格式)
- 结束符(1字节)
- 示例数据帧(十六进制):
02 30 30 31 32 33 34 35 36 03- 02:起始符
- 30 30:状态
- 31 32 33 34:重量数据"1234"
- 03:结束符
- 程序中VB10+4表示跳过前4个字节(假设重量数据从第5字节开始)
3.4 发送中断程序设计
发送中断程序在每次发送完成后触发,可用于准备下一次发送:
stl复制// 网络1:发送后处理
LD SM0.0 // 始终执行
MOVB 16#02, VB0 // 装载起始符
MOVB 16#52, VB1 // 装载读取指令'R'
MOVB 16#0D, VB2 // 装载回车符
MOVB 16#03, VB3 // 装载结束符
XMT VB0, 0 // 启动发送,VB0为缓冲区
常用托利多电子秤指令:
- 连续发送模式:
02 52 0D 03 - 单次发送模式:
02 53 0D 03 - 清零指令:
02 5A 0D 03
4. 实际应用中的关键问题与解决方案
4.1 通讯不稳定问题排查
现象:通讯时断时续,数据偶尔丢失
解决方案:
-
检查物理连接:
- 确认接线正确,无松动
- RS485网络检查A/B线是否接反
- 长距离通讯时检查终端电阻(通常为120Ω)
-
检查参数设置:
- 确认PLC与电子秤的波特率、数据位等参数完全一致
- 检查SMB30/SMB130设置值是否正确
-
程序优化:
- 增加通讯超时监控
- 添加错误计数和重试机制
stl复制// 通讯超时监控示例
LD SM0.0
TON T37, +100 // 100ms定时器
LD T37
MOVB VB0, VB0 // 空操作,实际可添加超时处理
R T37, 1 // 收到数据后复位定时器
4.2 数据解析错误处理
现象:接收到的重量值明显错误
解决方案:
-
添加数据校验:
- 检查起始符和结束符
- 添加和校验或CRC校验
-
数据格式转换:
- ASCII转二进制处理
- 小数点位处理
stl复制// ASCII转二进制示例
LD SM0.0
MOVB VB20, VB30 // 假设VB20-VB23为ASCII码"1234"
ITB VB20, VB40 // 将ASCII"1"转为数字1
*I +10, VB40
ITB VB21, VB41 // 将ASCII"2"转为数字2
+I VB41, VB40
*I +10, VB40
ITB VB22, VB41 // 将ASCII"3"转为数字3
+I VB41, VB40
*I +10, VB40
ITB VB23, VB41 // 将ASCII"4"转为数字4
+I VB41, VB40 // VB40最终值为1234
4.3 抗干扰措施
工业现场电磁环境复杂,需采取以下措施保证通讯稳定:
- 使用屏蔽双绞线,屏蔽层单端接地
- 通讯线远离动力线敷设
- 在PLC输入端增加信号隔离器
- 软件上增加数字滤波
stl复制// 软件滤波示例
LD SM0.0
MOVW VW200, VW210 // 新值
-I VW210, VW220 // 计算差值
ABS // 取绝对值
MOVW +10, VW230 // 设置允许偏差
<=I // 比较
JMP VALID // 差值小则跳转
MOVW VW202, VW210 // 差值大则使用上次值
VALID: MOVW VW210, VW202 // 更新滤波后值
5. 程序优化与扩展功能
5.1 通讯状态监控
添加通讯状态指示灯和错误计数器,便于现场调试和维护:
stl复制// 网络1:通讯正常指示灯
LD SM0.5 // 1Hz时钟脉冲
LD 通讯正常标志
= Q0.0 // 闪烁表示通讯正常
// 网络2:错误计数
LD 接收错误
EU // 上升沿触发
INCW VW300 // 错误计数器加1
MOVW VW300, VW310 // 存储最大错误数
5.2 多电子秤扩展
通过RS485总线可连接多台电子秤,采用轮询方式通讯:
-
硬件连接:
- 所有电子秤A+并联,B-并联
- 每个电子秤设置不同地址
-
程序修改:
- 发送指令中包含目标地址
- 按顺序轮询各电子秤
stl复制// 多设备轮询示例
LD 发送完成
EU // 上升沿触发
INCW VW400 // 设备指针加1
MOVW VW400, AC0
MOD +3, AC0 // 假设3台设备
MOVW AC0, VW400 // 循环0-2
*I +5, AC0
MOVB VB500[AC0], VB0 // 装载对应设备指令
XMT VB0, 0 // 发送指令
5.3 数据记录与上传
将称重数据存入PLC数据块,并通过以太网上传到上位机:
stl复制// 数据存储示例
LD 新数据标志
EU // 上升沿触发
MOVW VW200, VW1000[VW1100] // 存入数据块
INCW VW1100 // 指针加1
MOVW +100, VW1102 // 最大存储数
>=I
MOVW 0, VW1100 // 循环存储
6. 调试技巧与实用建议
-
调试步骤:
- 先用串口调试助手测试电子秤通讯
- 确认电子秤单独工作正常
- 再接入PLC调试
- 使用状态图表监控关键变量
-
常见问题速查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无任何通讯 | 接线错误 电源未接通 通讯参数错误 |
检查接线 测量电源 核对参数 |
| 收到乱码 | 波特率不一致 数据位/校验设置错误 |
核对通讯参数 用示波器检查波形 |
| 数据不更新 | 电子秤未连续发送 PLC接收程序错误 |
检查电子秤模式 调试接收中断程序 |
| 偶尔丢数据 | 线路干扰 程序无超时处理 |
改善布线 添加超时监控 |
- 性能优化建议:
- 关键程序放在主循环开始处
- 中断程序尽量简洁
- 避免在中断中使用复杂运算
- 重要数据双备份存储
通过以上完整的程序实现和调试技巧,您可以构建一个稳定可靠的PLC与电子秤通讯系统。在实际项目中,建议先在小规模测试系统上验证所有功能,再逐步扩展到生产线应用。