ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

三菱PLC转汇川Easy320:JOG点动与电子齿轮比实战指南

三菱PLC转汇川Easy320:JOG点动与电子齿轮比实战指南 先说结论如果你从三菱PLC转到汇川PLC做轴控JOG功能往往就是第一道坎。我在现场见过太多人梯形图写得飞起一打开汇川 Easy320 的 Codesys 界面就开始怀疑人生——轴在哪里、使能怎么写、点动按钮为什么按一下动一下然后就不动了这篇文章我会用一套实际跑过的设备方案汇川 Easy320 GL20-2HC 高速计数模块 三菱 JE-A 伺服带 5:1 减速器和 5M20 同步轮线速度 0.8 米每秒从头拆一遍 JOG 怎么写、多轴怎么扩、以及怎么避开那些从三菱思维切换过来时必踩的坑。适合正在做汇川中小型轴控项目、或者打算从三菱生态迁移过来的工程师参考。1. 项目需求拆解这台设备到底要控什么1.1 先还原现场工况这套系统的原始需求说白了并不复杂一条输送线要求稳定跑 0.8 m/s 的线速度。机械部分用的是一条 5M20 同步轮带同步带伺服电机经过 5:1 减速器带动同步轮。同步轮口径意味着什么5M20 的意思是节距 5mm、20 齿周长就是 20 × 5 100mm。也就是说同步轮转一圈输送线走 100mm而电机要转 5 圈同步轮才转 1 圈。把这个速度换算到电机侧线速度 800 mm/s ÷ 100mm/圈 8 圈/秒的同步轮转速再乘减速比 5电机转速就是 40 转/秒也就是 2400rpm。这个转速对伺服电机来说在额定范围内没问题。但问题从来不在转速而在你用什么方式把“电机转 40 圈/秒”这件事表达给驱动器。同时这套系统还要解决一个问题电机轴的编码器反馈只能代表电机转子位置机械上减速器间隙、同步带打滑、同步轮磨损都会让实际线速度与理论值发生偏差。所以项目里专门增加了 GL20-2HC 高速计数模块接外部脉冲传感器用来采集实际输送线的位移和速度做反馈修正用。这也是三菱 FX3U 时代比较少见的玩法但它恰恰是汇川中型 PLC 扩展 IO 的常规操作。1.2 为什么选 Easy320 GL20-2HC而不是沿用三菱 FX5U这里先把话说清楚不是三菱不能用而是在这道题里汇川这套组合更贴合需求。Easy320 本身是汇川面向小型设备推出的 PLC最大亮点是编程环境底层基于 Codesys 内核InoProShop轴控对象、PLCopen 功能块一应俱全。这跟三菱 FX5U 用 GX Works3 的“定位指令特殊继电器”完全是两种编程范式。GL20-2HC 是汇川 GL20 远程/本地 I/O 系列里的 2 路高速计数模块支持 AB 相、脉冲方向、上下计数等模式单路最高 200kHz。它专门用来接外部编码器或脉冲型传感器。在这套系统里三菱那边如果要实现同样功能要么用 FX5U 本体高速计数器加扩展要么也是加模块但整体编程思路仍然是“每个计数器单独处理”。汇川这边则可以把外部计数器的值直接映射到软件变量跟轴控逻辑放在同一个程序里数据流通顺畅很多。再加上成本因素Easy320 加一个 GL20-2HC 模块的费用比同档次三菱 PLC 加定位模块加高速计数模块的组合通常要低一截。对于小设备、OEM 项目来说这个优势很实际。1.3 三菱用户转汇川之前必须认清的三个底层差异第一编程习惯从“梯形图思维”切换到“对象思维”。三菱 FX 系列定位控制主要靠 PLSY、DDRVI、DDRVA 这些指令配合 M8340、M8348 之类的特殊继电器你心里想的是“发多少脉冲、方向、停止”汇川 Codesys 里你操作的是一个 AXIS_REF 轴对象通过 MC_Power、MC_MoveVelocity、MC_MoveAbsolute 这些功能块去控制这个对象。指令和功能块的最大区别是功能块要持续调用轴是“带状态的对象”而不是“一条发完就结束的指令”。第二任务扫描机制不同。三菱的梯形图扫描就是 PLC 本体程序从头扫到尾定位指令在扫描里被处理Codesys 里你需要明确把轴控程序放在快速任务比如 1ms 或 2ms里普通逻辑放慢速任务混在同一个 10ms 任务里做轴控会出现响应慢、加减速顿挫的问题。这个坑三菱用户几乎必踩。第三数据对象层面三菱是靠 D 寄存器、特殊继电器来搭程序汇川则可以直接声明变量、结构体、功能块轴的位置、速度、状态都是轴对象自带的属性。刚开始会觉得“虚”但一旦你接受了这种模型多轴扩展的代码量反而会大幅下降。2. 动手写 JOG 之前先把脉冲频率和电子齿轮算明白2.1 一个很多人忽略的计算0.8m/s 需要多高的指令脉冲频率很多从三菱转过来的工程师拿到 JE-A 伺服的第一反应是参数默认 1:1 电子齿轮比然后开始写程序。这是最大的一颗雷。JE-A 伺服电机的编码器分辨率是 131072 脉冲/圈17bit。如果驱动器电子齿轮比是 1:1那么 PLC 每输出 1 个脉冲电机位置环等效走 1 个编码器脉冲电机转一圈需要 131072 个指令脉冲。前面算过0.8m/s 对应电机 40 转/秒。40 × 131072 5,242,880Hz约 5.24MHz。这个数字放在任何小型 PLC 的脉冲输出口上都是“不可能任务”——Easy320 本体高速输出按常规 200kHz 算差了 26 倍。哪怕你用更高规格的 500kHz 脉冲模块也远远不够。结果就是程序看着没问题一跑高速脉冲跟不上电机要么报警要么直接丢步。所以做脉冲型伺服控制第一步永远是先核算指令脉冲频率。2.2 电子齿轮比怎么设用需求反推参数伺服驱动器的电子齿轮比本质是一个倍率 G。外部输入 1 个指令脉冲相当于位置环里的 G 个编码器脉冲。G 越大电机转一圈需要的指令脉冲越少同样的线速度下指令频率就越低但位置分辨率也会变粗。反推过程0.8m/s 时电机转速是 40 转/秒。我们希望在不超过输出口额定频率的前提下尽量保留位置精度。如果 PLC 输出口是 200kHz那电子齿轮比至少要知道40 × 131072 / G ≤ 200000也就是 G ≥ 26.2。取整后G 32 或 64 都可行。用 G 64 来算电机转一圈需要 131072 / 64 2048 个指令脉冲0.8m/s 时指令频率 40 × 2048 81920Hz约 82kHz留了足够余量。位置分辨率呢同步轮转一圈走 100mm对应电机转 5 圈也就是 5 × 2048 10240 个指令脉冲。单个脉冲对应的位移是 100 / 10240 ≈ 0.0098mm也就是约 9.8μm。对 0.8m/s 的输送线来说这个精度绰绰有余。如果换成 G 32分辨率变成约 4.9μm0.8m/s 时指令频率约 164kHz还在 200kHz 以内但余量已经不大。具体选哪个还要看驱动器允许的电子齿轮比范围。JE-A 这类伺服的电子齿轮比上限通常有明确限制设置前翻一下驱动器手册超范围会直接报警。2.3 外部脉冲传感器与 GL20-2HC 的接线设计GL20-2HC 在这个方案里的角色是“第二只眼睛”——它不控制伺服而是独立采集现场脉冲传感器的信号。接外部编码器时常见的是 AB 相正交信号也有简单的单相脉冲方向。GL20-2HC 支持差分输入和集电极开路输入接法上要注意传感器如果是 NPN 开路集电极输出模块输入公共端要接对极性。很多三菱用户之前习惯了 FX3U 输入端的 S/S 端子接法但汇川模块的源型/漏型定义可能相反不确认贸然接上轻则读不到数重则烧通道。脉冲线必须用双绞屏蔽线屏蔽层单端接地。GL20-2HC 虽然标称 200kHz但现场变频器、伺服驱动器就在旁边干扰问题从来不是模块能力问题而是接线习惯问题。传感器供电建议单独用一路 24V 开关电源不要和伺服控制电共用。伺服母线启停瞬间电压波动很容易造成计数瞬跳。接线确认后在 InoProShop 里把 GL20-2HC 的通道映射到 PLC 输入区程序里直接读 DINT 变量就行。后面做速度闭环修正时这个值就是实际线速度的脉冲表示。3. JOG 点动功能实战用 PLCopen 轴对象替代三菱 PLSY3.1 Easy320 的轴控库与任务配置在 InoProShop 里新建工程后轴控相关的功能块来自 PLCopen 库。Easy320 本体的高速输出会被封装成一个或多个 AXIS_REF 轴对象你不需要自己写底层脉冲输出逻辑只要给轴对象配置参数比如每转反馈脉冲数131072电机每转用户位移20mm因为电机转 1 圈同步轮走 100 / 5 20mm用户单位mm最大速度、加速度、减速度这里刻意把用户单位设成 mm而不是把脉冲数直接当用户单位。三菱时代大家习惯直接“发脉冲”显示面板上还得自己乘系数汇川轴控里把缩放关系配好后程序里所有速度、位置都直接是工程单位调试时非常直观。任务配置方面轴控程序必须放到快速任务里。推荐建一个 2ms 的 Motion_Task轴控逻辑全放进去普通逻辑放默认 10ms 任务。两个任务之间通过全局变量交换信号不允许普通任务里直接调用轴控功能块。3.2 一个能跑通的 JOG 点动代码示例下面这段是完整的 JOG 控制逻辑用 Codesys 结构化文本ST写的。代码里包含电源使能、正反向点动、停止和复位PROGRAM Axis_JOG VAR Axis_Main : AXIS_REF; // Easy320 封装的脉冲轴对象 diPower : MC_Power; diMoveVel : MC_MoveVelocity; diStop : MC_Stop; diReset : MC_Reset; xEnable : BOOL; // 伺服使能 xJogCW : BOOL; // 正向点动按钮 xJogCCW : BOOL; // 反向点动按钮 xStop : BOOL; // 停止按钮 xResetCmd : BOOL; // 复位报警 rJogSpeed : REAL : 80.0; // 点动速度 mm/s运行速度的 1/10 rAcc : REAL : 500.0; // 加速度 mm/s^2 rDec : REAL : 500.0; // 减速度 mm/s^2 xJogCW_Edge : BOOL; xJogCCW_Edge: BOOL; END_VAR// 1. 轴使能点动前必须保证 Enable 为 TRUE diPower( Enable : xEnable, Axis : Axis_Main ); // 2. 正向/反向点动带互锁和上升沿处理 xJogCW_Edge : xJogCW AND NOT xJogCCW; xJogCCW_Edge : xJogCCW AND NOT xJogCW; diMoveVel( Axis : Axis_Main, Execute : (xJogCW_Edge OR xJogCCW_Edge) AND NOT xStop, Velocity : rJogSpeed, Direction : SEL(xJogCW_Edge, 1, 2), Acceleration : rAcc, Deceleration : rDec, Jog : TRUE ); // 3. 停止 diStop( Axis : Axis_Main, Execute : xStop ); // 4. 报警复位 diReset( Axis : Axis_Main, Execute : xResetCmd );这里有几个容易出问题的点。第一MC_Power 的 Enable 信号必须保持为 TRUE不是给一个上升沿就结束。三菱用户习惯把 M 继电器置位后就不管了但 Codesys 功能块大多需要持续调用、持续输入一旦 Enable 变 FALSE轴会立刻去使能。第二MC_MoveVelocity 的 Execute 参数建议用上升沿。如果你直接把按钮电平接上去松开瞬间功能块仍可能认为自己还在执行影响下一次点动。所以代码里先做互锁和沿处理。第三Direction 参数用 SEL 函数SEL(xJogCW_Edge, 1, 2) 表示条件为 TRUE 时返回 1正向为 FALSE 时返回 2负向。注意这里不是简单的 1/-1不同运动库对方向常量的定义不完全一致最好先查库文档。3.3 JOG 阶段就要做好的安全逻辑JOG 点动是所有运动控制的第一步也是安全逻辑最好的验证时机。除非你后面只做“永远往前跑”的设备否则这几条建议从 JOG 阶段就埋进代码里。正负限位信号必须在轴使能之前参与逻辑判断。建议用常闭触点输入断线时视为触发限位避免限位线掉了都不知道。在轴控程序里限位生效时不仅要断开运动功能块的执行条件还要触发 MC_Stop并且从软件层面锁住反向信号。急停和伺服使能的顺序也很关键。急停按下瞬间伺服应立刻去使能同时 PLC 发停止指令。但复位时顺序反过来先复位驱动器报警再延时 200ms 左右给伺服使能等伺服 Ready 后再允许 JOG。如果复位后马上按 JOG驱动器可能还没准备好很容易因为“伺服未就绪”报警。点动速度不要太大。我的经验是点动速度设为运行速度的 10%-20%加减速度可以设得比正常运行慢一些。这套系统里运行速度 800mm/s点动取 80mm/s加速度 500mm/s²差不多 0.16 秒达到点动速度手感舒服也足够看清楚机械是否有异响。4. 从单轴到多轴模块化与同步控制4.1 多轴不是把 JOG 代码复制粘贴两遍很多三菱用户做多轴时习惯把单轴程序复制一份改改寄存器地址就算完事。这套做法在小项目里能跑但在汇川 Codesys 里非常别扭。正确做法是把轴控逻辑封装成一个功能块 FB_Axis输入输出做成接口然后在主程序里实例化两个副本FUNCTION_BLOCK FB_Axis VAR_INPUT xEnable : BOOL; xJogCW : BOOL; xJogCCW : BOOL; xStop : BOOL; rJogSpeed : REAL; END_VAR VAR_IN_OUT Axis : AXIS_REF; END_VAR VAR diPower : MC_Power; diMoveVel : MC_MoveVelocity; diStop : MC_Stop; END_VAR调用时VAR fbAxis1 : FB_Axis; fbAxis2 : FB_Axis; Axis1 : AXIS_REF; Axis2 : AXIS_REF; END_VAR fbAxis1( xEnable : bEnableAll, xJogCW : bJog1_CW, xJogCCW : bJog1_CCW, Axis : Axis1 ); fbAxis2( xEnable : bEnableAll, xJogCW : bJog2_CW, xJogCCW : bJog2_CCW, Axis : Axis2 );这样每根轴的点动、使能、停止逻辑完全一致后续加轴只是再加一个实例。统一控制的另一个好处是急停时只要把 bEnableAll 拉掉所有轴同时去使能不会出现“一根轴停了一根轴还在跑”的尴尬。4.2 电子齿轮同步把从轴“挂”到主轴上多轴场景里最常见的需求是同步比如两根辊筒以固定比例同速转动。三菱 FX 系列做同步通常需要自己测主轴速度再换算成从轴脉冲频率去发主轴一加速从轴就要滞后一拍。汇川 Codesys 里直接用 MC_GearIn 功能块把从轴挂到主轴的速度参考上diGearIn( Axis : Axis_Slave, MasterAxis : Axis_Main, Execute : bEngageGear, RatioNumerator : 2, RatioDenominator : 1, Acceleration : rAcc, Deceleration : rDec );这个功能块的含义是从轴与主轴建立一个固定速比同步关系RatioNumerator / RatioDenominator 就是速比。上面设 2:1意思是从轴速度是主轴的 2 倍。主轴用 MC_MoveVelocity 跑从轴挂在主轴上主轴速度变化时从轴自动跟着变化。有几个细节必须注意。第一从轴在挂齿轮之前必须已经使能否则 MC_GearIn 不会成功。第二MC_GearIn 的 Execute 同样建议用上升沿。解除同步时通常用 MC_GearOut它会先按设定的减速度把从轴缓慢脱离而不是瞬间断开这样机械上不会有剧烈冲击。第三主轴和从轴的用户单位最好提前统一或者在 Ratio 里把单位差异考虑进去。否则你会发现明明设了 2:1实际速度看起来完全不对。4.3 多轴联动中的启停优先级与异常策略多轴联动最怕的是异常停机时序混乱。三菱时代很多人靠 M 继电器和步进梯形图做互锁在汇川里我建议直接建立一套“状态优先级”规则正常停机时先让各轴按减速度自然停止不主动切使能等全部到位后再去使能。相当于先速度停、后位置保持、最后断电。急停时所有轴同时 MC_Stop驱动器的急停输入也直接断开伺服使能。这时候 PLC 侧要记住各轴当前位置恢复时不要直接重新使能继续跑而是先手动确认机械位置必要时做原点回归。还有一种容易被忽略的情况如果主从轴已经用 MC_GearIn 同步停主轴的时候从轴会跟着减速但如果从轴因为某种原因没有成功挂上齿轮比如使能失败主轴停下来后从轴可能还在自由状态。所以多轴同步程序里一定要加状态诊断——PLCopen 功能块都带 Error、ErrorID 输出程序里必须检查这些状态一旦 Error 就触发报警而不是继续执行下面的指令。5. 现场调试实录那些文档里不会写的坑5.1 JOG 启动瞬间电机抖动甚至飞车这是我从三菱转汇川后遇到的第一个大坑现象是按下 JOG电机 “哒哒哒”抖几下然后马上报警看驱动器报警码是编码器异常或者指令脉冲异常。查了半天问题出在电子齿轮比和指令脉冲频率不匹配上。当时我按三菱时代的“习惯”先把电子齿轮比设成 1:1想着分辨率高结果 JOG 速度虽然设了 80mm/s但换算成指令频率也有 5.24MHz × 0.1 524kHz远超 Easy320 输出能力。脉冲口根本发不出去电机就会抖动、报警。解决方法是先把电子齿轮比按前面 2.2 节的方法重新算一遍设到合适倍率后再把轴参数里的“电机每转用户位移”和“每转反馈脉冲数”配好。JOG 一下就能顺滑跑起来。所以我又把这句话放在这里发脉冲之前先算频率别凭感觉设参数。5.2 GL20-2HC 计数值乱跳或者完全读不到数这个问题的排查优先级我总结出来基本是接线极性 → 模块通道配置 → 传感器类型 → 干扰。先看模块输入通道的定义GL20-2HC 的公共端和信号端极性和以前三菱 FX3U 输入端子的常用接法完全不一样。很多设备用的是 NPN 输出传感器在 FX3U 上可能直接把 S/S 接到 24V 就行但在 GL20-2HC 上公共端极性是反的接错以后读数是全 0 或者全 F。其次确认模块是配置成 AB 相还是脉冲方向。外部传感器如果发的是单圈脉冲你却配成了 AB 相计数会按 4 倍频算速度显示差异很大甚至方向判断错误。最后才是干扰问题。GL20-2HC 的线缆不要和伺服的电机线、编码器线捆在一起走必须分开线槽。屏蔽层单端接地。如果计数还是偶尔跳几个脉冲可以在程序里加一个简单的数字滤波连续两次采样值跳变超过合理范围就丢弃本次数据。经验值方法是根据实际速度设定“每 10ms 最多允许跳变多少脉冲”超过就认为是干扰。5.3 从三菱 RS 指令切换到 Modbus RTU寄存器地址总对不上三菱 FX 系列做串口通信很多老工程师习惯用 RS 指令自己拼帧、自己算 CRC地址偏多少心里都有数。到了汇川 Easy320 的 Modbus RTU 主从配置界面化配置反而让人犯迷糊。最常见的坑是寄存器地址“0 偏置”和“1 偏置”的问题。比如上位机软件或触摸屏里写的是 40001协议帧里的实际地址是 0x0000而 InoProShop 的 Modbus 从站配置里填的往往也是协议地址。填 40001 和填 0 可能是一样的但填成 1 就会整体错开一个寄存器。读回来的数据乱七八糟多半就是这里差了一位。另外Modbus RTU 通信异常时不要第一时间怀疑 PLC先把串口参数、从站地址、CRC 校验方式逐项核对。现场遇到过很多次所谓的“通讯不稳定”最后发现是伺服驱动器的通讯参数里没关“每次上电自动清报警”导致偶发异常一帧重试就断站。5.4 避坑速查表三菱思维与汇川 Codesys 思维对照下面这张表是我在实际项目里反复用到的一张对照表建议截图保存事项三菱 FX/FX5U 习惯汇川 Easy320 / Codesys 习惯编程软件GX Works2 / GX Works3InoProShopCodesys 内核点动控制PLSY / DDRVI 特殊继电器MC_Power MC_MoveVelocity轴状态靠 M 继电器自己维护轴对象自带状态机多轴扩展复制梯形图改地址封装 FB_Axis实例化多个轴对象电子齿轮比经常忘记计算依然必须算不然脉冲频率爆表串口通讯RS 指令手写报文Modbus 配置或功能块注意 0/1 偏置外部高速计数C235~C255 等计数器GL20-2HC 模块软件变量直接读检测接线注意 S/S 端口 NPN/PNP 切换同样要核对模块源型/漏型定义5.5 关于圆弧插补和传统三菱指令的对比热词里出现了“三菱PLC圆弧插补程序梯形图”这里也借机多说一句。三菱 FX3U/FX5U 做圆弧插补梯形图写起来非常繁琐本质上是在每个扫描周期里给两轴分配微小的增量位置程序量和调试难度都很高。汇川 Codesys 里提供 MC_MoveCircularAbsolute 这类功能块指定终点、圆心或半径运动内核自动完成路径规划。但如果你用的是 Easy320 这类以逻辑控制为主的小型 PLC我的建议是少于两轴的圆弧插补能不做就不做用电子凸轮或者虚拟主轴加同步来做曲线运动稳定性更高。如果项目确实要求多轴圆弧插补选型时优先考虑支持 EtherCAT 总线轴控的汇川 AM 系列不要指望脉冲轴在插补精度上达到很好的效果。6. 程序架构的后续扩展思路6.1 从 JOG 直接升级到自动运行JOG 跑通以后自动运行其实就是在同一根轴上叠加一层逻辑。建议把 JOG 功能块和自动定位功能块分开不要混在一个程序里。自动运行用 MC_MoveAbsolute / MC_MoveRelativeJOG 用 MC_MoveVelocity两者在执行上天然互斥但程序层面仍然要做互锁自动模式下禁止 JOGJOG 模式下禁止自动。这样做的好处是设备从手动调试切换到自动生产时你不需要改轴控底层只需要切换模式变量。三菱时代很多人习惯把 JOG 和自动定位放在同一个梯形图段里互相干扰的坑我踩过不止一次。6.2 把外部反馈变成真正的速度闭环GL20-2HC 读到的外部脉冲如果只停在显示层面就浪费了。在这套方案里我建议用外部脉冲算出来的实际线速度和伺服设定速度做差加一个简单 PID 修正。修正量叠加到轴速度指令上或者作为伺服电子齿轮比的微调。具体实现上在 2ms 任务里每 100ms 采样一次 GL20-2HC 的值做差值得到实际速度。目标速度减去实际速度得到偏差经过 PID 后输出速度补偿值。要注意标定比例传感器每转多少脉冲、对应多少mm都要先算准。这个闭环的好处是能弥补同步带打滑带来的速度误差对要求平稳输送的设备非常有用。6.3 设备开机要不要每次回归原点三菱时代很多设备靠伺服绝对位置保持或者干脆靠限位开关每次开机找原点。汇川 Codesys 里原点回归有专门功能块 MC_Home支持多种回零模式比如 正转找Z相、反转找限位、绝对位置自动设定等等。我的建议是除非机械结构有绝对编码器或电池保持否则每次开机做一次 Homing成本最低也最可靠。Easy320 的脉冲轴可以用外部 GL20-2HC 的 Z 相锁存或者伺服驱动的 Z 相输出做精准原点具体接法要看你现场有没有把 Z 相引出来。如果没引退而求其次用外部限位加回退补偿也能满足大部分设备的精度要求。这套 JOG 到多轴的扩展思路我在不同项目里已经重复过很多轮。核心原则其实只有一句话先用计算把机械和伺服的边界摸清再用 PLCopen 轴对象统一管理轴状态最后把安全逻辑放在所有运动指令之前。这三条做到位不管你后面接多少根轴代码的结构都不会散。最后再分享一个小技巧所有轴控相关变量命名统一加前缀比如 Axis1_、Axis2_模式变量用 Mode_Auto、Mode_Jog 这种语义化命名。三菱时代用 D0、D10 惯了到了 Codesys 里还这么写项目到后期你自己都看不下去。好的命名习惯能节约的调试时间远比你想的多。
返回列表