别再硬啃手册了!用CodeSys V3.5的MC_GearIn/GearOut,5分钟搞定电子齿轮同步

张开发
2026/4/5 8:05:40 15 分钟阅读

分享文章

别再硬啃手册了!用CodeSys V3.5的MC_GearIn/GearOut,5分钟搞定电子齿轮同步
别再硬啃手册了用CodeSys V3.5的MC_GearIn/GearOut5分钟搞定电子齿轮同步第一次接触PLC运动控制时电子齿轮同步这个概念让我头疼了好几天。官方手册里那些复杂的参数和抽象的描述简直像天书一样。直到我在CodeSys V3.5中实际动手操作了MC_GearIn和MC_GearOut这两个功能块才发现原来电子齿轮同步可以如此直观和简单。这篇文章就是为那些刚接触PLC运动控制或CodeSys平台的工程师和学生准备的。我们将通过一个具体的、可立即复现的项目示例手把手教你如何在5分钟内搭建一个最简单的双轴同步demo。不需要理解所有复杂概念我们先让你看到效果建立信心然后再深入理解背后的原理。1. 环境准备与基础配置在开始之前确保你已经安装了CodeSys V3.5开发环境并创建了一个新的PLC项目。我们需要做的第一件事是添加必要的库和配置轴参数。1.1 添加MC_Basic库MC_Basic库是CodeSys中遵循PLCopen标准的运动控制库包含了我们需要的所有运动控制功能块。添加方法很简单在项目浏览器中右键点击库管理器选择添加库在搜索框中输入MC_Basic选择最新版本并确认1.2 配置两个虚拟轴为了演示电子齿轮同步我们需要至少两个轴一个主轴和一个从轴。在CodeSys中我们可以使用虚拟轴进行测试VAR Axis1 : AXIS_REF; // 主轴 Axis2 : AXIS_REF; // 从轴 END_VAR在轴配置中为每个轴设置基本参数参数主轴值从轴值说明最大速度10001000单位转/分钟加速度500500单位转/分钟²减速度500500单位转/分钟²急动度10001000单位转/分钟³提示在实际项目中这些参数应根据机械系统的实际能力设置避免超出物理限制。2. 电子齿轮同步的核心功能块电子齿轮同步的核心是两个功能块MC_GearIn和MC_GearOut。理解它们的用法是掌握电子齿轮同步的关键。2.1 MC_GearIn功能块详解MC_GearIn用于建立主轴和从轴之间的电子齿轮关系。下面是它的典型用法GearIn( Master: Axis1, // 主轴引用 Slave: Axis2, // 从轴引用 Execute: TRUE, // 执行命令 ContinuousUpdate: TRUE, RatioNumerator: 1, // 传动比分子 RatioDenominator: 1, // 传动比分母 MasterValueSource: mcSetValue, // 跟随规划值 Acceleration: 1000, // 加速度 Deceleration: 1000, // 减速度 InGear bInGear, // 同步状态输出 Busy bBusy, Active bActive, Error bError, ErrorID nErrorID );几个关键参数需要特别注意RatioNumerator/RatioDenominator决定主从轴速度比。例如2:1表示从轴速度是主轴的2倍MasterValueSource有两个选项mcSetValue从轴跟随主轴的规划值默认mcActualValue从轴跟随主轴的实际值包括手动转动2.2 MC_GearOut功能块使用当需要解除电子齿轮关系时使用MC_GearOutGearOut( Slave: Axis2, // 从轴引用 Execute: TRUE, // 执行命令 Done bDone, Busy bBusy, Error bError, ErrorID nErrorID );注意使用MC_GearOut解除同步后从轴会以分离时的速度继续运动除非有其他指令接管。3. 构建最小可行示例现在让我们把这些知识整合起来创建一个可以立即看到效果的简单示例。3.1 程序结构设计我们创建一个简单的程序包含以下功能轴使能控制主轴速度控制电子齿轮同步控制状态监控程序变量声明如下VAR // 轴引用 Axis1 : AXIS_REF; Axis2 : AXIS_REF; // 功能块实例 Power1 : MC_Power; Power2 : MC_Power; MoveVel1 : MC_MoveVelocity; GearIn1 : MC_GearIn; GearOut1 : MC_GearOut; // 控制变量 bEnable : BOOL : FALSE; bStartMove : BOOL : FALSE; bGearIn : BOOL : FALSE; bGearOut : BOOL : FALSE; fVelocity : LREAL : 100.0; // 默认速度100转/分钟 fRatioNum : LREAL : 1.0; // 默认传动比分子 fRatioDen : LREAL : 1.0; // 默认传动比分母 END_VAR3.2 主程序逻辑在主程序中我们按顺序调用各个功能块// 主轴使能 Power1( Axis: Axis1, Enable: bEnable, Enable_Positive: TRUE, Enable_Negative: TRUE, Override: 0, BufferMode: mcAborting ); // 从轴使能 Power2( Axis: Axis2, Enable: bEnable, Enable_Positive: TRUE, Enable_Negative: TRUE, Override: 0, BufferMode: mcAborting ); // 主轴速度控制 MoveVel1( Axis: Axis1, Execute: bStartMove, Velocity: fVelocity, Acceleration: 500, Deceleration: 500, Direction: mcPositive, BufferMode: mcAborting ); // 电子齿轮同步控制 IF bGearIn AND NOT bGearOut THEN GearIn1( Master: Axis1, Slave: Axis2, Execute: TRUE, ContinuousUpdate: TRUE, RatioNumerator: fRatioNum, RatioDenominator: fRatioDen, MasterValueSource: mcSetValue, Acceleration: 1000, Deceleration: 1000, InGear , Busy , Active , Error , ErrorID ); ELSIF bGearOut THEN GearOut1( Slave: Axis2, Execute: TRUE, Done , Busy , Error , ErrorID ); END_IF4. 实际效果验证与调试技巧现在让我们来看看这个简单示例的实际效果并学习一些实用的调试技巧。4.1 基本功能验证按照以下步骤验证电子齿轮同步功能使能两个轴设置bEnable为TRUE启动主轴运动设置bStartMove为TRUE建立电子齿轮关系设置bGearIn为TRUE此时你应该能看到主轴以设定的速度100转/分钟开始运动从轴立即跟随主轴运动速度由传动比决定GearIn1.InGear信号变为TRUE表示同步已建立4.2 传动比动态修改实验电子齿轮的一个强大特性是可以在运行时动态修改传动比。尝试以下操作在同步状态下将fRatioNum从1改为2观察从轴速度是否立即变为主轴的两倍再将fRatioNum改回1观察从轴速度恢复提示传动比改变时从轴会按照MC_GearIn中设置的Acceleration/Deceleration参数进行平滑过渡。4.3 跟随规划值 vs 跟随实际值MC_GearIn的MasterValueSource参数有两个选项它们的行为差异很大模式行为特点适用场景mcSetValue从轴跟随主轴的规划值主轴必须由运动指令控制精确的速度同步mcActualValue从轴跟随主轴的实际值包括手动转动主轴时的速度手动调试、编码器跟随等场景尝试将MasterValueSource改为mcActualValue然后手动转动主轴如果使用真实轴观察从轴是否会跟随运动。这种模式下即使没有运动指令控制主轴从轴也会响应主轴的实际运动。4.4 常见问题排查在实际使用中可能会遇到一些问题。这里列出几个常见问题及解决方法从轴不跟随运动检查MC_GearIn的Execute信号是否持续为TRUE确认主轴是否确实在运动检查主轴的实际速度验证传动比设置是否正确同步解除后从轴不停这是正常行为MC_GearOut只是解除同步关系如需停止从轴需要额外调用MC_Stop功能块速度波动大检查机械系统是否有松动调整PID参数提高控制稳定性考虑增加滤波参数5. 进阶应用与性能优化掌握了基本用法后我们可以进一步探索电子齿轮同步的高级应用和优化技巧。5.1 多从轴同步电子齿轮模式支持一个主轴驱动多个从轴。只需为每个从轴创建一个MC_GearIn实例// 主轴 - 从轴1 (1:2) GearIn1( Master: Axis1, Slave: Axis2, Execute: TRUE, RatioNumerator: 1, RatioDenominator: 2 ); // 主轴 - 从轴2 (2:1) GearIn2( Master: Axis1, Slave: Axis3, Execute: TRUE, RatioNumerator: 2, RatioDenominator: 1 );这种配置下三个轴的速度关系为从轴1速度 主轴速度 × 1/2从轴2速度 主轴速度 × 2/15.2 动态传动比计算传动比可以动态计算实现更复杂的速度关系。例如根据工艺要求实时计算传动比// 根据工艺条件动态计算传动比 IF bSpecialCondition THEN fRatioNum : 3.0; fRatioDen : 2.0; ELSE fRatioNum : 1.0; fRatioDen : 1.0; END_IF5.3 性能优化建议为了获得更好的同步性能考虑以下优化措施提高任务周期运动控制任务周期越短同步精度越高建议使用1ms或更短的任务周期合理设置加减速度传动比变化时的加减速度应适中过大会导致机械冲击过小会影响响应速度使用硬件同步对于高精度应用考虑使用硬件同步信号如EtherCAT的分布式时钟功能监控同步误差实时计算主从轴的位置误差设置合理的误差容限超限时报警在实际项目中我发现最实用的技巧是在调试初期使用较低的传动比和速度逐步验证系统行为确认无误后再提高参数到实际工作值。这样可以避免因参数设置不当导致的机械冲击或过载。

更多文章