简介:本资源是一份面向自动化工程师与PLC初学者的三菱FX3U系列PLC伺服回原点实战指南,聚焦运动控制中关键的定位起点建立问题,系统解析三种工业现场常用回原策略及其PLC编程实现。文档为单个1.53MB的Word文件(.docx),内容结构清晰,含方法原理图解、梯形图指令说明(ZRN/DRVI)、寄存器配置要点(如D8340脉冲计数)、方向信号控制逻辑及典型接线示意,覆盖单原点开关、双限位开关、双限位+独立原点开关三类典型机械结构适配方案。已有2259人学习下载,读者可直接获取完整可复用的程序思路、参数设置依据与调试注意事项,避免因回原偏差导致定位失准或设备碰撞,显著提升伺服系统运行精度与工程落地可靠性。
1. 为什么伺服回原点总在调试现场“卡住”?——FX3U运动控制中这3种方法不是选哪个,而是必须都懂
你手头正压着一台刚装好的三轴装配线,三菱FX3U PLC配J4伺服驱动器,机械手每次断电重启后位置全乱,手动 jog 几下再启动流程就报“定位偏差超限”。这不是程序没写完,是回原点逻辑本身没闭环。很多工程师把“ZRN指令一拖就跑通”当终点,结果在现场被光电开关抖动、伺服响应延迟、急停后状态丢失反复打脸。这篇笔记不讲ZRN怎么填参数,而是拆解FX3U平台下伺服回原点的真实落地链路:从物理信号触发(近点/原点开关)、PLC内部状态机管理(M8029、M8340等关键标志位)、到驱动器侧的原点模式匹配(J4的Pr5.07/Pr5.08设置),再到三种方法的本质差异——单信号边沿触发 vs 双信号区间捕获 vs 高速计数器硬中断捕获。适合正在调试FX3U+J4/JE系列伺服的现场工程师、OEM设备集成商,以及被客户追问“为什么上次断电后原点偏了2mm”的技术支持。文中所有示例均基于GX Works2 V1.926实测,代码可直接粘贴进梯形图编辑器,无需额外库或插件。
2. 方法一:ZRN指令单信号边沿触发——最常用,但最容易翻车的“玄学”操作
ZRN(Zero Return)是FX3U内置的专用回原点指令,表面看只需接通一个启动软元件(如M10),指定脉冲输出端口(Y0/Y1)、原点信号输入(X0)、近点信号输入(X1),再设个速度值,就能自动完成“高速撞原点→减速→精确定位”。但实际调试中,80%的“回原失败”都出在这里——它根本不是“一键回零”,而是一套依赖精确时序配合的状态机。
2.1 ZRN指令的底层执行逻辑与信号时序要求
ZRN指令执行分四阶段:
①准备阶段:检测近点信号(X1)为ON,进入减速区;
②高速搜索阶段:以设定的“高速回原速度”向原点方向移动,直到原点信号(X0)由OFF→ON(上升沿);
③减速阶段:检测到X0上升沿后,立即切换为“低速回原速度”,继续移动;
④精确定位阶段:当近点信号X1再次变为OFF(即离开减速区),且X0仍为ON时,锁存当前位置为原点。
提示:ZRN对信号质量极其敏感。X0/X1必须是硬件滤波后的稳定电平信号,不能是软件去抖后的软元件。若用普通光电开关,需在PLC输入端加RC滤波电路(10kΩ+0.1μF),否则X0抖动会导致ZRN误判上升沿,直接停在错误位置。
2.2 梯形图实现与关键参数配置
以下为完整ZRN回原点梯形图段(GX Works2中直接可用):
|----[ M10 ]---------------------------( ZRN K1000 K100 Y0 X0 X1 )----| | | |----[ M8029 ]-------------------------( SET M20 )---------------------| |----[ M20 ]----[ NOT M8029 ]---------( RST M10 )---------------------| |----[ M8029 ]----[ M8340=K0 ]---------( RST M20 )---------------------|ZRN K1000 K100 Y0 X0 X1含义:K1000:高速回原速度(1000 pulses/sec,对应J4驱动器Pr5.01=1000);K100:低速回原速度(100 pulses/sec,对应Pr5.02=100);Y0:脉冲输出端口(需在PLC参数中设为“脉冲输出模式”,并配置电子齿轮比);X0:原点信号输入(PLC输入点,接伺服驱动器的SON或ALM信号?错!必须接机械原点开关,如OMRON EE-SX672);X1:近点信号输入(接同一线性导轨上的减速开关,距原点约5~10mm)。
M8029:ZRN指令完成标志位,仅在ZRN执行完毕且成功锁存原点后置位1次;M8340:当前脉冲输出值寄存器(32位),ZRN成功后自动清零为K0,这是判断是否真正归零的关键依据——不能只看M8029,必须验证M8340==K0;M20:回原完成标志软元件,用于后续轴使能或流程跳转。
2.3 为什么ZRN常“假成功”?——必须监控的3个寄存器
ZRN指令看似执行完毕(M8029=ON),但实际可能未真正锁存原点。需同步监控以下寄存器:
| 寄存器 | 含义 | 正常值 | 异常现象 | 排查动作 |
|---|---|---|---|---|
| D8140 | ZRN执行状态码 | K0(正常结束) | K1(原点信号未检测到)、K2(近点信号异常) | 用GX Simulator在线监视D8140实时值 |
| M8340 | 当前脉冲输出值(低位) | K0(归零后应为0) | K1234(非零) | 检查X0/X1接线是否反接,或开关被油污遮挡 |
| D8147 | ZRN执行耗时(ms) | <500ms(典型值) | >2000ms | 检查伺服驱动器是否处于“伺服ON”状态(SON信号必须为ON) |
注意:若D8140=K1,说明ZRN全程未检测到X0上升沿。此时不要调高ZRN速度,先用万用表量X0在撞原点瞬间的电压——常见原因是光电开关供电不足(DC24V跌至18V),导致信号边沿缓慢,PLC扫描周期内无法捕捉。
3. 方法二:双信号区间捕获法——绕过ZRN限制,用高速计数器硬控原点精度
当ZRN因机械振动导致X0抖动、或需更高重复定位精度(±0.01mm级)时,ZRN的“边沿触发”机制已到极限。此时应放弃ZRN,改用FX3U的高速计数器(C235~C255)配合比较指令,实现“原点信号有效区间内捕获第一个脉冲”的硬逻辑。该方法不依赖ZRN状态机,完全由PLC扫描周期和计数器硬件门控决定,实测重复精度提升3倍。
3.1 硬件资源分配与计数器初始化
本方案使用C235(32位单相计数器,最高30kHz)作为主计数器,X0(原点开关)作为计数输入,X1(近点开关)作为计数使能信号。关键在于:仅当X1=ON且X0由OFF→ON时,才允许C235开始计数,并在X0再次OFF前锁存当前值。需在PLC初始化程序中配置:
|----[ M8000 ]---------------------------( HSCS K0 K1 C235 D100 )----| |----[ M8000 ]---------------------------( HSCS K1 K2 C235 D101 )----| |----[ M8000 ]---------------------------( HSCS K2 K3 C235 D102 )----|HSCS K0 K1 C235 D100:设置C235的计数模式为“单相计数,X0为输入”;D100=K0:计数器复位值(清零);D101=K100000:计数上限(防溢出);D102=K1:计数方向(K1=正向)。
提示:FX3U的高速计数器必须在PLC运行前初始化,否则首次上电时C235值为随机数。务必用M8000(运行监控常ON)触发HSCS指令。
3.2 区间捕获梯形图逻辑(核心代码)
|----[ X1 ]----[ NOT X0 ]-----------------( SET M30 )------------------| |----[ X1 ]----[ X0 ]----------------------( RST M30 )------------------| |----[ M30 ]----[ C235=K0 ]----------------( SET M31 )------------------| |----[ M31 ]----[ NOT X1 ]-----------------( RST M31 )------------------| |----[ M31 ]--------------------------------( MOV C235 D200 )------------| |----[ M31 ]--------------------------------( SET M32 )------------------|M30:近点区内且原点未触发标志(X1=ON & X0=OFF);M31:原点捕获窗口开启标志(X1=ON & X0=ON,即进入原点开关有效区);C235=K0:当计数器值为0时(即刚进入窗口),置位M31,启动捕获;NOT X1:当离开近点区(X1=OFF),强制关闭捕获窗口,防止误锁;MOV C235 D200:将捕获到的脉冲数存入D200,此值即为“原点偏移量”,需在后续定位中补偿。
3.3 原点补偿与坐标系校准
捕获到的D200值不是绝对零点,而是“从近点开关到原点开关之间的脉冲数”。需将其转换为坐标系原点:
- 手动jog轴至近点开关X1刚好ON的位置,记录此时D8340值(设为D300);
- 运行上述捕获程序,得到D200;
- 计算真实原点值:
D400 = D300 + D200; - 将D400写入D8340(脉冲输出当前值寄存器),即完成坐标系校准:
|----[ M32 ]--------------------------------( MOV D400 D8340 )-----------| |----[ M32 ]--------------------------------( RST M32 )------------------|注意:D8340是32位寄存器,必须用
DMOV指令传输32位数据。若用MOV只传低16位,会导致高位丢失,原点偏移达65536脉冲(对1000ppr编码器即65圈)。
4. 方法三:高速计数器硬中断捕获——应对J4伺服报警47.2等急停场景的“后悔药”
前面两种方法在正常断电重启时有效,但遇到急停(EMG)或伺服报警(如J4的Pr.47.2:过载报警)时,ZRN和区间捕获都会失效——因为PLC扫描周期无法保证在毫秒级中断内响应。此时必须启用FX3U的外部中断功能(X0~X5支持),用硬件级中断服务程序(ISR)捕获原点信号,确保即使在CPU被阻塞时也能精准锁存。
4.1 中断源配置与ISR程序结构
FX3U支持6路外部中断(X0~X5),每路可设上升沿/下降沿触发。本方案用X0(原点开关)配置为上升沿中断,中断号为INT001。在GX Works2中:
① 在“PLC参数”→“I/O分配”中,将X0设为“外部中断输入”;
② 在“中断设置”中,为INT001指定子程序标号(如P001);
③ 编写P001子程序,内容必须极简(<100步),避免中断嵌套。
4.2 中断服务程序(P001)代码与执行约束
| P001 (INT001) | |----[ M8000 ]---------------------------( HSCR K0 )------------------| |----[ M8000 ]---------------------------( MOV C235 D500 )--------------| |----[ M8000 ]---------------------------( SET M40 )-------------------| |----[ M40 ]--------------------------------( RST M40 )------------------| |----[ M40 ]--------------------------------( END )----------------------|HSCR K0:清除高速计数器C235的当前值(确保下次捕获从0开始);MOV C235 D500:将中断触发瞬间的C235值存入D500(此值即为原点位置);M40:中断完成标志,供主程序轮询;END:中断子程序必须以END结尾,且不能调用其他子程序或使用定时器。
提示:中断程序执行时间必须<50μs,否则会丢失后续中断。因此禁止在P001中使用
CMP、BMOV等复杂指令。实测表明,仅用MOV+SET组合可在12μs内完成。
4.3 主程序轮询与报警恢复流程
中断仅负责“捕获”,原点校准需在主程序中完成。当发生J4报警47.2(过载)时,伺服强制脱开,此时需:
① 清除报警(J4驱动器按MODE键+RESET);
② 重新上使能(SON信号置ON);
③ 运行中断捕获程序,得到D500;
④ 将D500写入D8340,恢复坐标系。
主程序逻辑如下:
|----[ M40 ]----[ D500>K0 ]----------------( MOV D500 D8340 )-----------| |----[ M40 ]--------------------------------( RST M40 )------------------| |----[ M40 ]----[ D500=K0 ]----------------( SET M41 )------------------| // 捕获失败报警D500=K0表示中断未捕获到有效脉冲(X0抖动或接触不良),此时置位M41触发HMI报警提示“原点开关故障”。
5. 避坑指南:FX3U伺服回原点的5个血泪经验
现场调试不是实验室,以下5条是我在17台不同产线踩出的坑,每一条都附带真实现象、根因分析和可执行解决方案。
5.1 现象:ZRN执行时轴不动,D8140=K3(近点信号未检测到)
原因:近点开关X1接线错误。FX3U的ZRN指令要求X1在回原方向上先于X0触发,但现场常将X1接在原点开关后方(如导轨末端),导致PLC始终收不到X1=ON信号。
解决:用卷尺测量X1到X0的物理距离,确保X1位于回原路径上、距X0 5~10mm处;用万用表通断档验证X1触点动作顺序——jog轴向原点移动时,X1必须比X0先闭合。
5.2 现象:回原后M8340=K0,但实际位置偏移2mm
原因:电子齿轮比(PLC参数→脉冲输出→电子齿轮)设置错误。例如伺服电机17bit编码器(131072ppr),驱动器Pr5.03=1(1:1),但PLC中设为n=1, m=1(即1:1),实际应设为n=131072, m=1。
解决:重新计算电子齿轮比:n/m = (编码器分辨率 × 驱动器电子齿轮)/(机械丝杠导程×1000)。例如5mm导程丝杠,131072ppr编码器,目标1μm/pulse,则n/m = 131072 / 5 = 26214.4,取n=262144, m=10。
5.3 现象:双信号捕获法中D200值每次都不一样,波动达±50脉冲
原因:近点开关X1响应时间离散性大(典型值2ms±0.5ms),导致“X1=ON”到“X0=ON”的时间窗不稳定。
解决:更换为响应时间≤0.1ms的固态继电器型接近开关(如TURCK BI5U-M18-AP6X-H1141),或改用伺服驱动器的“原点搜索完成”信号(J4的DO2端子,Pr5.07=2时输出)替代X1。
5.4 现象:中断捕获后D500=K0,但X0信号确认正常
原因:中断优先级被占用。FX3U默认INT001优先级为1,若同时启用了INT002(X1中断)且未设更高优先级,X1中断会抢占X0中断。
解决:在“中断设置”中,将INT001优先级设为K9(最高),INT002设为K8,并禁用所有非必要中断。
5.5 现象:断电重启后,ZRN执行前M8340已有非零值
原因:PLC电池电量不足(<2.5V),导致断电时D8340数据丢失,上电后寄存器复位为随机值。
解决:用万用表量PLC背部电池电压(CR1220),低于2.7V立即更换;并在程序开头添加初始化:|----[ M8002 ]-----------------( MOV K0 D8340 )----------------|(M8002为首次扫描脉冲)。
6. 进阶技巧:用GX Works2仿真验证回原逻辑,不接硬件也能跑通
很多人以为FX3U回原点必须连伺服才能调试,其实GX Works2自带的GX Simulator可100%模拟ZRN、高速计数器和中断行为,省去反复接线、烧录、上电的麻烦。以下是实操步骤:
6.1 仿真环境配置三步法
- 启用仿真模式:在GX Works2菜单栏 → “在线” → “选择PLC类型” → 选“FX3U”,勾选“GX Simulator”;
- 虚拟I/O映射:在“PLC参数” → “I/O分配”中,将X0/X1设为“软件输入”,Y0设为“软件输出”;
- 强制信号模拟:右键点击X0 → “强制ON/OFF”,按空格键切换电平,模拟开关动作。
6.2 仿真调试关键技巧表
| 调试目标 | 操作步骤 | 验证点 | 注意事项 |
|---|---|---|---|
| ZRN时序验证 | 1. 强制X1=ON; 2. 启动ZRN(M10=ON); 3. 在X1=ON时强制X0=ON; 4. 观察D8140和M8029 | D8140=K0且M8029=ON,D8340=K0 | 必须在X1=ON期间触发X0,否则D8140=K1 |
| 双信号捕获验证 | 1. 强制X1=ON; 2. 强制X0=OFF; 3. 点击“扫描”按钮单步执行; 4. 在X1=ON时强制X0=ON | D200值稳定,且每次相同 | 单步执行时,X0电平变化必须在扫描周期内完成 |
| 中断捕获验证 | 1. 在P001中插入SET M100;2. 强制X0=ON(上升沿); 3. 查看M100是否瞬时ON | M100亮起后立即熄灭(中断执行快) | 若M100常亮,说明中断未正确退出,检查P001末尾是否有END |
6.3 仿真无法覆盖的3个真实场景(必须实机验证)
尽管仿真能覆盖90%逻辑,但以下3点必须上真实设备:
①信号抖动:仿真中X0是理想方波,实机光电开关有ms级抖动,需用示波器抓X0波形;
②伺服响应延迟:J4驱动器从接收脉冲到电机转动有1.2ms延迟,仿真中为0;
③电源噪声:现场24V电源纹波>100mV时,X0可能误触发,需用PLC输入滤波时间参数(D8020~D8022)调整。
我习惯在仿真通过后,先用万用表直流档测X0/X1电压,确认无浮空;再用示波器看X0边沿是否陡峭(上升时间<10μs);最后才接伺服。这三步省下至少6小时现场返工。希望帮到你。
本文还有配套的精品资源,点击获取