1. 项目背景与需求解析
在工业自动化控制系统中,PLC与伺服系统的数据交互一直是现场实施的关键环节。最近在给某包装设备做升级改造时,遇到了一个典型需求:需要通过S7-200 SMART PLC实时获取伺服电机的绝对位置信息。这个看似基础的需求,在实际落地时却暗藏不少技术细节。
传统方案中,我们常用脉冲信号来获取伺服电机的位置反馈。但在长距离传输或高精度要求的场景下,这种方式存在信号衰减、抗干扰能力弱等问题。而通过RS485通讯直接读取绝对值编码器数据,不仅传输距离可达1200米(波特率19200时),还能避免脉冲丢失导致的累计误差。
2. 硬件配置与接线要点
2.1 硬件选型清单
- PLC:S7-200 SMART SR20(自带RS485接口)
- 伺服驱动器:台达ASD-A2系列(支持MODBUS-RTU协议)
- 绝对值编码器:多摩川TS5700N系列(17位单圈绝对值)
- 通讯电缆:Belden 9842双绞屏蔽电缆
2.2 接线规范与避坑指南
RS485接线最怕的就是信号反射和干扰,在实际调试中我总结出几个关键点:
-
终端电阻配置:
- 当通讯距离超过50米时,必须在总线两端的A-B线间并联120Ω终端电阻
- 使用PLC侧的SB接法时,注意CM端子必须接地
-
屏蔽层处理:
bash复制
PLC端:屏蔽层单端接地(接PE端子) 伺服端:屏蔽层悬空不接 -
极性校验:
曾经遇到过A/B线接反导致通讯失败的情况,后来养成了用万用表测量电压差的习惯:- 正常时:A线对地+2~+6V,B线对地-2~-6V
- 接反时:电压极性相反
3. 通讯协议深度解析
3.1 MODBUS-RTU寄存器映射
以台达ASD-A2伺服为例,关键寄存器地址如下:
| 寄存器地址 | 数据类型 | 功能说明 | 字节顺序 |
|---|---|---|---|
| 0x6064 | INT32 | 实际位置值 | 高位在前 |
| 0x606C | INT32 | 实际速度值 | 高位在前 |
| 0x6077 | INT16 | 扭矩实际值 | 低位在前 |
特别注意:不同品牌伺服的寄存器地址和字节顺序可能不同,三菱和安川的字节顺序就经常是反的
3.2 报文格式详解
一个完整的位置读取请求报文示例:
code复制从站地址:01
功能码:03(读保持寄存器)
起始地址:00 64(0x6064 - 0x6000)
寄存器数量:00 02
CRC校验:自动计算
对应的响应报文结构:
code复制[从站地址][功能码][字节数][数据高位][数据低位][CRC]
4. PLC程序实现细节
4.1 通讯初始化设置
在S7-200 SMART中需要配置以下参数:
pascal复制// 端口初始化
MOV_B 16#09, SMB30 // 波特率19200,8数据位,无校验
MOV_B 16#04, SMB87 // 启用接收器,检测空闲线
MOV_W 1000, SMW90 // 消息间超时1秒
MOV_W 5, SMW92 // 接收超时5ms
4.2 核心通讯程序
采用状态机方式实现通讯流程:
pascal复制NETWORK 1: 通讯状态机
LD SM0.0
MOV_B VB100, VB101 // 当前状态存储
NETWORK 2: 空闲状态
LD V101.0
= M0.0 // 空闲标志
NETWORK 3: 发送请求
LD M0.0
MOV_D &VB200, VD102 // 发送缓冲区地址
MOV_B 8, VB106 // 发送字节数
XMT VB200, 0 // 触发发送
4.3 数据转换处理
由于MODBUS返回的是32位整数,而实际位置值可能有正负,需要进行数据类型转换:
pascal复制NETWORK 4: 数据解析
LD SM0.0
MOV_D VD300, VD304 // 原始数据
DTR VD304, VD308 // 转浮点数
/R 10000.0, VD308 // 根据编码器分辨率缩放
5. 现场调试经验实录
5.1 典型故障排查表
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 通讯超时 | 终端电阻未接 | 在末端设备加120Ω电阻 |
| 数据跳变 | 接地环路干扰 | 改为单点接地 |
| CRC校验错误 | 波特率不匹配 | 核对所有设备波特率设置 |
| 只能读不能写 | 寄存器地址错误 | 确认写寄存器功能码为06/10 |
5.2 抗干扰实战技巧
-
电缆敷设:
- 绝对不要与动力电缆平行走线,最小交叉角度应大于30°
- 在控制柜内走线时,RS485电缆要远离变频器至少20cm
-
接地处理:
bash复制
// 正确的接地方式 PLC接地电阻 < 4Ω 伺服驱动器接地与PLC共地 屏蔽层在PLC端接PE端子 -
波特率选择经验:
- 50米内:115200bps
- 200米内:57600bps
- 500米内:19200bps
- 超过500米:9600bps
6. 性能优化进阶方案
6.1 通讯周期优化
通过测试发现,原始方案的读取周期只能做到100ms。经过以下优化可提升至20ms:
- 使用MODBUS功能码23(读/写多个寄存器)
- 将多个数据请求合并为一个报文
- 在PLC中启用端口中断(中断事件9)
优化后的程序结构:
pascal复制NETWORK 5: 中断优化
LD SM0.1
ATCH INT_0, 9 // 绑定接收完成中断
ENI // 全局中断使能
INT_0:
MOV_B VB150, VB151 // 快速处理接收数据
6.2 数据滤波算法
针对现场振动导致的位置波动,在PLC中实现移动平均滤波:
pascal复制NETWORK 6: 滤波算法
LD SM0.0
MOVR VD400, VD404 // 新采样值
+R VD408, VD404 // 累加和
MOVR VD404, VD412
/R 10.0, VD412 // 10点平均
FIFO VD412, VD416 // 更新历史队列
7. 系统集成注意事项
-
编码器溢出处理:
- 17位编码器每转131072个脉冲
- 需在PLC中实现圈数计数功能
pascal复制NETWORK 7: 圈数计算 LD SM0.0 LPS MOVR VD500, VD504 // 当前位置 MOVR VD508, VD512 // 上次位置 -R VD512, VD504 // 计算差值 LRD LPP -
多轴同步方案:
- 采用广播地址(0x00)同时触发多个伺服
- 在同一个通讯周期内读取所有轴位置
- 使用S7-200 SMART的PORT1和PORT2实现双通道并行通讯
经过三个月的现场验证,这套方案在包装生产线上实现了±0.1mm的重复定位精度,通讯成功率稳定在99.98%以上。最关键的是,相比原来的脉冲方案,再没有出现过因干扰导致的位置丢失问题。