ARTICLE DETAIL

资讯详情

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

CIA402伺服控制字与状态字精讲:从6040h/6041h到实际调试

CIA402伺服控制字与状态字精讲:从6040h/6041h到实际调试 前阵子调试一套三菱MR-JE-C伺服走CC-Link IE Field Basic通信主站用FX5U。项目本身不算复杂就是JOG加定位控制结果我在6040h控制字、6041h状态字这套CIA402协议对象上卡了两天。不是动作不出来而是状态字读不懂出了问题根本分不清是通信没通、指令写错、还是伺服压根没使能。后来把对象字典和状态机彻底捋了一遍才发现这套东西本质就是一组标准“握手”信号理解了之后不仅三菱的伺服好调其它支持CIA402的驱动也能触类旁通。这篇博文把实战中踩过的坑、验证过的流程完整整理出来重点讲清楚6040h/6041h每一位的含义、状态机切换顺序以及JOG、定位两种常用控制的PLC实现思路适合正在调试MR-JE-C但对控制字不熟的电气工程师也适合做设备维护、想快速上手对象字典调试的现场人员。1. 先把控制字和状态字说透1.1 6040h控制字每个bit都是一路开关先纠正一个容易混淆的概念标题里常说的“6040/6041状态字”其实分两类6040h是控制字Controlword方向是PLC写给伺服6041h是状态字Statusword方向是伺服反馈给PLC。很多人上来就乱改控制字就是因为没搞清楚这两个对象的天然区别。6040h本身是一个16位寄存器每一位就是一路“开关指令”。虽然标准CIA402里定义了不少位但在MR-JE-C上用CC-Link IE Field Basic做JOG和定位最常用的就下面几个bit0Switch On接通使能请求和bit1配合使用。bit1Enable Voltage主电路电压使能请求。bit2Quick Stop快速停止请求正常工作时必须是1置0会触发快速停止。bit3Enable Operation运行使能请求相当于最终“放行”信号。bit4Run/Start运动启动。在速度模式下是运行/停止在位置模式下是定位启动沿。bit7Fault Reset故障复位用上升沿触发。把这些位组合起来就成了命令字。实际调试中真正要背的其实就几个值我整理成了表控制字值命令名称作用0x0000Disable Voltage关闭主电路电机失电0x0006Shutdown进入待机等待下一步0x0007Switch On主电路接通0x000FEnable Operation运行使能电机可以动0x001FEnable Runbit4置1启动定位或运行0x000FEnable Stopbit4清0停止运动0x0080Fault Reset故障复位需要上升沿注意一个非常关键的点0x000F这个值既是“使能”也是“停止”。很多人以为停止要给0x0000结果一给0x0000直接把伺服主电路切断了电机直接掉使能。正确做法是把bit4清掉其它使能位保持也就是让控制字回到0x000F而不是回到0x0000。还有个容易踩的细节bit2快速停止。如果你在运行中把控制字从0x000F改成0x000Bbit2变0驱动器会进入快速停止状态状态字bit5会跟着变化。这种停止方式和普通的bit4停止不一样急停响应更快但会有机械冲击调试时最好不要拿它当普通停止按钮用。1.2 6041h状态字伺服在哪个状态看这里6041h是驱动器反馈给PLC的状态字16位每一位表示一种状态。常用的位如下bit0Ready to Switch On伺服已准备好可以接通主电路。bit1Switched On主电路已接通。bit2Operation Enable运行使能有效电机可以接受运动指令。bit3Fault故障标志1代表有报警。bit5Quick Stop快速停止状态正常为1触发快速停止后为0。bit6Switch On Disabled禁止接通状态通常是刚上电或故障复位后的初始状态。bit9Remote远程控制有效对象字典模式下一般自动置1。bit10Target Reached目标到达定位完成判断最常用。bit12Setpoint Acknowledge位置设定值已被伺服接受PP模式定位模式下很关键。bit13Following Error跟随误差过大报警位1代表有跟随误差报警。实际读状态字的时候不要去背那些十六进制数比如0x0237、0x0207之类的不同状态、不同开关量反馈下数值都不一样背了也容易对不上。正确方法是按位判断重点看bit0、bit1、bit2是否同时为1如果这三个都是1说明伺服已经处于运行使能状态可以发运动指令了。判断定位完成时很多人只盯着bit10这在一些场景下会出问题。比如在速度模式下bit10的含义是“达到目标速度”只要你速度给的是0它就可能一直是1。所以用bit10判断“定位完成”必须确认已经处于位置模式或者配合bit12一起判断后面第四章会展开讲。1.3 状态机为什么非要一步一步来CIA402协议里的伺服控制和汽车点火很像通电自检是“OFF”钥匙拧到ACC是“待机”再拧到ON是“接通”最后拧到START才是“运行”。如果你直接在OFF状态给启动信号车肯定不会走因为中间有安全逻辑卡着。伺服也一样刚上电时处于Switch On Disabled状态你就算把控制字写成0x000F它也不会理你必须先按顺序给命令。标准的状态机路径是上电Switch On Disabled→ 给0x0006Shutdown→ 进入Ready to Switch On → 给0x0007Switch On→ 进入Switched On → 给0x000FEnable Operation→ 进入Operation Enable。这个顺序不能跳但实际调试中也不需要写得特别复杂一个简单的CASE状态机就能搞定。下面是我在GX Works3里写的ST使能序列// 伺服使能状态机 CASE step OF 0: // 初始发送Shutdown命令 g_ControlWord : 16#0006; step : 10; 10: // 等待状态字bit01 IF (g_StatusWord AND 16#0001) 0 THEN g_ControlWord : 16#0007; step : 20; END_IF; 20: // 等待状态字bit11 IF (g_StatusWord AND 16#0002) 0 THEN g_ControlWord : 16#000F; step : 30; END_IF; 30: // 等待状态字bit0、bit1、bit2全为1 IF (g_StatusWord AND 16#0007) 16#0007 THEN b_ServoEnabled : TRUE; step : 99; END_IF; END_CASE;这里g_ControlWord就是6040h映射到PLC的标签g_StatusWord是6041h的映射标签。注意第30步的判断条件用了十六进制掩码0x0007意思是同时检查bit0、bit1、bit2三个位都为1才认为是真正使能成功。实际调试中如果发现状态字一直卡在某个阶段不动最常见的原因不是控制字写错而是硬件端子没满足比如EM1急停没短接或者主电路电源没送。这一点在后面第五章排查部分会详细说。2. 硬件与参数准备MR-JE-C CC-Link IE Field Basic2.1 选型确认与接线先说选型。MR-JE系列里带CC-Link IE Field Basic通信功能的型号是MR-JE-C前面带A的是脉冲型不带以太网口。如果你手头是MR-JE-A就不要想着走CC-Link IE了老老实实用脉冲或者换模块。MR-JE-C的以太网口在驱动器面板上用普通网线就能和PLC连接通过交换机组成星型网络也可以。接线方面除了主回路电源L1、L2、L3和控制电源L11、L21之外有几个端子必须重视EM1紧急停止这个端子如果不短接或者不给24V驱动器不会进入使能状态控制字写到天上去都没用。很多工程师第一次调试就把时间耗在这里。LSP/LSN正负行程限位如果外部限位开关没有接不要把这些端子悬空按手册要求处理。限位触发时驱动器会按急停方式停止并且状态字里的运动使能会掉。编码器线和电机动力线MR-JE-C的编码器线建议使用三菱原装线或者屏蔽层良好处理的线。编码器线松动是最难排查的偶发故障表现为运动中偶发AL16、AL25报警。电源接线完成后第一次上电建议先不要接电机负载用面板小键盘操作确认驱动器自检正常、没有报警再接电机线。千万不要带电插拔编码器线这个习惯能帮你省掉一大半的编码器故障。2.2 驱动器参数设置驱动器参数设置是控制字能不能生效的前提。有几个参数必须提前检查PA01控制模式需要设为网络控制模式也就是通过CC-Link IE Field Basic接收指令。不同固件版本显示可能略有差异但原则是“位置/速度/转矩通过通信给定”。PA03位置检测模式增量/绝对位置选择。如果做绝对位置控制需要配电池断电后位置不丢如果只是做相对定位用增量方式即可。PA05/PA06电子齿轮分子/分母这个直接决定位置指令单位非常重要。电子齿轮的计算举个实际例子MR-JE-C的编码器分辨率是4194304脉冲/转也就是2的22次方。假设对应丝杆导程是10mm我们希望一个指令单位等于0.001mm那么电机转一圈需要10000个指令单位。电子齿轮比就是4194304/10000419.4304所以设PA054194304PA0610000。设完之后你给607Ah目标位置写10000电机就刚好走一圈也就是10mm。如果是速度单位标准CIA402里速度对象的单位是0.01r/min比如给5000就是50r/min。JOG调试时建议先给一个低速值比如100010r/min确认方向没问题再往上调。还有一个容易被忽略的参数是定位完成范围它决定状态字bit10什么时候置位。范围设得太大还没到位就报完成设得太小到位了但bit10迟迟不变影响下个动作的触发。一般先设成电子齿轮换算后的几个脉冲比如10个脉冲现场根据机械精度再微调。2.3 PLC侧网络组态使用GX Works3配置CC-Link IE Field Basic通信时先建立工程添加MR-JE-C从站设置站号然后配置刷新映射。核心思路是把伺服对象字典里需要的对象映射到PLC侧可以访问的地址或标签。以我调试的项目为例映射表建议做成这样对象字典名称方向说明6040hControlwordPLC→伺服控制命令6041hStatusword伺服→PLC状态反馈6060hModes of OperationPLC→伺服模式设置1位置3速度6061hModes of Operation Display伺服→PLC当前生效模式回读607AhTarget PositionPLC→伺服目标位置6042hVL Target VelocityPLC→伺服速度模式目标速度6081hProfile VelocityPLC→伺服定位运行速度6083hProfile AccelerationPLC→伺服加速时间6084hProfile DecelerationPLC→伺服减速时间6064hPosition Actual Value伺服→PLC位置实际值603FhError Code伺服→PLC故障代码通信周期会直接影响JOG的手感和定位触发的实时性。MR-JE-C走CC-Link IE Field Basic时建议把主站通信周期设置在毫秒级。如果感觉JOG按下后反应慢半拍除了检查控制字写入时序也要看一下PLC扫描周期和网络刷新周期是否匹配。PLC程序里最好一个扫描周期只刷新一次控制字不要在多个程序块里同时写同一个地址。3. JOG控制实战3.1 JOG的原理速度模式控制位JOG的本质很简单按着按钮电机以设定的速度转松手就停。这种运动方式适合使用速度模式也就是Profile Velocity Mode模式码是3。速度模式下PLC要做三件事一是把6060h写成3切换到速度模式二是把目标速度写入6042h三是通过控制字bit4控制运行/停止。速度的正负方向由目标速度的正负决定正数正转负数反转。加减速时间在速度模式下由6083h加速时间和6084h减速时间控制单位通常是毫秒。现场调手感的时候这两个参数比目标速度更重要。速度给得再大只要加减速时间够长机械冲击就小反过来速度不大但加减速设成0启动瞬间照样能把机械打坏。这里要特别提醒模式切换必须在伺服停止状态下进行。如果你正在JOG运行中突然把6060h从3改成1伺服会报模式切换错误或者干脆不响应。我习惯的做法是先把bit4清成0让电机停下来等状态字显示停止后再切模式。3.2 PLC程序实现JOG下面是一个简单的JOG正转实现用ST语言写适合放在扫描周期里循环执行// JOG正转 IF b_JOG_Fwd THEN // 第一次按下时切换模式并设置速度 IF NOT b_JOG_Running THEN g_Mode : 3; // 速度模式 g_TargetVel : 1000; // 1000 * 0.01r/min 10r/min b_JOG_Running : TRUE; END_IF; // 置bit4运行 g_ControlWord : g_ControlWord OR 16#0010; ELSE // 松手清bit4停止 IF b_JOG_Running THEN g_ControlWord : g_ControlWord AND 16#FFEF; b_JOG_Running : FALSE; END_IF; END_IF;b_JOG_Fwd是外部按钮信号b_JOG_Running是内部的第一次按下标志。g_Mode对应6060hg_TargetVel对应6042h。控制字的其它位保持0x000F不变只操作bit4。这段代码在功能上没问题但有一个细节要留意模式切换不是瞬间生效的。写完6060h之后驱动器和PLC之间的通信有一个周期延迟如果马上写6042h和bit4有可能指令到达时模式还没有切换完成导致速度指令被忽略。稳妥的做法是先写6060h然后延时几个扫描周期或者回读6061h确认当前模式已经是3再继续后续操作。3.3 JOG调试验证注意JOG看起来简单现场调试时遇到最多的问题反而集中在这几个方面。方向反了是最常见的。如果按下正转按钮电机反转不要急着改程序先在驱动器参数里确认PA07指令方向极性或者把6042h目标速度改成负数反过来转。很多设备上对JOG方向有明确要求不能简单粗暴地换线那样会影响后续定位的方向判断。松手后电机还继续转一段距离这种情况八成是减速时间设得太长。6084h减速时间单位是毫秒如果设成5000松手后还要转5秒才会停给人的感觉就是“停不住”。JOG调试时减速时间先设100到200毫秒先确认停止响应再根据机械惯性调整。启停瞬间有冲击这是加减速时间过短。JOG调试先用低速验证方向和控制逻辑确认没问题后再把速度往额定值靠同时匹配加减速时间。这类问题在设备联调时最容易暴露电机的刚性设得再高加减速时间不合理机械照样抖动。4. 定位控制实战Profile Position Mode4.1 定位模式原理与关键参数定位控制使用Profile Position Mode模式码是1。原理是PLC把目标位置、运行速度、加减速时间一次写给驱动器驱动器自己规划梯形速度曲线并完成定位全程不需要PLC实时参与。这个模式下PLC需要关注的对象包括607AhTarget Position目标位置单位由电子齿轮决定。文章前面例子中设好电子齿轮后单位是0.001mm。6081hProfile Velocity定位运行速度单位0.01r/min。6083hProfile Acceleration加速时间单位毫秒。6084hProfile Deceleration减速时间单位毫秒。定位模式下不需要再写6042h6042h是速度模式的目标速度。很多人在PP模式下写完607Ah和6081h发现电机不动就去检查6042h结果越查越乱。还有一点要搞清楚位置数据是32位的有符号数。正数正方向负数负方向。如果你的目标位置可能超过32767必须使用32位寄存器或标签。CC-Link IE映射时注意数据长度配置映射成16位再拼接是在给自己挖坑。4.2 从使能到定位完成的动作顺序完整的定位流程非常固定按顺序操作如下。第一步确认伺服处于使能状态即状态字bit0、bit1、bit2都为1控制字为0x000F。第二步把6060h写成1切换位置模式。等待6061h回读为1确认模式切换成功。第三步写6081h速度、6083h加速、6084h减速。如果连续多次定位且参数没变这一步可以省略。第四步写607Ah目标位置。第五步把控制字bit4从0变1产生一个上升沿触发定位启动。第六步等待状态字bit12变为1伺服已接受设定值再等bit10变为1目标到达。这六步里最容易出错的是第五步。bit4必须是一个从0到1的上升沿如果之前bit4已经是1你修改了607Ah再写一次0x001F伺服会认为没有新指令不动作。所以定位前要确保bit4处于0状态。ST语言的简版实现如下// 定位触发 b_Trig : (b_Go AND NOT b_Go_Old); b_Go_Old : b_Go; // 确保bit4为0产生沿 IF NOT b_MoveBusy THEN g_ControlWord : g_ControlWord AND 16#FFEF; END_IF; // 新的定位指令 IF b_Trig AND NOT b_MoveBusy THEN g_Mode : 1; // 位置模式 g_TargetPos : dwTargetPos; // 目标位置 g_ProfileVel : 3000; // 30r/min g_ProfileAcc : 200; // 200ms g_ProfileDec : 200; // 200ms g_ControlWord : g_ControlWord OR 16#0010; // bit4上升沿启动 b_MoveBusy : TRUE; END_IF; // 完成判断 IF b_MoveBusy AND (g_StatusWord.10 TRUE) THEN g_ControlWord : g_ControlWord AND 16#FFEF; // 清bit4 b_MoveBusy : FALSE; END_IF;这里IF NOT b_MoveBusy先清bit4是为了保证每次触发时都能产生有效的0到1沿。实际项目中如果PLC扫描周期和通信刷新周期有延迟还要考虑加一个延时确保清bit4的命令真的送到了伺服再发置位命令。4.3 位置到达的判定细节很多工程师喜欢用bit10判断定位完成这本身没问题但一定要理解bit10的含义是“位置偏差在定位完成范围内”。它说的是“差不多到了”不是“已经精准停稳”。定位完成范围在驱动器参数中设置。如果范围设得很大比如几百个脉冲那么电机离目标还有一段物理距离时bit10就已经置1了如果范围设得很小电机到位后还在微小修正bit10会延迟一点才置1。稳妥的双重判断是先看bit12Setpoint Acknowledge为1表示伺服已经接收并响应了这次设定值再看bit10为1表示位置已经到了。两个位都满足再去执行下一个动作。这样能避免因为定位完成范围设置不当带来的误判断。还有一个容易忽略的坑当控制字bit4被清掉后状态字bit12会跟着变化。如果你在bit4还保持1的时候去判断bit12读到的是旧值还是新值取决于通信时序容易产生误判。所以在单次定位模式下最可靠的做法是等到bit101后再清bit4然后再开始下一轮定位。5. 常见问题与排查技巧实录5.1 使能不上、状态字原地不动这是所有问题里最多的。现象是控制字已经写了0x000F但状态字始终没有变化或者卡在初始状态。按顺序排查第一步查EM1急停端子。用万用表量24V有没有到驱动器端子确认接触良好。EM1没有信号驱动器永远进不了使能。第二步查主电路电源。控制电源有电面板显示正常但主回路没电也会导致无法完全使能。很多设备调试时只送了控制电忘了送三相电。第三步查通信映射地址。在GX Works3的监视里确认写入的g_ControlWord确实对应到6040hg_StatusWord确实对应到6041h。映射错位是常见问题你写的是6040h实际映射的却是另一个对象驱动器当然没反应。第四步用MR Configurator2在线连接驱动器直接在对象字典里看6040h和6041h的实时值。这是我特别推荐的做法可以快速判断是通信问题还是控制逻辑问题。如果在专业软件里写0x000F能正常使能那问题就在PLC通信侧如果在软件里写也没反应那就检查端子、电源和参数。5.2 定位不动作或动作异常定位指令发下去电机不动或者动作不对这属于第二大高频问题。如果定位完全没反应先回读6061h确认当前模式确实是1。模式切换没生效是常见原因尤其是JOG之后直接切定位模式时一定要等伺服完全停止再切。有时因为通信延迟6060h写入还没被驱动器处理紧接着607Ah和bit4就来了整条指令时序就乱了。如果电机动了但位置不对重点检查电子齿轮比PA05/PA06和位置单位。我见过把4194304/10000设成419430/10000的结果走10倍距离还以为是方向错误。这时看6064h实际位置再对照目标位置基本马上能定位问题。如果定位过程中报警过载常见原因是加减速时间太短或轮廓速度太高机械负载拉不动。排查时先看603Fh故障码MR-JE常见的是AL50过载报警。对策是把加减速时间调长、降速然后再试。还有一种隐蔽问题正负限位触发了但程序里没有监控限位信号导致定位一开始就发不出去。MR-JE的LSP/LSN接的是开关输入如果某个限位开关一直处于断开状态驱动器会认为行程到了控制字再正确也不动作。5.3 故障复位、报警处理与复位顺序故障后伺服会进入Fault状态状态字bit3为1。这时候用0x000F是没用的必须走故障复位流程。正确做法是先排除故障源比如急停复位、编码器线重新插紧、过载报警先让驱动器冷却然后给控制字一个0x0080保持若干扫描周期再给0x0006重新走使能序列。很多人复位不成功原因是把0x0080一直按住不放。实际上故障复位需要的是bit7上升沿也就是从0变1的过程。如果一直保持1驱动器只会响应一次后面就不再理你了。所以正确的顺序是先确认控制字bit7为0然后置为1再清0形成一个完整脉冲。复位是否成功不能只看驱动器面板报警是否消失一定要看状态字bit3是否变回0。如果bit3还是1说明报警源还在或者复位时序不对。我整理了一张速查表现场调试时可以快速对照现象可能原因解决思路状态字一直显示禁止接通EM1急停未短接检查端子接线和24V控制字写了没反应映射地址不对用MR Configurator2在线核对对象字典JOG方向反了速度符号或方向参数改6042h正负号或PA07方向参数松开JOG后还继续走减速时间太长减小6084h定位指令发了不动模式没切换成功回读6061h确认当前模式电机走了但位置不对电子齿轮比错误核对PA05/PA06看6064h实际值报警复位不成功故障源未排除或复位无沿先排除故障再给0x0080上升沿个人调试经验里还有一个小技巧值得分享把伺服使能、故障复位、JOG、定位这几个动作分别封装成独立的“伪函数块”在PLC里用标准标签接口调用。这样换项目的时候只需要改映射地址和电子齿轮参数控制逻辑主体可以原封不动搬过去。三菱伺服从MR-JE到MR-J4很多控制字逻辑是相通的这套东西做好之后越用越省事。最后再提醒一句现场动控制字之前最好先用MR Configurator2和手动模式把伺服的基本动作验证一遍确认接线、方向、电子齿轮都没问题再切换到网络控制。否则通信和控制字叠加在一起出问题排查起来非常头疼。
返回列表