1. 项目概述与适用场景
这个双轴同步控制项目特别适合刚接触PLC运动控制的工程师练手。我用汇川AM/AC系列PLC配合纯ST语言开发,完全基于Codesys原生功能块构建,不依赖任何第三方库。这种"裸奔"式开发虽然前期工作量稍大,但能让你彻底吃透运动控制的底层逻辑。
注意:项目在1.6.2SP2及以上版本的InoProShop软件中测试通过,兼容AM400/600和AC700/800全系PLC。仿真模式同样可用,但建议有条件的话还是接真实伺服体验效果。
2. 硬件配置与软件环境搭建
2.1 硬件选型建议
虽然项目支持虚拟驱动仿真,但真实硬件配置更能体现工业场景:
- 主控制器:汇川AM401-0.8KW(经济型首选)
- 伺服驱动:IS620P系列(配套电机建议200W)
- IO模块:AM600-1600EN(16点输入/16点输出)
- 电源模块:AM600-24V(为IO模块供电)
2.2 软件环境配置
安装InoProShop时要注意:
- 必须勾选"运动控制"组件
- 安装后检查许可证管理器中"SoftMotion"是否激活
- 建议关闭杀毒软件实时防护(曾遇到误删编译缓存的情况)
3. ST语言核心编程技巧
3.1 枚举类型的高级应用
除了基础状态定义,枚举还可以实现状态机:
st复制TYPE AxisState :
(
IDLE := 0,
HOMING := 1,
JOGGING := 2,
SYNCING := 3,
ERROR := 16#FF
);
END_TYPE
技巧:用16进制值定义错误状态,便于与HMI通讯时识别异常。
3.2 结构体的工程化设计
推荐分层设计结构体:
st复制TYPE AxisBasicPara :
STRUCT
GearRatio : REAL; // 减速比
PulsePerRev : UDINT; // 每转脉冲数
END_STRUCT
END_TYPE
TYPE AxisDynamicData :
STRUCT
ActualPos : LREAL;
CommandPos : LREAL;
ActualVel : REAL;
END_STRUCT
END_TYPE
好处:基础参数与动态数据分离,便于参数持久化存储。
4. 双轴同步实现详解
4.1 虚主轴配置关键点
在SM3_Controller中配置虚拟轴时:
- 设置AxisType为VIRTUAL_AXIS
- 将EncoderResolution设为10000(虚拟轴分辨率)
- 勾选EnableSimulation模式
4.2 从轴跟随算法实现
核心同步代码优化版:
st复制// 比例因子计算(考虑机械传动比)
ScaleFactor1 := Slave1.GearRatio / Master.GearRatio;
ScaleFactor2 := Slave2.GearRatio / Master.GearRatio;
// 带加速度限制的位置同步
IF ABS(Master.ActualVel * ScaleFactor1 - Slave1.ActualVel) < MaxAcc THEN
Slave1.CommandPos := Master.ActualPos * ScaleFactor1;
END_IF
经验:增加加速度限制可避免急启停时的机械冲击。
5. 调试技巧与故障排查
5.1 常见报警处理
| 报警代码 | 含义 | 解决方案 |
|---|---|---|
| 16#8001 | 跟随误差过大 | 检查ScaleFactor计算是否正确 |
| 16#8002 | 从轴使能失败 | 确认驱动器电源和使能信号 |
| 16#8003 | 虚主轴未初始化 | 重新执行MC_Power功能块 |
5.2 示波器功能妙用
利用Trace功能监测同步精度:
- 添加Master.ActualPos和Slave1.ActualPos变量
- 设置采样周期为10ms
- 触发模式选择Cycle Trigger
- 观察两曲线相位差应小于5个脉冲
6. 工程优化建议
- 增加软极限保护:
st复制IF Slave1.CommandPos > PosUpperLimit THEN
Slave1.CommandPos := PosUpperLimit;
RAISE AxisError;
END_IF
- 实现动态比例调节:
st复制// 根据位置区间自动调整速比
CASE Master.ActualPos OF
0..100: ScaleFactor := 1.0;
100..200: ScaleFactor := 1.2;
ELSE
ScaleFactor := 1.5;
END_CASE
- 添加平滑过渡算法:
st复制// 一阶低通滤波
FilteredPos := FilteredPos + 0.2 * (RawPos - FilteredPos);
这个项目最让我惊喜的是汇川PLC对ST语言的完整支持度,相比某些日系品牌,用ST开发运动控制程序要顺手得多。特别是在处理复杂数学运算时,LREAL数据类型的精度完全满足纳米级定位需求。建议初学者可以先用虚拟轴练手,等同步逻辑调通后再接实物伺服,这样能避免很多不必要的设备损坏风险。