恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

三菱PLC转汇川Codesys轴控实战:从JOG到多轴控制的踩坑记录

  • 首页
  • 资讯中心
  • /
  • 三菱PLC转汇川Codesys轴控实战:从JOG到多轴控制的踩坑记录

相关资讯

AD20丝印批量调整全攻略:从筛选到布局优化的实战技巧 2026/10/6 1:02:02
三相逆变器电压测量:端电压、相电压、线电压与SPWM利用率推导 2026/10/6 1:02:02
NPN与PNP三极管开关电路设计:原理、计算与调试全攻略 2026/10/6 1:02:02

最新资讯

使用 Go 绑定清理 Xberg Validator 插件注册表:ClearValidators 的用法与底层实现
JointJS 系谱图(Genogram)自动布局实战:基于 DirectedGraph 与夫妻容器的多代族谱构建指南
Telerik 公司档案解读:remoteintech.company 远程友好目录中的企业画像与数据模型
MinIO替代汇总(一):SeaweedFS、RustFS、Ceph
CacheCloud 应用在线迁移实战指南:基于主从 Failover 的客户端无感知迁移全流程解析
libwebsockets 测试应用全解析:从 test-server 到客户端、SSL 与协议插件实战指南

今日推荐

2026 AI 开发全家桶落地指南:TaoToken 统一 Key 打通 IDE 插件、Agent 与自动化代码审查全链路配置实测
MR25H40CDF+STM32F031C6工业级高可靠数据存储方案
MRAM+STM32工业断电数据保全实战指南

本周热门

MR25H40CDF + PIC18F65K40:工业记录仪高可靠存储实战
基于STM32的数控恒压恒流电源设计:从硬件到PID调参全解析
LT9211 MIPI重定时器原理与双路扇出实战指南

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

三菱PLC转汇川Codesys轴控实战:从JOG到多轴控制的踩坑记录

发布时间:2026/10/6 1:02:02
三菱PLC转汇川Codesys轴控实战:从JOG到多轴控制的踩坑记录 前阵子给一台在线裁切设备做电控改造原机用的是三菱FX5U加两台JE-A伺服机械侧是5比1减速器带5M20同步轮带速要求做到0.8m/s。改造原因是交期和成本主控换成汇川Easy320伺服换成SV660N外部脉冲传感器通过GL20-2HC模块进PLC。我玩三菱PLC年头不算短本以为换个品牌照搬逻辑就行结果从JOG点动开始就被Codesys这套思路反复打脸。DRVI、ZRN、C235这些三菱的“肌肉记忆”放到汇川中型PLC上基本用不上轴使能、点动、定长、多轴联动每一步都得重新建立认知。这篇文章就是把我这次从单轴JOG做到多轴控制的完整过程以及三菱老用户最容易踩的坑一条条写清楚适合正在做三菱切汇川、或者刚接触汇川Easy系列Codesys轴控的同行参考。1. 项目冷启动这套轴控方案到底要解决什么问题1.1 设备构成与项目目标这台设备是一台在线裁切机原三菱方案是FX5U作为主控通过脉冲方式控制两台JE-A伺服一台负责送料牵引一台负责飞刀切断。机械传动侧是5比1减速器带5M20同步轮用同步轮压着料带往前送线速度要求0.8m/s。改造后的方案是汇川Easy320作为主控扩展一个GL20-2HC高速计数模块伺服换成两台SV660N外部还装了一个增量编码器用来实时监控送料机构的实际位置防止伺服丢步后切出来的尺寸全部偏移。很多人一听“换PLC”就觉得是软件翻译工作把三菱梯形图改成汇川梯形图就行。实际上这个项目有三层问题要解决。第一层是轴控指令体系的差异三菱用DRVI、DRVA、ZRN这套汇川Easy320用的是基于Codesys平台的PLCopen运动控制库函数都长成MC_Power、MC_MoveAbsolute、MC_Home这样指令模型完全不同。第二层是单位系统三菱惯用Hz和脉冲数汇川Codesys里可以直接用mm/s和mm但需要正确配置比例尺。第三层是外围通讯和反馈GL20-2HC接外部编码器以后怎么和三菱时代的高速计数器编程区分开也是很多老工程师容易懵的地方。1.2 三菱老玩家转汇川最容易翻车的几个认知差先讲几个我踩得最重的坑这几条贯穿了整个项目三菱PLC是“软元件思维”D0、M0、X0、Y0遍地都是程序行数多了以后根本分不清哪个D是速度、哪个D是位置。汇川Easy320的编程软件InoProShop是Codesys内核本质是“变量思维”工程里应该建结构化变量、功能块而不是裸奔的全局软元件。我刚上手时习惯性地把变量映射到%MW0这种地址上结果程序写得又臭又难查。三菱轴控指令发出一个脉冲串就完事DRVI指令执行完后靠M8029之类的完成标志判断逻辑相对简单。汇川的运动控制库不一样MC_MoveAbsolute这类指令有Busy、Active、Done、CommandAborted一堆状态执行过程中如果又被另一条运动指令打断会返回CommandAborted。这个状态模型一开始不建立起来后面多轴联动必然乱。第三个坑是“使能”这个概念。三菱时代伺服使能就是一个输出点Y0为ON伺服通电OFF就掉使能做急停时直接断开输出挺正常。汇川里MC_Power的Enable信号要一直保持为TRUE轴才会保持使能状态很多人误以为Enable只是上升沿触发一下结果轴动不动就报错。1.3 这次改造的技术路线整个项目的技术路线分四步走第一步先让单轴转起来实现JOG点动和手动模式这一步的目的是摸清汇川运动控制库的脾气第二步做单轴定长定位用相对定位和绝对定位替代原来的DRVI、DRVA同时把0.8m/s线速度对应的电子齿轮比、脉冲当量全部算明白第三步做多轴联动一台轴做主令另一台轴做电子齿轮同步外部编码器信号通过GL20-2HC进PLC做偏差监控第四步把轴状态通过Modbus RTU传给上位机替代三菱时代用RS指令拼报文的老办法。2. 先把电机转起来JOG功能与轴使能细节2.1 三菱FX5U的JOG一般怎么写三菱FX5U时代做JOG很多老工程师的习惯是用PLSV指令做变速脉冲输出或者直接在定位参数里启用JOG运行功能把X0、X1映射成JOG、JOG-输入然后在伺服参数里设定点动速度。但PLSV这个指令有个很别扭的地方它不帮你管理加减速如果你在程序里直接给速度值伺服可能会瞬间冲出去机械冲击非常明显。所以三菱老程序里经常看到有人用DRVI发一个很大的目标位置来做点动中途靠M8029或者外部停止信号切断这种做法表面能用实际上一旦目标位置设小了会提前停设大了又会撞限位。这里给一个典型的三菱梯形图思路做对比假设X0是正转点动X1是反转点动Y0是脉冲输出Y1是方向// 正转点动 LD X0 ANI Y1 SET M0 // 点动运行标志 // 用PLSV输出速度为D100方向由M0控制 LD M0 PLSV D100 Y0 Y1 // 按钮松开停止输出 LD X0 OR X1 PLSV K0 Y0 Y1这段程序的缺点就是加减速控制几乎为零实际使用时要么把速度设得很保守要么在伺服驱动器里开加减速时间。换到汇川平台上我对JOG的要求就一个词可控。所以必须是MC_Power加MC_MoveVelocity的组合加减速由运动控制库内部处理而不是靠外部限位去兜底。2.2 汇川Codesys的JOG点动代码怎么写在InoProShop里汇川Easy320用的运动控制库和标准PLCopen基本一致JOG点动最核心的就是两条指令MC_Power负责轴使能MC_MoveVelocity负责连续速度运动。下面是一段我在实际项目中验证过的ST代码手动模式下的点动逻辑PROGRAM ManualJog VAR bServoEnable AT %QX0.0 : BOOL; // 伺服使能输出 bJogPositive AT %IX0.0 : BOOL; // 正转点动按钮 bJogNegative AT %IX0.1 : BOOL; // 反转点动按钮 bManualMode AT %MX0.0 : BOOL; // 手动模式软开关 rJogSpeed : REAL : 100.0; // 点动速度单位mm/s rAcc : REAL : 500.0; // 加速度单位mm/s^2 rDec : REAL : 500.0; // 减速度单位mm/s^2 xEnableAxis : BOOL; xMoveVel : BOOL; xStop : BOOL; Axis1 : AXIS_REF; MC_Power_0 : MC_Power; MC_MoveVelocity_0 : MC_MoveVelocity; MC_Stop_0 : MC_Stop; END_VAR程序体核心逻辑是// 使能信号必须保持为TRUE不能只触发一次 MC_Power_0( Enable : bServoEnable, Axis : Axis1 ); // 只有在手动模式下才响应点动按钮 IF bManualMode THEN IF bJogPositive AND NOT bJogNegative THEN // 正转点动速度给正值 xMoveVel : TRUE; MC_MoveVelocity_0( Enable : xMoveVel, Axis : Axis1, Velocity : rJogSpeed, Acceleration : rAcc, Deceleration : rDec ); ELSIF bJogNegative AND NOT bJogPositive THEN // 反转点动速度给负值 xMoveVel : TRUE; MC_MoveVelocity_0( Enable : xMoveVel, Axis : Axis1, Velocity : -rJogSpeed, Acceleration : rAcc, Deceleration : rDec ); ELSE // 没有任何按钮按下停止点动 xMoveVel : FALSE; xStop : TRUE; MC_Stop_0( Execute : xStop, Axis : Axis1, Deceleration : rDec ); END_IF END_IF这段代码有几个关键点。MC_Power的Enable信号要保持为TRUE很多人刚开始写的时候每次都只在启动瞬间给一次TRUE结果轴使能一闪就没了排查半天发现是Enable没有保持。MC_MoveVelocity用的是Enable而不是ExecuteEnable为TRUE时轴以设定速度持续运行Enable为FALSE时指令结束但这里有个坑单纯把Enable置FALSE轴的停止方式取决于运动控制库的默认配置有些版本会滑行停有些版本会出现“指令中止”的报错。所以我的做法是按钮松开后另外调用一次MC_Stop把减速停止的控制权拿回来这样加减速曲线完全可控不会变成自由滑停。还要注意方向互锁。点动按钮如果同时按下正转和反转代码里我用“正转且非反转”和“反转且非正转”做了互锁宁可两个都不动也不能让轴同时收到两个速度指令。这个互锁在三菱时代靠梯形图的互锁触点实现在Codesys里用逻辑判断更直接。2.3 点动功能里的工程细节限位、模式切换、抱闸时序JOG只是让轴转起来真正折磨人的是JOG周边的状态管理。我这次总结了三个必须处理的细节第一是软限位和硬限位。三菱时代很多项目不设软限位靠行程开关硬扛这在低速JOG时问题不大一旦速度到0.8m/s撞限位就是机械事故。汇川Codesys里可以给每个轴配置软件限位在轴参数里设置最大位置和最小位置MC_MoveVelocity运行到限位位置附近时运动控制库会自动做减速。但注意JOG模式下如果你一直按着按钮轴到限位后运动控制库会把指令置为CommandAborted按钮松开后执行MC_Stop这个时序要自己测一遍不同固件版本表现有差异。第二是手动和自动模式的切换。我在上面代码里用了bManualMode这个软开关这个开关不是摆设。自动模式运行中如果误触了JOG按钮没有模式互锁的话轴会被突然插入的运动指令打断设备上的工件直接报废。我的做法是手动模式下自动启动信号被屏蔽自动模式下点动按钮一律不响应。另外MC_MoveVelocity和自动模式下的MC_MoveAbsolute不能同时作用在一个轴上哪个指令后执行就会把前面指令置为CommandAborted所以模式切换的瞬间要先调用MC_Stop把所有运动指令清掉。第三是抱闸时序这一点做垂直轴的一定要记牢。设备上如果有垂直升降轴伺服使能后不能立刻松开机械抱闸要先让伺服建立力矩再开抱闸否则重物会先掉一下再被拉住。三菱时代抱闸控制经常是个单独Y输出靠梯形图定时器处理汇川里也一样但要注意MC_Power的Enable为TRUE后伺服真正建立力矩需要几十毫秒我实测SV660N从使能到力矩稳定大约要80ms到120ms所以抱闸松开信号至少要延时100ms以上再输出。停止时顺序反过来先给抱闸信号等抱闸闭合后再把MC_Power的Enable置FALSE这个顺序错了垂直轴大概率会下滑或者冲击。3. 从JOG到定长定位指令迁移与坐标单位换算3.1 三菱定位指令和汇川运动指令的映射关系JOG跑通以后接下来就是把原来的定长切断逻辑迁移过来。先做一个指令映射表这张表以后可以贴在工位上三菱转汇川项目基本都用得上三菱FX5U常用指令三菱指令含义汇川Codesys对应函数函数含义PLSY定速脉冲输出MC_MoveVelocity连续速度运动PLSV变速脉冲输出MC_MoveVelocity连续速度运动DRVI相对位置定位MC_MoveRelative相对定位DRVA绝对位置定位MC_MoveAbsolute绝对定位ZRN原点回归MC_Home回原点无直接对应点动/手动MC_MoveVelocity MC_Stop速度运动加停止这个表看着简单实际迁移时最要命的是“完成标志”的处理思路完全不同。三菱DRVI执行完以后M8029置ON然后程序做下一步。汇川MC_MoveRelative的完成信号是Done但Done只在Execute上升沿触发的那一次运动完成后保持一个周期如果运动被中断输出的是CommandAborted而不是Done。所以我在定长逻辑里写了一个“轴运动完成”的统一判断取Done和CommandAborted的上升沿分别处理正常完成和中止完成不能只盯Done。3.2 0.8m/s案例减速比、同步轮周长、电子齿轮比的计算全流程这部分是整个项目里最值得写的一节因为计算贯穿了三菱和汇川两套参数体系。机械参数是5比1减速器5M20同步轮要求线速度0.8m/s。第一步算同步轮周长。5M20的意义是皮带齿距5mm同步轮20齿所以同步轮节圆周长5mm乘以20齿100mm也就是0.1m。再算电机和同步轮的关系电机转5圈减速器输出1圈即同步轮转1圈。那么电机每转一圈送料带前进的距离0.1m除以50.02m也就是20mm。这里可以先算出一个机械常数20mm每电机圈。第二步反推电机转速。线速度0.8m/s也就是800mm/s除以每圈进给20mm得到电机转速40转每秒换算成rpm就是2400rpm。伺服电机的额定转速通常是3000rpm2400rpm大概是80%额定转速在连续运转工况下算是比较合理的工作点。如果算出来超过3000rpm那转速就爆了要么改减速比要么换更高转速的电机这一步在三菱时代很多人忽略换到汇川平台伺服报警频率超限以后才开始慌。第三步计算伺服编码器脉冲当量。假设增量编码器是2500线4倍频以后就是10000脉冲每电机圈。那么电机端需要的脉冲频率40转每秒乘以10000脉冲每转400000脉冲每秒也就是400kHz。问题来了三菱FX5U的高速脉冲输出上限一般也就200kHz汇川Easy320如果用脉冲输出方案同样有频率上限400kHz直接超标。这时候就必须用伺服驱动器的电子齿轮比来分摊。电子齿轮比的作用是“PLC发出1个脉冲伺服内部乘以一个比例后驱动电机走若干编码器脉冲”。以汇川SV660N为例电子齿轮比通常用类似Pn202和Pn203这样的功能码设置三菱JE-A上对应的是PA05和PA06。把比例设为2:1也就是PLC发1个脉冲电机端走2个编码器脉冲那么PLC只需要输出200kHz就能达到原先进给要求。此时PLC端的脉冲当量变成了原来每个PLC脉冲对应2μm0.1m除以50000个脉冲设置电子齿轮比2:1后每个PLC脉冲对应4μm。这意味着定位分辨率从2μm变成4μm对这个裁切应用完全够用。算完以后参数设置就是这个表格的样子参数项三菱JE-A汇川SV660N本次设置值电子齿轮比分子PA05Pn2022电子齿轮比分母PA06Pn2031PLC输出脉冲频率上限200kHz取决于输出模块200kHz电机额定转速3000rpm3000rpm3000rpm编码器分辨率2500线/10000脉冲视型号10000脉冲/转这里有个实际经验要强调算完电子齿轮比后一定要用“PLC发1000个脉冲量一下带子实际走了多少距离”来验证不要只看理论值。我这次就遇到过设完参数后实际位移和理论值差了整整5倍的情况后来一查是减速器安装方向导致的转速倍率没算对。机械部分永远比软件更容易出隐藏问题。3.3 原点回归与绝对位置建立方案定长定位必须在知道“当前在哪”的前提下才能做。三菱时代最经典的原点回归指令是ZRN格式大概是ZRN K高速 K爬行 X原点输入 Y0脉冲输出它先高速逼近原点挡块碰到挡块后降速爬行找编码器Z相信号作为最终原点。三菱这套思路在增量编码器时代是标配但因为要考虑减速距离、爬行速度、挡块位置调试起来其实挺费神。汇川Codesys里对应的是MC_Home指令但方式更加多样化。如果伺服配的是绝对值编码器上电后根本不需要回原点位置直接从编码器读出来这是和三菱JE-A这种增量编码器伺服最大的区别。我这次因为裁切设备每次开机都要保证切刀位置绝对正确索性选了带绝对值编码器的SV660N把MC_Home的回归方式配置成“当前位置设为零”上电后读取编码器当前位置配合断电保持逻辑直接跳过回原点动作。如果项目还是用增量编码器那么MC_Home可以选择找限位开关、找原点挡块加Z相、或者用外部DOG信号模式配置比三菱ZRN多很多要自己测一遍。原点回归在多轴设备里还有一个顺序问题必须等所有相关轴都完成回零后才能进入自动模式。我见过三菱老程序里靠M标志一个轴一个轴地串行等待结构混乱还容易漏条件。Codesys里我建议用一个统一的“轴组状态字”每个轴回零完成后置位对应位全部为1时才允许自动启动这个思路后面在多轴部分还会详细讲。4. 多轴控制电子齿轮同步、插补与轴组调度4.1 GL20-2HC接脉冲传感器的编程方式多轴方案里我用GL20-2HC模块接了一个外部增量编码器这个编码器装在送料机构的被动轮上用来实时测量料带实际走过的长度。为什么不用伺服本身的编码器反馈因为送料辊和料带之间可能有打滑伺服如果丢步了电机端位置和实际送料长度会有偏差。加上外部脉冲传感器以后PLC可以直接对比“伺服指令位置”和“外部编码器实测位置”偏差超过阈值就报警停机。三菱时代采集外部编码器用的是高速计数器最典型的是C235这类高速计数器但C235用起来有几个限制计数器编号和输入点绑定每个高速计数器占用固定输入端子而且计数值超过32767就得配32位计数器程序里还要处理计数溢出。GL20-2HC模块则是独立的高速计数通道不占用主PLC的物理输入点模块内部按配置好的工作模式计数比如A/B相4倍频或者方向加脉冲PLC程序直接读取计数寄存器值数值类型通常是双整数基本不用操心溢出问题。程序里我建了一个功能块用来把GL20-2HC的计数值换算成实际送料长度PROGRAM EncoderMonitor VAR dwRawCount AT %ID100 : DINT; // GL20-2HC模块当前计数值具体地址按硬件配置 rPulsesPerMeter : REAL : 10000.0; // 外部编码器每米脉冲数根据机械参数标定 rActualLen : REAL; // 实际送料长度单位m rTargetLen : REAL; // 伺服指令长度单位m rDeviation : REAL; // 偏差 rDeviationLimit : REAL : 5.0; // 偏差限值单位mm xAlarm : BOOL; END_VAR // 计数值换算注意先转成REAL再运算避免整数截断 rActualLen : DINT_TO_REAL(dwRawCount) / rPulsesPerMeter; rDeviation : (rActualLen - rTargetLen) * 1000.0; // 转成mm IF ABS(rDeviation) rDeviationLimit THEN xAlarm : TRUE; END_IF这里最关键的参数是rPulsesPerMeter不能直接拿编码器铭牌上的参数写死必须实际标定。我的标定方法是用伺服让送料带走一段固定距离比如2000mm同时读取GL20-2HC增加的脉冲数然后用实际走的距离反推每米脉冲数。标定这一步能消除同步轮直径误差、皮带厚度、编码器安装偏心等一系列系统误差。4.2 MC_GearIn实现电子齿轮同步这台设备有同步需求送料轴做主令飞刀轴做从动飞刀轴要跟着送料轴的速度按比例同步旋转才能保证切出来的每一段长度一致。在三菱平台上这种同步通常靠伺服驱动器的内部“电子凸轮”或者外部编码器输入实现配置繁琐而且动态切换比例很麻烦。在汇川Codesys里直接用MC_GearIn功能块就能做到。PROGRAM MultiAxisSync VAR bEngage AT %QX0.1 : BOOL; // 同步啮合信号 bDisengage AT %QX0.2 : BOOL; // 同步脱离信号 rRatioNum : REAL : 1.0; // 电子齿轮比分子 rRatioDen : REAL : 1.0; // 电子齿轮比分母 rSyncAcc : REAL : 300.0; // 啮合加速度 rSyncDec : REAL : 300.0; // 脱离减速度 AxisFeed : AXIS_REF; // 送料主轴 AxisCutter : AXIS_REF; // 飞刀从轴 MC_GearIn_0 : MC_GearIn; MC_GearOut_0 : MC_GearOut; END_VAR程序逻辑// 啮合电子齿轮 MC_GearIn_0( Execute : bEngage, Master : AxisFeed, Slave : AxisCutter, RatioNumerator : rRatioNum, RatioDenominator : rRatioDen, Acceleration : rSyncAcc, Deceleration : rSyncDec ); // 脱离电子齿轮 MC_GearOut_0( Execute : bDisengage, Slave : AxisCutter, Acceleration : rSyncAcc, Deceleration : rSyncDec );用MC_GearIn做同步有几点好处。第一啮合和脱离过程是平滑加速的不会像三菱老方案那样直接从不同步状态硬切到同步状态机械冲击小很多。第二比例可以动态修改如果生产过程中要改变产品尺寸直接把rRatioNum和rRatioDen改掉就行。第三主轴可以使用外部编码器对应的虚拟轴用GL20-2HC的计数值不断更新这个虚拟主轴的位置实现“外部主令”同步这在没有伺服主轴的设备上也成立。我实际使用中发现最需要留意的坑是啮合瞬间主轴和从轴的速度差不能太大否则MC_GearIn会以设定加速度强行拉同步如果加速度设置过高机械上会明显顿挫。解决方法是让从轴在啮合前先用MC_MoveVelocity跑到和主轴接近的速度再执行MC_GearIn这样啮合过程几乎无感。4.3 直线插补和圆弧插补在三菱与汇川里的差异多轴项目除了电子齿轮同步还涉及插补运动。三菱FX5U在定位上有插补功能但使用起来要依赖定位模块的插补参数和表格运行尤其圆弧插补需要在定位数据里设置圆弧半径、方向、终点程序就是一组寄存器的赋值改起来不直观。我见过很多三菱圆弧插补梯形图动辄几十行光看注释都费劲。汇川Codesys里的插补逻辑则更像数控系统走的是轴组AxisGroup和路径Path的概念。做圆弧插补可以用MC_MoveCircularAbsolute这类函数指定路径模式、终点、圆心或半径、方向功能非常直观。更复杂的连续轨迹可以走MC_MovePath加CNC程序。但要注意插补一定要用轴组功能把多个轴组成一个轴组后插补指令作用于轴组而不是单个轴如果继续按单轴方式写MC_MoveAbsolute两个轴的运动是完全独立的根本插不出圆弧。这个“轴组”和“单轴”的层级关系是三菱转汇川时最容易忽略的概念。多轴设备的状态调度里我用了一个很土但很实用的状态字方法每个轴占一个字节字节里各位分别表示“已使能”“已回零”“运动完成”“有报警”“限位触发”等状态。程序里通过判断状态字的位组合来决定下一步动作而不是像三菱老程序那样到处看M继电器。这个状态字同时映射到Modbus寄存器上位机也能看到整机的轴控状态。5. 通讯与数据上云Modbus RTU把轴状态交给上位机5.1 三菱RS指令和汇川Modbus RTU的对比设备改造时上位机要求实时读取每台伺服的位置、速度、报警码还要能下发目标位置。三菱时代这种需求最常用的做法是串口RS指令配合专用通信协议或者Modbus RTU从站。RS指令本身并不难理解但工程量大得惊人你要自己管串口初始化、发送缓冲区、接收缓冲区、校验码、超时重试、报文轮询表一旦通讯干扰还要花大量时间抓报文排查。而且三菱不同型号的串口特殊寄存器地址也各不相同换一个机型就得重新查一遍手册。汇川Easy320的Modbus RTU通信就简洁得多。作为主站可以用Modbus功能块直接读写作为从站直接把需要共享的数据块映射到保持寄存器上位机主动来读就行。这次上位机要读的数据不多我采用了从站方式配置好Modbus从站地址、波特率、数据映射后程序里只需要维护一个字数组上位机通过40001、40002这些地址直接读完全不用自己处理串口底层。5.2 汇川Modbus寄存器地址的坑这里必须单独讲一下寄存器地址的坑。三菱PLC在做Modbus从站时D0经常对应40001这样的保持寄存器地址地址偏移的算法是三菱手册规定的。汇川Codesys平台里Modbus从站的寄存器映射是靠在工程里配置数据区段来实现的同一个40001地址在功能块参数里可能填0也可能填1取决于你使用哪个通信功能块以及厂商对协议地址的约定。我这次用的办法是先建一个数组变量作为Modbus共享数据区比如MsgData[0]到MsgData[49]然后在Modbus从站配置界面把数据区映射到保持寄存器区映射时设置好偏移量。程序里所有要上报给上位机的数据都通过手动赋值的方式写入MsgData数组。这样做的好处是程序里看不到一个Modbus相关的指令逻辑干净调试时打开监控表直接看数组内容就行。轴状态上报我定义了一个紧凑的数据结构寄存器偏移数据类型内容016位整数设备运行状态字132位整数主轴当前位置单位μm332位整数主轴当前速度单位mm/s532位整数从轴当前位置单位μm732位整数从轴报警码916位整数跟随误差单位μm注意寄存器偏移1是32位整数会占用两个保持寄存器所以下一个数据要从偏移3开始。这个“32位数据占两个寄存器”的问题在三菱RS时代同样存在但很多人从来没注意过导致上位机读下来的数据张冠李戴。我建议定义数据结构时就把偏移量列清楚并且在PLC程序里主动把32位数据拆成高位和低位两个16位整数这样上位机不管按什么字节序处理都不会乱。5.3 上位机读取轴状态的完整逻辑上位机那边用的还是老一套Modbus轮询但数据组织方式比我三菱时代写的清晰多了。PLC程序里每隔100ms把要上报的数据刷新一次到MsgData数组上位机以500ms周期轮询全部50个寄存器一次读完。位置数据直接给μm整数避免上位机做浮点换算产生歧义。报警码直接映射伺服驱动器的报警编号上位机能直接显示“E73101”这种原始故障码排查的时候对照伺服手册就行。对三菱老玩家来说最需要适应的是以前写RS指令是“程序主动发请求”的思维现在用Modbus从站是“数据放在那里等上位机来拿”的思维。前者逻辑在现场更被动后者只要把数据映射配置好通信压力几乎为零。如果项目里PLC还要读其他设备的数据那就用Modbus主站功能块做轮询两种方式可以同时存在互不干扰。6. 调试实录这台设备我踩过的坑和排查思路6.1 三个典型故障案例案例一原点回归反复触发导致飞车。这台设备改完后第一次跑自动回原点动作时好时坏有时候明明已经回完原点程序又自动触发了一次MC_Home导致轴从原点位置反向冲出去。查了半天发现是MC_Home的Execute信号在程序里用了常ON信号而不是上升沿。回零完成后立刻进自动自动程序某条语句又把Execute刷成了TRUE于是轴再次回零。解决方法是把MC_Home的Execute全部改成R_TRIG上升沿触发并且回零完成后加互锁轴没有进入“已回零”状态前不允许再次触发。案例二电子齿轮比填反导致从轴速度翻倍。我调试电子齿轮同步时从轴转速居然是主轴的两倍一开始以为是机械减速比问题量了伺服转速才发现是指令里的RatioNumerator和RatioDenominator填反了。这个问题其实用Trace功能一眼就能看出来但我在三菱时代没有看实时曲线的习惯排查了很久才想到去采曲线。汇川InoProShop内置的Scope功能类似示波器能把轴位置、速度、指令状态全部画出来多轴联动的疑难杂症全靠它定位。从三菱转过来的朋友一定要把这个工具用起来比看一堆状态变量直观得多。案例三Modbus轮询超时。上位机起初以100ms周期读PLC偶尔会出现读超时甚至把PLC通讯模块阻塞掉。查了抓包数据发现是上位机地址写错了从站根本没有响应一直等到超时。后来把轮询周期放宽到500ms并且上位机增加失败重试机制通讯就稳定了。这里我的体会是Modbus RTU是半双工总线数据量不大时没必要追求极短轮询周期留一点时间余量反而更稳定。6.2 常见问题速查表现象可能原因排查思路轴使能后立即掉使能MC_Power的Enable没有保持TRUE检查Enable信号是否为常ONJOG按下没反应手动模式未激活或轴未使能检查模式开关和MC_Power输出JOG停止时有明显机械冲击没有调用MC_Stop轴在自由滑停按钮松开后显式调用MC_Stop定位完成后轴还在慢慢跑MC_MoveAbsolute被重复触发或Stop未执行用上升沿触发指令加完成标志实际位移和设定值差固定倍数电子齿轮比或机械减速比设置错误发固定脉冲数实测位移反推倍率从轴速度是主轴整数倍RatioNumerator/RatioDenominator填反Trace查看主从速度曲线Modbus读取数据错位32位数据占两个寄存器偏移没对齐检查寄存器偏移和字节序垂直轴掉电后下滑抱闸时序不对使能稳定后再开抱闸关使能前先合抱闸伺服报跟随误差过大加速度过大或负载过重降低加速度检查机械卡滞编码器读数跳动编码器接线屏蔽不良或模块采样周期太快检查屏蔽接地提高滤波时间6.3 给后来人的几句实在话做完这个项目我最大的感受是三菱PLC教会了我“梯形图能跑”但汇川Codesys逼着我“先想清楚模型再写代码”。轴控这东西不管是三菱还是汇川本质都是位置、速度、力矩的闭环控制只是表达方式不同。三菱把很多东西藏在指令和参数里看起来很省事Codesys把控制逻辑摊开成一个个功能块刚开始觉得繁琐等真正做多轴设备时才发现这反而是优势因为每个环节都看得到、控制得住。给刚转过来的朋友几个建议。第一一定要花时间把PLCopen运动控制库的状态模型吃透Busy、Active、Done、CommandAborted这几个状态搞不清楚后面写什么都会乱。第二重要轴必须加跟随误差监控就像我这次用GL20-2HC做外部编码器反馈一样让PLC知道伺服是不是真的把活干到位了这个习惯三菱时代很少有人坚持。第三程序上统一用轴状态字管理多轴调度不要哪个轴需了就翻哪个M点状态字一上上位机、HMI、故障排查全都受益。最后再分享一个小技巧每次改完参数和程序用InoProShop的在线修改功能把修改记录保存下来再配合Scope抓到的曲线截图按日期存到项目文件夹里。设备出问题的时候翻这些记录比翻任何手册都管用。我靠这个习惯这台设备投产后三次现场故障都是半小时内定位到原因其中两次甚至电话远程就解决了。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号