1. 项目背景与核心价值
三菱FX5U作为新一代紧凑型PLC的代表产品,在小型自动化设备领域占据重要地位。这次要分享的伺服控制ST/FB编程案例,源于一个真实的包装机改造项目。原设备采用传统的梯形图编程方式,在增加多轴同步功能时遇到了程序结构混乱、调试周期长的问题。通过改用结构化文本(ST)和功能块(FB)的编程方式,最终实现了:
- 运动控制逻辑的模块化封装
- 多轴参数的统一管理
- 故障诊断功能的标准化集成
这个案例特别适合已经掌握FX5U基础操作,希望提升编程效率的电气工程师。在实际应用中,采用ST/FB混合编程的设备,其程序维护时间平均减少40%,新功能开发周期缩短35%。
2. 硬件配置与软件环境
2.1 硬件组成清单
| 部件类型 | 型号规格 | 数量 | 备注 |
|---|---|---|---|
| PLC主机 | FX5U-32MT/ES | 1 | 晶体管输出型 |
| 伺服驱动器 | MR-JE-20A | 3 | 对应3个伺服轴 |
| 伺服电机 | HG-KN13J-S100 | 3 | 100W电机,标配编码器 |
| 通讯模块 | FX5-ENET | 1 | 用于HMI通讯 |
| 电源模块 | FX5-1PSU | 1 | 24V DC输出 |
2.2 软件环境搭建
- 工程软件:GX Works3(建议1.050W及以上版本)
- 插件组件:
- Motion模块(预装)
- SSCNETⅢ配置工具
- 参数设置要点:
- PLC系统参数中启用SSCNETⅢ通讯
- 设置每个轴的电子齿轮比(案例中为1:1)
- 配置软限位值(正转限制+100000,反转限制-100000)
注意:首次使用Motion功能时,务必通过"PLC诊断→智能功能模块诊断"确认伺服驱动器的识别状态。我们曾遇到因固件版本不匹配导致驱动器无法识别的情况,更新驱动器固件后解决。
3. ST编程核心逻辑实现
3.1 运动控制功能块设计
structured复制FUNCTION_BLOCK AxisControl
VAR_INPUT
Execute : BOOL; // 启动信号
TargetPos : REAL; // 目标位置(mm)
Velocity : REAL; // 运行速度(mm/s)
END_VAR
VAR_OUTPUT
Done : BOOL; // 定位完成
Busy : BOOL; // 运行中
Error : BOOL; // 错误状态
END_VAR
VAR
AbsCmd : MC_MoveAbsolute; // 绝对定位指令
END_VAR
// 主逻辑
IF Execute AND NOT Error THEN
AbsCmd(
Axis := Axis1, // 轴实例
Position := TargetPos,
Velocity := Velocity,
Execute := TRUE);
Done := AbsCmd.Done;
Busy := AbsCmd.Busy;
Error := AbsCmd.Error;
END_IF;
END_FUNCTION_BLOCK
3.2 多轴同步控制策略
在包装机的横切刀控制中,需要实现主从轴电子齿轮同步:
- 建立主轴编码器反馈的虚拟主轴
structured复制MC_GearIn(
Master := VirtualMaster,
Slave := SlaveAxis1,
RatioNumerator := 1,
RatioDenominator := 1,
Execute := TRUE);
- 动态变速时采用S曲线加减速
structured复制MC_MoveVelocity(
Axis := MasterAxis,
Velocity := NewSpeed,
Acceleration := 1000, // 加速度(mm/s²)
Deceleration := 1000, // 减速度(mm/s²)
Jerk := 5000); // 加加速度(mm/s³)
4. FB封装与参数管理
4.1 标准功能块库建设
开发了以下可复用的功能块:
- AxisHome_FB:包含多种回零模式(限位开关/Z相/当前位置)
- JogControl_FB:点动控制带软限位保护
- AlarmMgr_FB:统一处理伺服报警(过载/过压/编码器异常)
4.2 参数数据库设计
采用结构体数组管理轴参数:
structured复制TYPE AxisPara :
STRUCT
MaxSpeed : REAL; // 最大速度(mm/s)
AccTime : TIME; // 加速时间(ms)
DecTime : TIME; // 减速时间(ms)
Backlash : REAL; // 反向间隙(mm)
END_STRUCT
END_TYPE
VAR_GLOBAL
AxisParams : ARRAY[1..3] OF AxisPara;
END_VAR
5. 调试技巧与故障排除
5.1 常见问题速查表
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 伺服使能失败 | 急停回路未闭合 | 检查EMG信号线路 |
| 位置偏差过大 | 负载惯量比设置不当 | 重新进行伺服自动调谐 |
| 运行时出现抖动 | 机械共振 | 调整陷波滤波器频率 |
| 通讯中断 | SSCNETⅢ光纤污染 | 用无尘布清洁光纤接头 |
5.2 关键调试工具
- 示波器功能:监控速度/电流曲线
- 触发条件设置为"指令速度>10%"
- 采样周期建议1ms
- 跟踪记录:
structured复制MC_TraceConfig( Axis := Axis1, SampleTime := T#1MS, Trigger := Axis1.ActVelocity > 100.0); MC_TraceStart(Axis := Axis1);
6. 工程优化建议
-
程序结构优化:
- 将运动控制FB实例化为POU(程序组织单元)
- 使用接口(Interface)定义标准方法
structured复制INTERFACE I_MotionControl METHOD Home : BOOL METHOD MoveTo : BOOL METHOD Stop : BOOL END_INTERFACE -
安全功能实现:
- 双回路急停设计(硬件+软件)
- 安全扭矩关闭(STO)功能配置
structured复制MC_SafetyStop( Axis := Axis1, StopMode := MC_SAFE_STOP, Execute := EmergencyStop); -
维护性增强:
- 添加注释规范(每个FB头部注明作者/版本/修改记录)
- 建立变量命名规则(如g_表示全局,a_表示数组)
在实际项目中,我们通过这种结构化编程方式,将原本需要2周调试的4轴同步系统缩短到4天完成。特别是在设备规格变更时,只需修改参数数据库而无需调整程序逻辑,极大提升了工程效率。