简介这份文档面向CODESYS运动控制初学者与自动化工程师聚焦MC_GearIn功能块的应用解决主从轴电子齿轮同步运动控制的入门问题。内容在MC_Power程序基础上扩展讲解如何创建X、Y两个虚轴并设置模数1通过MC_GearIn配置速比与相位补偿配合MC_MoveVelocity设定主轴速度、MC_Power使能从轴最终实现从轴按主轴速度一半100→50稳定跟随并附主从轴时序图辅助理解。资源包为1个doc文档约134KB结构紧凑适合作为实操参考手册。目前已有2144人学习下载说明其在多轴同步控制学习中具有较高参考价值。读者可借此掌握电子齿轮的速比与相位调节思路理解SoftMotion启动、设备扫描、程序下载及轴使能的完整流程为后续复杂多轴运动控制项目打下基础。1. 从一台虚拟主轴说起MC_GearIn 到底能解决什么如果你在 CODESYS 里调过多轴同步大概率遇到过这种场景一条模拟产线上主轴负责送料从轴负责压合两者必须保持固定速比主轴快从轴也快主轴停从轴也得跟着停。用纯逻辑写位置耦合代码又长又难维护稍微改个速比就要动一大片。MC_GearIn 就是为这类需求准备的——它是 CODESYS SoftMotion 库里的电子齿轮功能块把机械齿轮的速比和相位关系搬到软件层用参数就能调不用改机械结构。这份资源是一份实操文档核心是在已有 MC_Power 程序的基础上增加 MC_GearIn 实现主从轴电子齿轮运动。它适合两类人一是刚接触 CODESYS 运动控制、想搞明白电子齿轮怎么落地的工程师二是已经在用 SoftMotion、但主从轴同步总是调不顺、想找一份可复现参考的从业者。文档里用两个虚轴 X 和 Y 做演示主轴 X 以 100 的速度运行从轴 Y 通过 MC_GearIn 以 1/2 速比跟随最终稳定在 50。这个例子虽小但把电子齿轮的配置、触发、时序关系都串了一遍照着走能少踩不少坑。2. 电子齿轮的底层逻辑速比、相位与轴模式怎么定2.1 电子齿轮不是玄学本质是位置耦合机械齿轮靠齿数比决定速比电子齿轮靠参数决定从轴位置与主轴位置的函数关系。MC_GearIn 做的事就是让从轴的位置跟随主轴位置同时允许你设定一个比例系数和相位偏移。用公式粗略表达就是从轴目标位置 主轴位置 × 速比 相位偏移。速比为 1/2 时主轴走 100从轴走 50相位偏移则用来调整从轴相对于主轴的起始角度比如让从轴晚一点或早一点进入同步。这里有个容易混淆的点MC_GearIn 是“动态”齿轮它允许在运行中改变速比但从轴会按照设定的加减速去逼近新速比而不是瞬间跳变。这一点和 MC_GearInPos 不同后者是位置同步要求从轴在指定位置精确跟上主轴。选型时如果只是速度跟随用 MC_GearIn 就够了如果要求从轴在某个主轴位置必须到达某个从轴位置那得用 MC_GearInPos。2.2 轴模式设为模数 1 的用意文档里把两个虚轴的模式设置为模数 1这不是随便选的。模数模式决定了轴的位置如何回绕。模数 1 意味着轴的位置在 0 到 1 之间循环适合做周期性运动的演示比如旋转轴转一圈归零。对于电子齿轮来说模数模式能让相位关系更直观主轴转一圈从轴按速比转相应的圈数相位偏移直接体现在位置差上。如果设成线性模式位置会一直累加长时间运行可能溢出调试时也不容易看出相位关系。实际项目里选哪种模式取决于机械结构。旋转轴、转盘、飞剪这类周期性动作用模数模式直线模组、长行程送料用线性模式。文档用模数 1 是为了演示方便但你在真实设备上配置时得先确认机械是旋转还是直线再决定模式。2.3 主从轴的角色分配与使能顺序MC_GearIn 有两个关键输入Master 和 Slave。Master 是主轴Slave 是从轴。主轴可以是一个实轴也可以是一个虚轴。文档里用虚轴 X 当主轴好处是不依赖硬件纯软件就能跑通逻辑适合学习和验证。从轴 Y 也是虚轴这样整个演示不需要任何真实驱动器一台电脑就能复现。使能顺序有讲究。必须先让从轴 Y 使能MC_Power再触发 MC_GearIn最后让主轴 X 运动。如果从轴没使能就触发齿轮耦合功能块会报错从轴也不会动。主轴使能可以早于或晚于从轴但建议都先使能再触发运动。文档里的步骤是先对 X、Y 轴使能再触发 MC_MoveVelocity 让主轴跑起来最后触发 MC_GearIn这个顺序是合理的。3. 从零搭一套主从轴同步虚轴配置与功能块接线3.1 添加虚轴并设置模数模式在 CODESYS 里添加虚轴通常是在设备树里右键 SoftMotion 轴选择添加轴然后命名。文档里命名为 X 和 Y。添加后双击轴配置在“轴”选项卡里找到“模数”设置把模数设为 1。有些版本叫“模数周期”或“模数范围”填 1 即可。同时确认“轴类型”是虚轴或仿真轴这样不需要硬件也能运行。配置完轴之后还要检查单位设置。默认可能是脉冲或毫米演示用可以保持默认但真实项目里要按机械参数换算。比如丝杠导程、减速比这些都会影响速比的计算。文档没展开这部分但你在实际用的时候速比不是拍脑袋填的得根据机械传动比反推。3.2 声明 MC_GearIn 与 MC_MoveVelocity 变量在程序里添加功能块实例CODESYS 支持自动声明。操作方式是在工具箱里拖出 MC_GearIn放到程序组织单元里然后右键选择“自动声明”系统会生成一个实例变量比如instGearIn。同样拖出 MC_MoveVelocity 和 MC_Power分别自动声明。下面是一个简化的变量声明示例VAR instPowerX : MC_Power; // 主轴 X 使能 instPowerY : MC_Power; // 从轴 Y 使能 instMoveVel : MC_MoveVelocity; // 主轴速度运动 instGearIn : MC_GearIn; // 电子齿轮耦合 axisX : AXIS_REF; // 主轴引用 axisY : AXIS_REF; // 从轴引用 bEnableX : BOOL : TRUE; // 主轴使能标志 bEnableY : BOOL : TRUE; // 从轴使能标志 bStartMove : BOOL; // 触发主轴运动 bStartGear : BOOL; // 触发齿轮耦合 rVelocity : LREAL : 100; // 主轴目标速度 rRatio : LREAL : 0.5; // 速比 1/2 END_VAR这段声明里axisX和axisY需要关联到之前添加的虚轴。关联方式是在轴配置里把轴引用变量填进去或者在程序里用AXIS_REF类型变量绑定。rRatio设为 0.5对应文档里的 1/2 速比。rVelocity设为 100是主轴的目标速度。3.3 功能块接线与参数含义接下来是功能块调用。MC_Power 负责使能MC_MoveVelocity 负责主轴速度MC_GearIn 负责耦合。下面是一个典型的调用顺序// 主轴 X 使能 instPowerX( Axis : axisX, Enable : bEnableX, bRegulatorOn : TRUE, bDriveStart : TRUE ); // 从轴 Y 使能 instPowerY( Axis : axisY, Enable : bEnableY, bRegulatorOn : TRUE, bDriveStart : TRUE ); // 主轴以固定速度运行 instMoveVel( Axis : axisX, Execute : bStartMove, Velocity : rVelocity, Acceleration : 1000, Deceleration : 1000, Direction : MC_DIRECTION.positive ); // 电子齿轮耦合 instGearIn( Master : axisX, Slave : axisY, Execute : bStartGear, RatioNumerator : 1, RatioDenominator : 2, Acceleration : 500, Deceleration : 500 );MC_GearIn 的参数里RatioNumerator和RatioDenominator组成速比1/2 就是分子 1 分母 2。Acceleration和Deceleration是从轴逼近目标速比时的加减速设太小会跟不上设太大可能过冲。文档里没给具体数值我一般会先设一个和主轴加减速同量级的值再根据实际响应微调。Execute是上升沿触发触发一次后功能块进入 Busy 状态耦合成功后 InGear 输出为 TRUE。3.4 触发时序与运行观察程序下载后先让 X、Y 使能然后给bStartMove一个上升沿主轴开始加速到 100。等主轴速度稳定后再给bStartGear一个上升沿从轴开始加速按照 1/2 速比逼近 50。在示波器或跟踪图里能看到主轴速度曲线先上升后平稳从轴速度曲线滞后一小段然后稳定在主轴的一半。如果从轴一直追不上检查加减速是不是设得太小或者速比分母是不是写反了。文档里提到“速度达到 100 时按固定速度 100 运行”这里要注意MC_MoveVelocity 的 Velocity 是目标速度实际速度会经过加减速过程。触发 MC_GearIn 的时机最好在主轴速度稳定之后否则从轴在主轴还在加速时就耦合速比关系会受主轴加速度影响时序图看起来会有点乱。4. 避坑与排查主从轴不同步的五个血泪经验4.1 从轴不动功能块无报错现象触发 MC_GearIn 后从轴 Y 没有任何动作但功能块也没有 Error 输出。原因通常是轴引用没关联对或者从轴没使能。MC_GearIn 要求 Slave 轴处于使能状态如果 MC_Power 的 Enable 没给或者 bRegulatorOn 为 FALSE从轴不会响应。解决先确认 MC_Power 的 Status 为 TRUE再检查 axisY 是否绑定到了正确的虚轴。有时候自动声明生成的轴引用是空的需要手动在轴配置里关联。4.2 速比设成 1/2 但从轴跑得比主轴快现象明明分子 1 分母 2从轴速度却是主轴的两倍。原因是分子分母填反了或者把速比理解成了主轴/从轴。MC_GearIn 的速比定义是 Slave/MasterRatioNumerator 对应从轴RatioDenominator 对应主轴。1/2 表示从轴速度是主轴的一半。如果填成 2/1从轴就是主轴的两倍。解决记住“分子是从分母是主”或者直接用 Ratio 参数有些版本支持浮点速比填 0.5 更直观。4.3 耦合瞬间从轴猛冲一下现象触发 MC_GearIn 时从轴突然跳一下再稳定。原因是相位偏移没设对或者从轴当前位置和主轴位置不匹配。电子齿轮耦合时从轴会从当前位置按速比关系重新定位如果相位差太大就会产生一个冲击。解决在触发前先把从轴手动移动到大致同步的位置或者用 MC_GearInPos 做位置同步。如果只是速度跟随可以在 MC_GearIn 里设 PhaseShift 参数让从轴平滑过渡。4.4 主轴停止后从轴还在转现象主轴速度降到 0从轴却还在以某个速度运行。原因是 MC_GearIn 的耦合没有解除从轴还在按照之前的速比跟随主轴位置。主轴停了位置不变从轴理论上也应该停但如果从轴有惯性或加减速设置不当会滑行一段。解决在主轴停止后主动调用 MC_GearOut 解除耦合或者让从轴也执行 MC_Halt。文档里没提解除但实际项目里停机顺序必须考虑齿轮脱开。4.5 示波器里从轴速度曲线抖动现象从轴速度稳定后曲线有周期性抖动。原因可能是模数模式下的位置回绕导致的也可能是加减速参数太激进。模数 1 时主轴位置从 1 跳回 0从轴位置也跟着跳如果速比不是整数相位会突变。解决检查模数设置是否适合你的机械如果是旋转轴模数 1 没问题但速比最好选整数比避免回绕时相位错乱。另外把 MC_GearIn 的加减速调小一些让从轴响应更平滑。5. 进阶技巧用跟踪图验证速比与相位5.1 配置跟踪图看主从轴时序CODESYS 的跟踪功能是调运动控制的后悔药。在设备树里添加跟踪对象把 axisX 和 axisY 的 SetPosition、ActPosition、SetVelocity、ActVelocity 都加进去采样周期设 1ms 或 2ms。运行程序后触发主轴运动和齿轮耦合停止跟踪就能看到两条速度曲线。主轴速度先上升到 100从轴速度滞后一段时间后上升到 50两条曲线的比例关系一目了然。跟踪图里重点看三个量主轴速度稳定值、从轴速度稳定值、从轴加速时间。从轴加速时间取决于 MC_GearIn 的 Acceleration 参数和速比。如果从轴加速太慢InGear 信号迟迟不输出可以适当加大 Acceleration。但别加太大否则从轴会过冲速度曲线出现尖峰。5.2 动态改速比验证电子齿轮灵活性电子齿轮相比机械齿轮的一大优势是速比可调。在程序里加一个变量rNewRatio运行中改变它然后重新触发 MC_GearIn 的 Execute或者用 MC_GearIn 的 Ratio 输入如果版本支持动态修改。观察从轴速度如何从 50 平滑过渡到新速比对应的速度。这个过程中从轴会按照 Acceleration 和 Deceleration 去逼近新速度不会瞬间跳变。我一般会做两组测试一组是速比从 1/2 改到 1/3看从轴速度从 50 降到 33.3另一组是从 1/2 改到 1/1看从轴速度升到 100。每次改完用跟踪图确认过渡时间在可接受范围内。如果过渡太慢影响生产节拍就得加大加减速如果过渡太快导致机械冲击就得减小。5.3 相位偏移的实测方法相位偏移在文档里没展开但实际项目中经常用到。比如两个轴要同步但从轴需要比主轴晚 30 度这时候就要设 PhaseShift。测试方法先让主轴以低速运行触发 MC_GearIn观察从轴位置和主轴位置的差值。如果差值和目标相位不符调整 PhaseShift 参数重新触发直到差值稳定在目标值。注意相位偏移的单位取决于轴的配置。如果轴单位是度PhaseShift 就是度如果是毫米就是毫米。模数模式下相位偏移会按模数周期回绕比如模数 1相位偏移 0.25 表示从轴滞后主轴四分之一圈。这个特性在旋转轴同步里很有用比如飞剪、旋切。5.4 从虚轴到实轴的迁移注意点文档用虚轴演示但最终要落到实轴。迁移时轴引用从虚轴换成实轴MC_Power 的 bDriveStart 和 bRegulatorOn 要按驱动器要求设置。实轴的加减速受驱动器限制MC_GearIn 的 Acceleration 不能超过驱动器能力否则会报跟随误差。另外实轴有编码器反馈位置环和速度环参数要整定好否则电子齿轮耦合时会出现振荡。我习惯先在虚轴上把逻辑跑通确认速比、相位、触发时序都对了再切到实轴。切过去之后先把主轴速度设低一点比如 10 或 20观察从轴跟随情况没问题再逐步提速。从那以后我每次做多轴同步都强制先在虚轴上走一遍时序再上实轴这个习惯帮我省了不少现场调试时间。希望帮到你。本文还有配套的精品资源点击获取