1. 项目背景与核心价值
去年接手的一个工业设备改造项目让我彻底重新认识了ST语言和Codesys平台的潜力。客户要求将原有继电器控制的双轴同步系统升级为PLC控制,同时明确提出"禁止使用任何第三方库"的硬性要求。这个看似苛刻的限制,反而让我们团队挖掘出一套纯粹基于原生Codesys功能块的解决方案。
这种纯ST语言实现的双轴同步方案,最大的优势在于彻底摆脱了对特定厂商库文件的依赖。在汽车生产线现场,我看到过太多因为库版本不兼容导致的停机事故。而我们的方案只需要一个标准的IEC 61131-3运行环境,这对设备后期维护和跨平台移植来说简直是福音。
2. 硬件架构设计要点
2.1 选型考量:为什么是汇川AM600
选择汇川AM600系列中型PLC主要基于三个实际考量:
- 运动控制性能:该系列本体支持4轴200kHz高速脉冲输出,我们的双轴系统要求150kHz频率,留有充足余量
- 经济性:相比同等性能的日系品牌,价格优势达到30-40%
- 开发环境:内置完整的Codesys V3.5开发平台,完美支持ST语言开发
现场布线时有个细节值得注意:一定要将伺服驱动器的编码器反馈线(差分信号)与动力线分开走线。我们曾因平行布线导致的位置波动问题,最终通过改用屏蔽双绞线并保持30cm间距解决。
2.2 电气接口配置
st复制// 轴参数配置实例
Axis1.Config.PositionScale := 10000; // 每转脉冲数
Axis1.Config.VelocityScale := 60000; // 转速单位rpm→Hz转换
Axis1.Config.Acceleration := 500000; // 加减速时间0.1s
3. 核心算法实现解析
3.1 主从同步控制逻辑
采用经典的电子齿轮比同步方案,通过实时调整从轴的位置指令来实现同步。核心算法仅用不到50行ST代码实现:
st复制// 主从轴同步计算
IF MasterAxis.ActualPosition <> LastMasterPos THEN
GearRatio := SlaveRatio / MasterRatio;
PositionDiff := MasterAxis.ActualPosition - LastMasterPos;
SlaveAxis.CommandPosition := SlaveAxis.CommandPosition + (PositionDiff * GearRatio);
LastMasterPos := MasterAxis.ActualPosition;
END_IF
这里有个关键技巧:在每次PLC扫描周期开始时读取主轴位置,避免因扫描周期抖动导致的同步误差。我们通过测试发现,这样可以将同步精度稳定控制在±3个脉冲以内。
3.2 动态补偿算法
为应对负载突变情况,我们开发了基于前馈补偿的增强算法:
- 速度前馈:根据主轴加速度预测从轴需要的扭矩
st复制FeedForward := Kv * MasterAxis.ActualVelocity + Ka * MasterAxis.ActualAcceleration; - 位置误差补偿:当同步误差超过阈值时触发PID补偿
st复制IF ABS(SyncError) > ErrorThreshold THEN Compensation := PID(SyncError, Kp, Ki, Kd); END_IF
4. 关键功能块开发
4.1 自定义轴控功能块
完全基于PLCopen标准重新实现了MC_Power等基本功能块。以使能功能块为例:
st复制FUNCTION_BLOCK FB_AxisPower
VAR_INPUT
Enable : BOOL;
Axis : REFERENCE TO AXIS_REF;
END_VAR
VAR_OUTPUT
Status : BOOL;
Error : BOOL;
END_VAR
IF Enable THEN
Axis.Enable := TRUE;
Status := Axis.Status.Enabled;
Error := NOT Axis.Status.Enabled;
ELSE
Axis.Enable := FALSE;
END_IF
4.2 安全功能实现
通过原生Safety功能块实现STO安全扭矩关断:
- 急停信号直接接入安全输入模块
- 安全逻辑与运动控制解耦
- 双通道安全校验设计
st复制// 安全校验逻辑
SafeState := SafetyInput1 AND SafetyInput2;
IF NOT SafeState THEN
Axis1.SafeTorqueOff := TRUE;
Axis2.SafeTorqueOff := TRUE;
END_IF
5. 调试技巧与问题排查
5.1 同步精度优化
通过以下实测方法将同步误差从最初的±15脉冲优化到±2脉冲:
- 使用示波器同时捕捉两轴脉冲信号
- 调整伺服驱动器的电子齿轮比参数
- 优化PLC任务周期(最终稳定在1ms)
重要提示:调试时要先单独调校单轴性能,确认各轴跟随性能达标后再进行同步调试
5.2 典型故障处理
我们整理的现场问题速查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 从轴抖动 | 机械共振 | 调整伺服陷波滤波器频率 |
| 同步偏移 | 编码器干扰 | 检查屏蔽层接地 |
| 启动不同步 | 使能时序错误 | 增加500ms使能延迟 |
6. 性能测试数据
在满负荷运行72小时的耐久测试中,我们记录了关键数据:
| 指标 | 要求值 | 实测值 |
|---|---|---|
| 同步误差 | ≤±5脉冲 | ±1.8脉冲 |
| 响应延迟 | ≤2ms | 1.2ms |
| 位置重复精度 | ±0.01mm | ±0.008mm |
这套方案最终在客户现场稳定运行超过8个月,期间仅因电网波动触发过一次安全保护。最让我自豪的是,整个项目没有使用任何第三方库文件,全部功能都通过原生ST语言实现,这为后续的跨平台移植奠定了完美基础。
