先分清:你的机床换刀是”纯 PMC”还是”宏程序 + PMC”
很多现场工程师一听说”换刀不动作”,第一反应是去翻梯形图,结果翻了半天没找到 M06 的译码——这时候要先搞清楚机床到底走哪条路:
- 纯 PMC 逻辑:M06 信号直接进 PMC,由梯形图完成全部动作(松刀、刀库转、夹紧)。这种机床根本没有 O9001,改 PMC 是唯一途径,M06 不换刀的六阶段分流排查里讲的就是这条路。
- 宏程序 + PMC:M06 先调用用户宏程序(通常是 O9001),宏程序负责逻辑判断和轴移动,再用 M 代码(如 M50–M56)通知 PMC 执行具体动作。加装刀库”找不到换刀宏”的坑,基本都出在这条路上。
判断方法很简单:看参数 6071 是不是等于 6(即 M06 被映射成了 O9001 的调用)。如果是,说明走宏程序路径;如果不是,且一执行 M06 就报”顺序号未找到”(PS0078),那就是宏程序丢了——本文讲的就是这种情况。
下面所有代码、M 代码、G54.x 位含义都以你机床厂的 PMC 梯形图(符号注释)为准。FANUC 只固定了”#1000 = G54.0″这种底层映射,至于 G54.0 在你这台机床上代表”目标刀已在主轴”还是”刀号超限”,是机床厂定义的。照搬别人的程序不核对 PMC,是撞刀的第一来源。
★ 参数调用链:6071 / 6080–6089 / 3202#4(NE9) 一张图说清

换刀宏程序不是”凭空”被调用的,背后是一条由参数搭起来的调用链。核心三个角色:
| 参数 | 作用 | 典型设定 | 说明 |
|---|---|---|---|
| 6071 | 设定一个 M 代码,该 M 代码调用 O9001 | 6071 = 6(即 M06 调 O9001) | 6072→O9002 … 6079→O9009,逐个对应 |
| 6080–6089 | 设定 M80–M89,分别调用 O9020–O9029 | 6080=80→O9020 … 6089=89→O9029 | 用于换刀过程中的辅助宏(如 M80 扣刀、M81 松刀等) |
| 3202#4 (NE9) | 9000 号段程序的编辑/显示/输出保护 | 1 = 锁定;0 = 解锁 | O9000–O9999 通常是机床厂宏,出厂默认锁住 |
规律很好记:6071 这一组(6071–6079)管 O9001–O9009(子程序),6080 这一组(6080–6089)管 O9020–O9029(宏程序)。两组内部都是”参数值 = 被调用的程序号末位 + 9000″。
补充:6071 里填的数字就是”触发调用的 M 代码号”。比如设定 6071=6,系统一读到 M06,就去执行 O9001;如果 O9001 不存在,就会报 PS0078(顺序号未找到)。这也解释了为什么”换刀宏丢了”和”参数没设对”症状一样。
9000 段被锁住怎么办:3202#4(NE9) 的正确解锁顺序
想改 O9001,一进编辑画面就提示写保护?那是 3202#4(NE9) 在起作用。正确、安全的操作顺序如下:
- 先开参数写入:MDI 方式下,按
OFS/SET→[SETTING],把 PARAMETER WRITE(参数写入) 设为 1。这时屏幕会出 SW0100 报警,属正常,改完参数记得关掉即可。 - 改 3202#4 = 0:进参数画面,找到 3202,把第 4 位 NE9 置 0,O9000–O9999 段即可编辑、显示、输出。
- 改完立刻还原:编辑/备份完,把 NE9 改回 1,再把第 1 步的 PWE 关回 0,按
RESET清报警。
两个必须知道的风险点:
- 改 3202 前先拍照记录原始值。3202 不止 NE9 一个位:#0(NE8) 管 8000 段、#5(NEU) 管公英制输入、#7(NPE) 管参数生效。只动你要动的位,其余原样保留,改完整体核对一遍。
- 密码层(3210/3211):如果参数 3210 里被机床厂设了非零密码,且你不知道,NE9 会强制保持为 1,你怎么设都设不进 0。此时不要乱试密码——某些控制上连续输错会把该段永久锁死,只能联系机床厂。正确做法是先确认 3210 的值,再在 3211 输入与 3210 相同的”关键字”解锁。
经验:9000 段是机床厂的”命根子”,锁着是为保护你。改之前一定先用卡或笔记本把 O9001 和当前 3202 值备份出来,改完就重新锁上。
通用斗笠式刀库宏模板(逐行注释版)
下面是一段结构示意模板,目的是让你看懂”宏程序 + PMC”是怎么配合的。M50–M56 这些 M 代码、以及 #1000 到底代表什么,必须和你的 PMC 梯形图逐条对上,不能直接下载套用。
O9001 (M06 TOOL CHANGE - 示意模板,M代码须与PMC一致)
(--- 0. 同刀号检查:PMC 置 G54.0=1 表示目标刀已在主轴 ---)
IF [#1000 EQ 1] GOTO 99 (跳过换刀,直接结束)
(--- 1. 保存模态,防止换刀后主程序坐标系错乱 ---)
#199 = #4003 (保存 G90/G91 模态)
#198 = #4006 (保存 G20/G21 单位模态)
(--- 2. Z 回安全位 + 主轴定向 ---)
G91 G28 Z0 (Z 轴回参考点)
M19 (主轴定向;PMC 用 F45.7 反馈"定向完成")
(--- 3. 刀库动作:以下 M 代码含义由你的 PMC 定义 ---)
M50 (刀库使能)
M52 (刀库前进 / 扣刀)
M53 (松刀 + 吹气)
G91 G30 P2 Z0 (Z 移到第二参考点 = 换刀点,参数 1241)
M55 (刀具夹紧)
M56 (刀库退回)
M51 (刀盘旋转结束)
(--- 4. 重合检查:换刀前后 T 号不一致则报警 ---)
IF [#20 GT #500] THEN #3000 = 1 (TOOL NO. OVER) (#500=刀库容量,MTB定义)
(--- 5. 恢复模态 ---)
G#199 G#198 (恢复 G90/G91、G20/G21)
N99 M99

模板里几个关键点:
- #1000 是只读输入,由 PMC 通过 G54.0 驱动,宏程序只能读不能写。上面的
IF [#1000 EQ 1]就是读它。 - 模态保护(#199=#4003、#198=#4006)是必做的。换刀宏里会执行 G91、G28、G30 这类会改变坐标模态和单位的指令;如果不保存、不恢复,换刀一结束主程序的坐标系/单位就可能乱掉,这是隐蔽但致命的加工事故来源。
- #3000 = 1 触发的是报警 3001,括号里的信息不超过 26 个字符(英文)或相应长度(中文)。这条是换刀异常时的”最后兜底”。
G54.x 接口信号与 #1000 / #1001 / #1002 的对应关系

这是整篇最容易搞混、也最容易出事的地方,先把底层硬规则讲死:
- #1000–#1015 对应 G54.0–G55.7,是 PMC 写给宏程序的只读输入信号;方向是 PMC → 宏。
- #1100–#1115 对应 F54.0–F55.7,是宏程序回写给 PMC 的可读写输出信号;方向是 宏 → PMC。
- 一个字节 8 位,所以 G54 占 #1000–#1007,G55 占 #1008–#1015,依次类推。
具体位映射(FANUC 固定部分):
| PMC 信号 | 宏变量 | 方向 | 常见含义(随机床厂可能不同,以 PMC 注释为准) |
|---|---|---|---|
| G54.0 | #1000 | PMC→宏(只读) | 目标刀号 = 主轴当前刀号(一致则跳过换刀);也有厂用作”刀号≥刀库容量” |
| G54.1 | #1001 | PMC→宏(只读) | 部分厂用作”T0 / 无刀呼叫”标志 |
| G54.2 | #1002 | PMC→宏(只读) | 主轴无刀 |
| G54.3 | #1003 | PMC→宏(只读) | 换刀中 / 刀库忙 |
| G54.4–G54.7 | #1004–#1007 | PMC→宏(只读) | 机床厂自定义(到位、错误等) |
| G55.0–G55.7 | #1008–#1015 | PMC→宏(只读) | 机床厂自定义扩展位 |
| F54.0–F55.7 | #1100–#1115 | 宏→PMC(可读写) | 宏反馈给 PMC 的状态(如换刀完成、请求旋转等) |
注意:表格里”常见含义”那列不是 FANUC 标准,而是大多数机床厂按 FANUC 标准换刀宏约定下来的习惯。你拿到任何一台新机床,第一件事是打开 PMC 的符号表/注释,确认 G54.0 到底代表什么。我在现场见过把”主轴无刀”放在 G54.0 的厂,照搬模板立刻撞刀。
回到模板:IF [#1000 EQ 1] GOTO 99 读的就是 G54.0。只有当 PMC 在梯形图里判断”程序呼叫的刀号 == 主轴上现有刀号”并输出 G54.0=1 时,宏才会跳过换刀。这个判断逻辑本身写在 PMC 里,不在宏程序里——这就是”宏程序 + PMC”配合的本质。
模态保护:#199 = #4003、#198 = #4006 必须恢复
单独拎出来强调,是因为这是新手最常漏的一步。宏程序里通常用到的模态系统变量:
- #4003:当前 G 代码第 3 组,90 = G90(绝对),91 = G91(增量)。
- #4006:当前 G 代码第 6 组,20 = G20(英制),21 = G21(公制)。
换刀宏执行 G91 G28 Z0、G91 G30 P2 Z0 时,坐标模态被改成了 G91;如果结尾不恢复,主程序后续的坐标值就全按增量算——肉眼看不出,加工直接报废。
正确做法(模板里已体现):
#199 = #4003 (进宏先存)
#198 = #4006 (进宏先存)
... 换刀动作 ...
G#199 G#198 (出宏前恢复:G + 变量值,#4003 本身是只读不能写,只能借变量恢复)
#199、#198 只是示例用的局部/公共变量,你也可以用 #500/#501 等公共变量,关键是”进存出取”。顺带说一句,#4001(G00/G01)、#4014(当前工件坐标系 G54–G59)等也是只读模态变量,换刀宏里若动了对应模态,同样要存要还。
参考点依赖:1240 / 1241 与 G91 G30 P2
换刀宏里的轴移动几乎都依赖参考点参数,装调时这俩必须和实际机械位置对上:
- 1240(第一参考点):通常是 Z 轴回零后的安全高度,也是 G91 G28 Z0 的落点。
- 1241(第二参考点):很多刀库把”换刀点”设成第二参考点,宏里用
G91 G30 P2 Z0把 Z 轴移到这里完成扣刀/拔刀。 - 主轴定向位置则由 4031(定向停止位置) 与 4077(定向偏移) 决定,定向完成信号是 PMC 侧的 F45.7(主轴定向结束)。
如果换刀点高度不对——比如 1241 设低了,扣刀时 Z 还没到安全位刀库就前进,轻则撞刀柄,重则损坏主轴锥孔。改这些参数前先确认机械坐标,最好单段 + 手轮寸动验证一遍。
宏程序内的报警写法:#3000 = 1
宏程序不能只”默默失败”,该报的警必须写。FANUC 的编程报警用系统变量 #3000:
IF [#20 GT #500] THEN #3000 = 1 (TOOL NO. OVER)
规则:
- 报警号 = 3000 + #3000 的值。上面写
#3000 = 1,屏幕上就是 3001 报警。 - 括号里是报警信息,长度有限(英文约 26 字符,中文相应),建议用英文或简短中文。
- 常用场景:T 代码大于刀库容量、主轴有刀却要求”主轴无刀”、换刀超时未收到 PMC 到位信号等。
提示:#3000 是”编程报警”,和 PLC(PMC)侧报的报警号体系不同。现场排故时,先看清报警是 3000 段(宏)还是 1000/2000 段(PMC/伺服),能少走很多弯路。相关思路可参考无报警但停机的诊断方法。
加装刀库的完整避坑清单
给一台原本没刀库的机床加刀库,”找不到换刀宏”只是第一个坑。下面这份清单是照着出过事的现场整理的:

- 改 PMC 前先全量备份:参数(全部)、PMC 梯形图(带注释)、已有的 O9000 段程序、刀具补偿、宏变量。五件套不全,出问题只能从头调。
- 先确认走哪条路:用 6071 判断是宏程序路径还是纯 PMC 路径,别一上来就写 O9001。
- 解锁再编辑,编辑完重锁:3202#4(NE9) 设 0 才能改 O9001,改完一定设回 1;PWE 用完即关。
- 密码别乱试:3210 有值且不知道,先找机床厂,别硬改 NE9。
- M 代码必须和 PMC 逐条对:M50–M56 在你这台机床上代表什么动作,翻梯形图符号表确认,不要套别人的。
- #1000 等含义以 PMC 注释为准:G54.x 每位语义是厂定义的,套模板前先核。
- 模态必存必还:#199=#4003、#198=#4006,结尾 G#199 G#198。
- 单段 + 手轮验证:第一次跑换刀宏,用 MDI 单段、手轮寸动,确认每个动作到位再连贯运行。
- 参考点参数实测:1240/1241 用机械坐标核对,定向位置 4031/4077 调准。
- 加报警兜底:容量错、重合失败、超时未到位,至少各写一条 #3000 报警。
常见问题(FAQ)
FANUC 换刀宏程序丢了还能恢复吗?参数 6071 是干什么的?
能恢复,但要看丢到什么程度。参数 6071 存的是一个 M 代码号(通常是 6,即 M06),系统一读到这个 M 代码就去调用 O9001。如果只是 O9001 程序被删了,按本文”9000 段解锁”步骤把 3202#4 设 0,重新输入宏程序即可;如果 6071 是空的(=0),说明这台机床本来就是纯 PMC 换刀,根本没有宏程序可丢,得去改梯形图。恢复后务必把 NE9 重新锁回 1。
为什么编辑 O9001 程序提示写保护?要改哪个参数?
O9000–O9999 段出厂默认被参数 3202#4(NE9) 锁住(=1 时不可编辑/显示/输出)。先开 PWE(参数写入=1),再把 3202#4 设 0 就能编辑。改完记得设回 1 并关 PWE。若怎么都设不进 0,多半是 3210 设了密码,需在 3211 输入对应关键字解锁——不要乱猜密码,以免锁死。
换刀宏程序里的 #1000 G54.0 是什么意思?
#1000 是宏程序读取 PMC 信号的接口变量,FANUC 固定对应关系为 #1000 = G54.0(只读,由 PMC 驱动)。常见约定下 G54.0=1 表示”程序呼叫的刀号已经等于主轴上当前刀号”,宏程序读到 1 就跳过换刀。但要注意:G54.0 具体代表什么,是机床厂在梯形图里定义的,不同厂可能不同,务必以 PMC 符号注释为准,不能想当然。
加装刀库时改 PMC 梯形图要注意什么?
第一,改之前把参数、梯形图、O9000 程序、刀补、宏变量五件套全量备份;第二,先确认本机是宏程序路径还是纯 PMC 路径,再决定写 O9001 还是改梯形图;第三,宏程序里的 M 代码(如 M50–M56)和 G54.x 各位含义,必须和你的 PMC 逐条对上再套用;第四,模态变量(#4003/#4006)进宏存、出宏还;第五,第一次运行用单段+手轮验证。详见上文避坑清单。

























暂无评论内容