Codesys 电子齿轮的啮合与脱开控制
电子齿轮功能是实现多轴同步运动的核心技术之一。在 Codesys 环境中,该功能通过标准功能块 MC_GearIn 和 MC_GearOut 实现主轴与从轴之间的比例跟随。主轴运动时,从轴按照设定的电子齿轮比自动调整位置与速度。本文直接讲解如何配置参数、编写控制逻辑以及处理常见啮合问题。
核心原理与计算公式
电子齿轮的本质是建立主轴(Master)与从轴(Slave)之间的数学映射关系。当功能块激活时,从轴的目标位置由主轴的实时位置决定。
齿轮比的计算逻辑如下:
$$ Ratio = \frac{从轴位移量}{主轴位移量} $$
若主轴旋转 1 圈,要求从轴旋转 2 圈,则齿轮比 $Ratio$ 设置为 2.0。若主轴移动 100mm,从轴需移动 50mm,则 $Ratio$ 设置为 0.5。该比值可为正数(同向运动)或负数(反向运动)。
前置环境准备
在开始编程前,确保软件环境已就绪。
- 打开 Codesys 开发环境,新建 或 打开 现有项目。
- 点击 项目树中的
库管理器,添加PLCopen Motion Control库。该库包含所有标准运动控制功能块。 - 配置 轴对象。在项目树中 右键 点击
设备,选择添加轴,分别创建主轴Axis_Master和从轴Axis_Slave。 - 确保 两个轴均已正确配置驱动器参数,并能单独使能运行。
参数配置详解
MC_GearIn 功能块是实现啮合的关键。以下是核心参数的定义与设置建议。
| 参数名 | 数据类型 | 方向 | 说明 |
|---|---|---|---|
Enable |
BOOL | 输入 | 功能块使能信号,置位 后开始处理逻辑 |
Execute |
BOOL | 输入 | 上升沿触发啮合动作,点击 按钮或发送 脉冲 |
Master |
AXIS_REF | 输入 | 关联 主轴对象引用 |
Slave |
AXIS_REF | 输入 | 关联 从轴对象引用 |
Ratio |
LREAL | 输入 | 输入 电子齿轮比,支持小数 |
Superimposed |
BOOL | 输入 | 是否叠加原有运动,通常设为 FALSE |
Done |
BOOL | 输出 | 啮合完成标志,监控 此信号确认状态 |
Busy |
BOOL | 输出 | 功能块忙碌中,禁止 在此期间修改参数 |
Error |
BOOL | 输出 | 报错标志,变为 TRUE 表示失败 |
ErrorID |
UINT | 输出 | 具体错误代码,查阅 手册定位问题 |
注意:表格上方和下方已保留空行,确保渲染正常。在填写 Ratio 时,务必根据机械传动比精确计算,避免累积误差。
逻辑流程设计
啮合与脱开过程是一个典型的状态机流程。为防止逻辑冲突,需严格遵循顺序控制。以下流程图展示了标准的状态转换逻辑。
上述流程中,所有判断条件与动作均需通过变量交互实现。切勿在 Busy 信号为 TRUE 时再次触发 Execute,否则会导致功能块报错。
程序代码实现
使用结构化文本(ST)语言编写控制逻辑。以下代码片段展示了如何实例化功能块并管理状态。
PROGRAM PLC_PRG
VAR
(* 功能块实例 *)
fbGearIn : MC_GearIn;
fbGearOut : MC_GearOut;
(* 控制变量 *)
bEnable : BOOL := FALSE;
bExecute : BOOL := FALSE;
bEngageCmd : BOOL := FALSE;
bDisengageCmd : BOOL := FALSE;
(* 状态记录 *)
eState : (Idle, Engaging, Synced, Disengaging) := Idle;
(* 轴引用 *)
rAxisMaster : AXIS_REF := Axis_Master;
rAxisSlave : AXIS_REF := Axis_Slave;
END_VAR
(* 状态机逻辑 *)
CASE eState OF
Idle:
(* 复位错误 *)
IF fbGearIn.Error THEN
fbGearIn(Enable := FALSE);
END_IF;
(* 准备啮合 *)
IF bEngageCmd AND rAxisMaster.bEnable AND rAxisSlave.bEnable THEN
bExecute := TRUE;
eState := Engaging;
ELSE
bExecute := FALSE;
END_IF;
Engaging:
(* 触发功能块 *)
fbGearIn(
Enable := TRUE,
Execute := bExecute,
Master := rAxisMaster,
Slave := rAxisSlave,
Ratio := 1.0,
Superimposed := FALSE
);
(* 检查完成 *)
IF fbGearIn.Done THEN
eState := Synced;
bExecute := FALSE;
ELSIF fbGearIn.Error THEN
eState := Idle;
bExecute := FALSE;
END_IF;
Synced:
(* 运行中监控 *)
IF bDisengageCmd THEN
eState := Disengaging;
END_IF;
Disengaging:
(* 执行脱开 *)
fbGearOut(
Enable := TRUE,
Execute := TRUE,
Slave := rAxisSlave
);
IF fbGearOut.Done THEN
eState := Idle;
fbGearOut(Enable := FALSE);
END_IF;
END_CASE;
复制 上述代码到你的程序组织单元(POU)中。替换 Axis_Master 和 Axis_Slave 为实际轴名称。编译 项目并下载至控制器。
调试与故障排查
在实际运行中,啮合过程可能会遇到振动、报错或不同步的情况。按照以下步骤进行排查。
- 检查 轴使能状态。确保主轴和从轴在进入
MC_GearIn前均已成功使能。若从轴未使能,功能块将直接报错。 - 监控 误差窗口。部分驱动器配置了跟随误差容限。若齿轮比设置过大导致从轴加速度超限,调整 驱动器的加速度参数或减小齿轮比。
- 验证 信号上升沿。
Execute信号必须是脉冲信号。若保持 为TRUE长信号,功能块可能无法正确识别触发时刻。使用R_TRIG指令生成上升沿。 - 观察 相位差。啮合瞬间,从轴可能会先移动到理论同步位置再开始跟随。若需无冲击啮合,启用
MC_GearIn中的CorrectionFactor参数或配合MC_MoveAbsolute预定位。 - 读取 错误代码。当
Error为TRUE时,查看ErrorID数值。常见代码16#2320通常表示从轴未使能,16#2330表示主轴未使能。 - 确认 通讯周期。运动控制任务的任务周期需足够快。若任务周期大于
4ms,同步精度可能下降。修改 任务配置为1ms或2ms。 - 测试 脱开逻辑。在执行
MC_GearOut后,从轴应保持当前位置或按预定策略停止。若从轴飞车,检查 驱动器抱闸逻辑或使能保持信号。

暂无评论,快来抢沙发吧!