1. 项目背景与需求分析
去年参与的海康威视路由器壳体装配线项目,核心需求是实现壳体自动装配过程中的精确定位与运动控制。作为产线中的关键工位,需要同时协调3台伺服电机和1台电动缸完成壳体抓取、定位、压合等动作,并与上下游PLC保持实时数据交互。
这个项目有几个典型挑战:
- 多轴协同:4个运动轴需要严格同步,位置误差需控制在±0.1mm内
- 节拍要求:单件装配周期不超过8秒
- 异常处理:需实时监测气缸状态,出现卡滞时在100ms内触发急停
- 通讯延迟:与上下游PLC的数据交换周期必须小于50ms
2. 硬件系统架构设计
2.1 核心控制器选型
选用西门子S7-1215C DC/DC/DC PLC作为主控,具体配置如下:
- CPU:1215C(2.3MB工作内存)
- 数字量:16DI/16DO模块(SM1223)
- 模拟量:4AI/2AO模块(SM1234)
- 通讯:CM1243-5 PROFIBUS-DP主站模块
选型考量:1215C支持最多4个轴控(满足项目需求),内置PROFINET接口便于与HMI通讯,扩展PROFIBUS模块可兼容现有产线设备。
2.2 运动系统配置
| 轴类型 | 型号 | 驱动接口 | 功能描述 |
|---|---|---|---|
| 伺服X轴 | 安川SGM7G-1EA6C | PROFIBUS-DP | 水平搬运 |
| 伺服Y轴 | 安川SGM7G-1EA6C | PROFIBUS-DP | 垂直升降 |
| 伺服Z轴 | 松下MINAS A6B | 脉冲+方向 | 旋转定位 |
| 电动缸 | 雅科贝思ELA200 | 模拟量±10V | 压合动作 |
伺服电机参数设置要点:
- 电子齿轮比:根据机械减速比计算(例如1:5减速时设为5/1)
- 位置环增益:初始设为50,根据实际响应调整
- 速度前馈:建议开启(参数FF_GAIN=80%)
3. 软件实现细节
3.1 轴控制块开发
自主开发的AXIS_CTRL功能块包含以下核心功能:
pascal复制FUNCTION_BLOCK AXIS_CTRL
VAR_INPUT
Enable : BOOL; // 轴使能
TargetPos : REAL; // 目标位置(mm)
Velocity : REAL; // 运行速度(mm/s)
Accel : REAL; // 加速度(mm/s²)
END_VAR
VAR_OUTPUT
ActualPos : REAL; // 实际位置
Status : WORD; // 状态字
Error : BOOL; // 错误标志
END_VAR
VAR
// 内部状态机
State : INT := 0;
// 位置容差检测
PosTolerance : REAL := 0.1;
END_VAR
关键控制逻辑:
- 上电自检:检查驱动器就绪信号
- 使能序列:先打开伺服使能,延时50ms后发运行命令
- 位置监控:实时比较目标/实际位置差
- 超程保护:硬限位+软限位双重保护
3.2 多轴同步策略
采用主从同步控制模式:
pascal复制// 主轴(X轴)运动触发
IF X_Axis.StartMove THEN
Y_Axis.SyncPos := X_Axis.ActualPos * 0.75; // 从轴跟随关系
Z_Axis.SyncPos := X_Axis.ActualPos * 0.5;
ELECTRIC_CYL.SyncPos := X_Axis.ActualPos * 0.3;
END_IF
同步精度优化措施:
- 设置相同的控制周期(本项目设为2ms)
- 使用全局时间戳同步各轴指令
- 增加从轴的前馈补偿
4. 通讯系统实现
4.1 PROFIBUS-DP配置
硬件组态参数:
- 传输速率:1.5Mbps
- 站地址:PLC=3,X轴=4,Y轴=5
- 输入/输出区:各32字节
诊断技巧:
- 使用SFC13读取DP从站诊断数据
- 关键报警代码:
- 8180h:通讯中断
- 8250h:参数不匹配
4.2 PUT/GET通讯优化
提升通讯效率的方法:
pascal复制// 发送端(PUT)
IF NOT ComBusy AND (SysTime MOD 50 = 0) THEN // 50ms周期
"PUT_DB".REQ := TRUE;
ComBusy := TRUE;
END_IF
// 接收端(GET)
IF NOT ComBusy AND (SysTime MOD 50 = 5) THEN // 偏移5ms
"GET_DB".REQ := TRUE;
ComBusy := TRUE;
END_IF
数据包设计原则:
- 将频繁变化的数据(如轴位置)放在前4字节
- 状态字按位域组织
- 添加CRC16校验字段
5. 故障处理机制
5.1 气缸监控逻辑
改进后的报警块实现:
pascal复制// 气缸超时检测
IF Cylinder.Cmd AND NOT Cylinder.Fbk THEN
Timer_IN(PT := T#200MS); // 允许响应延时
IF Timer.Q THEN
Alarm_Set(AlarmNo := 101);
Emergency_Stop();
END_IF
END_IF
常见故障处理:
- 信号抖动:增加10ms滤波时间
- 传感器失效:双信号冗余判断
- 机械卡死:增加压力检测
5.2 轴控异常处理
错误恢复流程:
- 立即停止所有轴运动(MC_Halt)
- 记录故障代码和位置数据
- 通过HMI显示恢复指引
- 手动确认后执行回零操作
典型错误代码:
- 16#2531:跟随误差超限
- 16#252A:驱动器故障
- 16#2550:硬限位触发
6. 项目调试心得
-
伺服参数整定技巧:
- 先调速度环(Pn100-Pn102)
- 再调位置环(Pn110-Pn112)
- 最后加前馈(Pn140-Pn142)
-
通讯干扰排查:
- 使用双绞屏蔽电缆
- 终端电阻阻值匹配(220Ω)
- 避免与动力线平行走线
-
运动曲线优化:
- 采用S型加减速(MC_MoveSuperimposed)
- 关键段速度降低20%提升稳定性
- 末端增加0.5s延时确保到位
这个项目积累的轴控模块后来被复用到包装机、贴标机等7个不同设备上,通过参数化设计实现了95%的代码复用率。特别提醒注意伺服电机的制动电阻选型,我们曾因电阻功率不足导致多次过热报警,最终更换为200W电阻才彻底解决。