1. 项目背景与核心需求
三菱FX5U系列PLC作为中小型自动化控制系统的核心控制器,在工业现场的应用越来越广泛。特别是在需要高精度运动控制的场景下,如何通过结构化文本(ST)和功能块(FB)实现伺服系统的精准控制,成为很多自动化工程师面临的现实挑战。
这个案例主要解决的是伺服系统在FX5U平台上的程序架构问题。传统梯形图编程在复杂运动控制中往往显得力不从心,而ST/FB的组合能够提供更清晰的逻辑表达和更高的代码复用率。在实际项目中,我们需要实现伺服电机的点位控制、速度控制以及原点回归等基本功能,同时要确保控制的实时性和稳定性。
2. 硬件配置与软件环境
2.1 硬件连接方案
FX5U-32MT/ES作为主控制器,通过内置的脉冲输出端口(Y0/Y1)连接MR-JE-40A伺服驱动器。伺服电机选用HG-KN43J-S100,编码器分辨率17bit(131072脉冲/转)。紧急停止信号接入X0,原点信号接入X1,正/负限位分别接入X2/X3。
重要提示:伺服驱动器的电子齿轮比设置必须与PLC侧的参数匹配,否则会导致实际移动距离与设定值不符。通常按照以下公式计算:
电子齿轮比 = (电机每转脉冲数 × 机械减速比) / (工作台每转移动量 × 指令单位移动量脉冲数)
2.2 软件环境搭建
使用GX Works3 1.050S以上版本,新建FX5U工程时需注意:
- 选择"结构化工程"类型
- 勾选"使用标签"选项
- 在参数设置中启用脉冲输出功能
- 设置正确的CPU型号和I/O分配
3. ST语言程序架构设计
3.1 运动控制功能块设计
创建名为"MC_JOG"的功能块用于手动模式控制:
st复制FUNCTION_BLOCK MC_JOG
VAR_INPUT
Axis : INT; // 轴号
JogPlus : BOOL; // 正转信号
JogMinus : BOOL; // 反转信号
Speed : UINT; // 速度设定
END_VAR
VAR_OUTPUT
CurrentPos : DINT; // 当前位置
END_VAR
VAR
// 内部变量声明
END_VAR
3.2 位置控制核心算法
在ST中实现S型加减速算法,确保运动平滑:
st复制// S曲线速度规划
AccelTime := 200; // 加速时间(ms)
DecelTime := 200; // 减速时间(ms)
MaxSpeed := 100000; // 最大速度(pulse/s)
// 计算瞬时速度
IF (CurrentStep < AccelTime) THEN
CurrentSpeed := MaxSpeed * (CurrentStep/AccelTime)^2;
ELSIF (CurrentStep > (TotalSteps - DecelTime)) THEN
CurrentSpeed := MaxSpeed * ((TotalSteps - CurrentStep)/DecelTime)^2;
ELSE
CurrentSpeed := MaxSpeed;
END_IF;
4. 功能块应用实例
4.1 原点回归功能实现
创建"MC_HOME"功能块实现多种原点回归方式:
st复制METHOD HomeSearch : BOOL
VAR_INPUT
Mode : INT; // 0:DOG搜索, 1:限位器搜索
Speed : UINT;
END_VAR
CASE Mode OF
0: // DOG搜索模式
PLSV K5000 Y0; // 低速搜索
WAIT X1=ON; // 等待DOG信号
PLSV K0 Y0; // 停止
DSZR Y0 X1; // 执行DOG搜索
1: // 限位器模式
PLSV K10000 Y0; // 向正方向移动
WAIT X2=ON; // 碰到正限位
PLSV K0 Y0; // 停止
// 后续处理...
END_CASE;
4.2 多轴同步控制
通过功能块组合实现XY平台同步:
st复制// 调用直线插补功能块
MC_MoveLinear(
AxisX := 1,
AxisY := 2,
TargetX := 100000,
TargetY := 150000,
Speed := 50000,
Accel := 1000,
Decel := 1000);
5. 调试技巧与常见问题
5.1 伺服参数优化步骤
-
先设置基本参数:
- PA01=0002(控制模式:位置控制)
- PA05=100(位置环增益)
- PA06=50(速度环增益)
-
进行刚性调整:
- 逐步提高PA05值直到出现振动
- 回调至振动消失时的80%值
- 同样方法调整PA06
-
最后调整PA07(速度积分补偿)
5.2 典型故障排查表
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 电机不转动 | 伺服未使能 | 检查SON信号和接线 |
| 位置偏差大 | 电子齿轮比错误 | 重新计算并设置PA13/PA14 |
| 运行时振动 | 增益过高 | 降低PA05/PA06值 |
| 脉冲丢失 | 干扰严重 | 检查屏蔽线接地 |
6. 程序优化建议
-
运动轨迹预处理:提前计算并缓存运动轨迹,减少实时计算负荷。对于复杂路径,可以采用样条插值算法平滑过渡。
-
异常处理机制:在每个功能块中添加完善的错误检测和处理逻辑,包括超限检测、超时监控等。
-
状态机设计:采用状态机模式管理运动流程,使程序逻辑更清晰。例如:
st复制CASE CurrentState OF STATE_IDLE: IF StartSignal THEN CurrentState := STATE_ACCEL; END_IF; STATE_ACCEL: // 加速阶段处理 IF Speed >= TargetSpeed THEN CurrentState := STATE_CONST; END_IF; // 其他状态... END_CASE; -
数据记录功能:添加运动过程数据记录功能,便于后期分析和优化。可以记录实际位置、指令位置、速度等关键参数的变化曲线。
在实际项目中,ST/FB的合理运用可以大幅提高程序的可读性和可维护性。特别是在需要频繁修改参数或多轴协调的场景下,结构化编程的优势更加明显。建议从简单功能开始逐步构建自己的功能块库,长期积累将显著提升开发效率。