1. 三菱Q系列PLC伺服FB程序架构解析
这套伺服定位控制FB程序采用结构化文本(ST)编写,整体架构分为参数配置层、功能实现层和异常处理层三个主要部分。参数配置层使用结构体封装所有轴参数,这种设计在工业控制领域被称为"参数表驱动"编程模式,其最大优势在于调试时能够快速修改参数而不需要重新编译整个程序。
1.1 轴参数结构体设计
轴配置结构体ST_ConfigAxis包含以下核心参数:
- uAxisNo:轴编号(1~32)
- uPlsMode:脉冲输出模式(0=CW/CCW,1=AB相)
- rAccTime/rDecTime:加减速时间(单位ms)
- uORGSpeed:原点回归速度(单位PPS)
实际工程应用中,建议将加减速时间设置为机械系统允许的最大值,这样可以有效减少机械冲击。我们产线上通常设置为300-500ms,具体取决于负载惯量。
结构体参数的单位注释非常重要,特别是当项目需要多人协作时。我们在实际项目中遇到过因为单位混淆导致的严重事故——有工程师把加速度单位误认为mm/s²,而实际程序使用的是rad/s²,导致机械臂运动失控。
2. 核心功能模块实现细节
2.1 轴初始化流程
轴初始化是伺服控制的第一步,包含以下关键步骤:
- 伺服使能信号检查(bServoReady)
- 脉冲输出模块配置(QD75模块参数设置)
- 软极限位置设定(rSoftLimit+/-)
- 默认运动参数加载(速度、加减速)
st复制// 初始化示例代码
IF NOT stAxisStatus.bServoReady THEN
iErrorCode := E_AxisNotReady;
RETURN;
END_IF;
// QD75模块基础配置
MC_ParaSet(
Axis := uAxisNo,
PrmData := stConfigAxis
);
2.2 原点回归功能实现
原点回归采用"Z相+限位开关"的双重确认方式,确保重复定位精度在±1个脉冲内。程序流程如下:
- 高速接近原点(uORGSpeed)
- 触发原点开关后减速
- 搜索Z相信号
- 记录当前位置为机械零点
st复制// 原点回归状态机
CASE iHomeStep OF
0: // 高速接近
MC_HomeStart(
Axis := uAxisNo,
Dir := 0,
HighSpeed:= uORGSpeed
);
iHomeStep := 1;
1: // 等待原点开关触发
IF bORG_SW THEN
MC_Stop(Axis := uAxisNo);
iHomeStep := 2;
END_IF;
2: // 低速搜索Z相
MC_HomeStart(
Axis := uAxisNo,
Dir := 1,
HighSpeed:= uORGSpeed/10
);
iHomeStep := 3;
END_CASE;
2.3 绝对定位控制
绝对定位功能支持两种模式:
- 普通定位(带加减速)
- 高速定位(梯形加减速)
速度换算公式考虑了减速比和机械导程:
code复制实际脉冲频率 = (目标速度 × 减速比 / 导程) × 每转脉冲数
st复制// 速度换算实现
rTargetSpeed := 300.0; // 300mm/s
rGearRatio := 10; // 减速比1:10
uPlsPerRev := 10000; // 每转脉冲数
fLead := 5.0; // 导程5mm
uCommandSpeed := (rTargetSpeed * rGearRatio / fLead) * uPlsPerRev;
3. 异常处理机制设计
3.1 断电恢复流程
突发断电后的恢复流程是这套FB的亮点之一,包含三个阶段:
- 后退安全距离(10mm)
- 重新原点回归
- 恢复目标位置
st复制CASE iRecoveryStep OF
0: // 检测电源恢复
IF bPowerRestored THEN
MoveRelative(-10.0); // 后退安全距离
iRecoveryStep := 1;
END_IF;
1: // 等待后退完成
IF bMotionComplete THEN
SearchHomePosition();
iRecoveryStep := 2;
END_IF;
2: // 原点回归完成
IF bHomeComplete THEN
MoveAbsolute(rTargetPos);
iRecoveryStep := 0;
END_IF;
END_CASE;
3.2 急停处理策略
急停处理有严格的操作顺序:
- 发送减速停止命令(MC_DecStop)
- 等待速度降至安全阈值(<10%额定速度)
- 切断伺服使能(bServoON := FALSE)
血泪教训:直接切断使能会导致电机自由停车,可能造成机械碰撞。我们曾因此损坏过价值20万的模具。
4. 工程实践经验分享
4.1 调试技巧
- 脉冲监控:使用QD75的监视功能确认实际输出脉冲是否符合预期
- 软极限测试:先设置较小的软极限值,测试正常后再调整到实际值
- 加减速调整:用MC_Tune功能自动优化加减速曲线
4.2 常见问题排查
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 电机不动作 | 伺服未使能 | 检查bServoReady信号 |
| 位置偏差大 | 脉冲模式设置错误 | 确认uPlsMode参数 |
| 原点回归失败 | 原点开关接线错误 | 用万用表检测ORG信号 |
| 运动过程中抖动 | 加减速时间过短 | 增加rAccTime/rDecTime |
4.3 扩展应用案例
这套FB程序已经成功应用于以下场景:
- 多轴同步控制(3轴联动机械手)
- 电子齿轮(旋转台与输送带同步)
- 电子凸轮(包装机切刀控制)
上周新增的旋转台项目,仅用2小时就完成程序适配,主要时间花费在:
- 机械安装:45分钟
- 参数配置:15分钟
- 试运行调试:60分钟
5. 代码维护与版本管理
建议采用以下版本管理策略:
- 主版本(V1.0):基础定位功能
- 子版本(V1.1):增加异常恢复
- 修订版(V1.1.1):修复特定bug
每次修改后需要:
- 更新版本注释
- 修改日期标记
- 添加变更说明
st复制// 版本注释示例
(*
版本历史:
V1.0 2023-01-01 初始版本
V1.1 2023-03-15 增加断电恢复功能
V1.1.1 2023-04-20 修复急停时序问题
*)
这套FB程序经过3年实际生产验证,在30台设备上稳定运行,累计完成超过200万次定位动作。其核心价值不在于复杂的算法,而在于严谨的异常处理和可靠的结构设计。对于刚接触三菱Q系列PLC的工程师,建议先从单轴控制开始熟悉,逐步扩展到多轴应用。
