1. 项目概述:当新手遇上双轴同步控制
第一次接触汇川中型PLC的双轴同步项目时,我的手心全是汗。作为工业自动化领域的经典难题,同步控制往往意味着复杂的算法和晦涩的文档,但当我真正用ST(结构化文本)语言实现两个伺服电机的精准协同后,发现这条路其实可以走得很踏实。
汇川中型PLC(如AM400系列)在包装机械、纺织设备等场景中,经常需要实现双轴甚至多轴的同步运动。传统做法是直接调用现成的功能块,但这就像用黑箱魔术——看似简单却难以驾驭异常情况。而用ST语言从底层实现,不仅能深入理解电子齿轮、主从跟随等同步原理,更能培养出解决实际问题的"肌肉记忆"。
提示:ST语言是IEC 61131-3标准中的高级PLC编程语言,语法类似Pascal,比梯形图更适合数学运算和流程控制。
2. 硬件配置与基础概念
2.1 最小系统搭建
我的实验平台包括:
- 汇川AM401-0E08DPLC主机(支持4轴脉冲输出)
- 两个IS620P系列伺服驱动器+电机
- 24V开关电源
- 简易同步测试台(用联轴器连接两个电机轴)
接线时特别注意:
- 脉冲方向信号(PUL+/PUL-, DIR+/DIR-)必须使用双绞屏蔽线
- 伺服驱动器的使能信号(SON)建议由PLC的DO点控制
- 务必在PLC和驱动器侧加装终端电阻(通常120Ω)
2.2 关键参数速查表
| 参数项 | 典型值 | 说明 |
|---|---|---|
| 电子齿轮比 | 10000:1 | 每转脉冲数 |
| 同步周期 | 2ms | PLC运动控制周期 |
| 最大跟随误差 | 10脉冲 | 超出则触发报警 |
| 加减速时间 | 200ms | S曲线加减速参数 |
3. ST语言实现核心同步逻辑
3.1 主从轴基础绑定
pascal复制PROGRAM MAIN
VAR
// 轴参数声明
MasterAxis: AXIS_REF;
SlaveAxis: AXIS_REF;
// 同步控制变量
GearRatio: REAL := 1.0; // 默认1:1传动比
SyncError: INT;
END_VAR
// 主循环
IF MasterAxis.Enabled AND SlaveAxis.Enabled THEN
// 电子齿轮同步核心算法
SlaveAxis.CommandPosition := MasterAxis.ActualPosition * GearRatio;
SyncError := SlaveAxis.ActualPosition - SlaveAxis.CommandPosition;
// 误差过大保护
IF ABS(SyncError) > 10 THEN
EmergencyStop();
END_IF
END_IF
这段代码实现了最基本的电子齿轮同步。几个关键点:
AXIS_REF是汇川PLC的轴对象数据类型,包含位置、速度等属性- 实际项目中需要加入滤波算法处理
ActualPosition的噪声 - 工业现场建议用
CommandPosition而非ActualPosition计算,避免反馈延迟
3.2 动态变速同步技巧
在印刷机械中,经常需要运行时动态调整速比。我的实现方案:
pascal复制FUNCTION DynamicGearSync : BOOL
VAR_INPUT
NewRatio: REAL;
RampTime: TIME;
END_VAR
VAR
t: TIME;
StartRatio: REAL;
END_VAR
// 平滑过渡算法
StartRatio := CurrentGearRatio;
FOR t := 0 TO RampTime BY T#1ms DO
GearRatio := StartRatio + (NewRatio - StartRatio) * (t/RampTime);
DELAY(T#1ms); // 实际项目用定时器中断更可靠
END_FOR
RETURN TRUE;
注意:直接突变GearRatio会导致电机抖动,必须采用线性或S曲线过渡。实测RampTime设为机械系统固有周期的3倍以上最稳定。
4. 进阶:相位同步与纠偏
4.1 相位锁定实现
在卷绕设备中,除了速度同步还需要保持固定相位差:
pascal复制// 相位补偿算法
SlaveAxis.CommandPosition :=
MasterAxis.ActualPosition * GearRatio
+ PhaseOffset * (2*3.14159/10000); // 将偏移量转换为脉冲当量
// 自动寻相程序示例
IF FindPhaseMode THEN
PhaseOffset := 0;
WHILE ABS(SyncError) > 5 DO
PhaseOffset := PhaseOffset + 1;
DELAY(T#10ms);
END_WHILE
FindPhaseMode := FALSE;
END_IF
4.2 抗扰动策略
现场常见的振动问题解决方案:
- 软件滤波:对ActualPosition进行移动平均滤波
pascal复制FilteredPos := FilteredPos * 0.9 + ActualPosition * 0.1; - 前馈补偿:根据加速度预测位置变化
pascal复制FeedForward := Acceleration * 0.001 * GearRatio; // 系数需实测调整 - 双闭环控制:增加速度环PID调节
5. 调试实战经验录
5.1 必调参数清单
- 伺服刚性参数(Pn100系列):
- Pn102(速度环增益):从小值逐步增加至刚好不振荡
- Pn103(速度环积分):通常设为增益的1/10
- PLC运动参数:
- 加减速时间必须大于伺服驱动器的速度环响应时间
- 电子齿轮比建议分子分母都小于10000
5.2 典型故障排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 从轴周期性抖动 | 机械共振 | 调整伺服陷波滤波器 |
| 高速时失步 | 脉冲频率超限 | 检查PLC最大输出频率 |
| 启动瞬间不同步 | 使能信号时序问题 | 确保主从轴同时使能 |
| 断电后位置丢失 | 未配置绝对值编码器 | 更换电池或改用SSI编码器 |
6. 工程化改进建议
6.1 安全功能实现
工业设备必须加入这些保护逻辑:
pascal复制// 硬件限位处理
IF MasterAxis.PositiveLimit THEN
MasterAxis.DecelerateStop();
END_IF
// 软件限位
IF SlaveAxis.CommandPosition > MaxAllowPos THEN
SlaveAxis.ServoOff(); // 立即断电
END_IF
// 同步状态监控
SyncHealth := ABS(SyncError) < MaxError
AND SlaveAxis.InPosition
AND NOT MasterAxis.Error;
6.2 性能优化技巧
- 将运动控制代码放在2ms的中断任务中
- 使用
CASE语句替代多层IF判断 - 关键变量声明为
AT %QW直接映射到IO内存 - 禁用未使用的轴对象以减少扫描周期
7. 从实验室到产线的关键跨越
第一次将这套代码应用到真实的薄膜分切机时,经历了这些实战考验:
-
EMC问题:车间变频器导致脉冲信号受扰
- 解决方案:改用差分信号传输,脉冲线远离动力线30cm以上
-
机械背隙:导致回程时同步误差增大
- 补偿方案:在换向时增加额外的脉冲补偿量
-
温度漂移:连续运行后丝杠热变形
- 应对措施:每2小时自动执行一次参考点复归
这套ST语言实现的同步方案,现在已稳定运行在某包装产线上超过6000小时。最大的体会是:理解底层原理后,面对现场各种异常时,你会有种"透视"设备的能力——能通过现象快速定位到代码中的某个变量或算法环节。这或许就是工程师的终极快乐。