CNC Path Analyzer

M98/M99 子程序:重复形状只写一次、多次调用

通过示例说明用 M98 调用子程序、用 M99 返回的结构,P 号与重复次数 L,用增量子程序在多个位置加工同样的槽的方法,以及调用错误的类型。

为什么要用子程序

在五个地方铣同样的槽,或者只改变深度多次加工同一轮廓,这种情况很常见。每次都复制粘贴同样的程序段,程序会变长,改一个尺寸就要改五个地方。只要漏掉一处,五件中就会有一件尺寸不同而成为废品。

子程序是把重复的部分单独做成一个程序,由主程序在需要时调用的结构。形状只在一个地方维护,主程序只需说明“在哪里、做几次”。

调用与返回

指令含义示例
M98 P_调用 P 号(O 号)的程序M98 P3100
L_ 或 P 的高位重复次数L3 → 3 次
M99返回调用程序段的下一行O3100 的最后一行
M99 P_返回,但转到指定的程序段号用于分支和循环结构

示例:用增量子程序加工三条槽

子程序 O3100 以 G91 增量方式编写。从当前位置下降 6 mm,沿 X 铣 30 mm 的槽,上升 6 mm 后一边回到起始 X 一边沿 Y 移动 10 mm。结束位置就是下一次重复的起始位置,所以只要把同一调用重复三次,就能得到三条间距 10 mm 的槽。

用 L3 调用子程序 O3100 三次,加工三条间距 10 mm 的槽

O3007
T1 M6
G21 G90 G17 G94
G54
S3000 M03
G00 X0. Y0. Z5.
M98 P3100 L3
G90 G00 Z50.
M30
O3100
G91 G01 Z-6. F100
X30. F300
G00 Z6.
X-30. Y10.
M99
用 L3 调用子程序 O3100 三次,加工三条间距 10 mm 的槽 — XY 路径XY
浅蓝虚线表示G00快速移动,橙色实线表示切削移动。圆弧以计算后的静态曲线展开。

上图是CNC Path Analyzer对该程序的解析结果 (快速移动 8 段, 直线切削 6 段).

主程序应遵守的规则

  • 恢复模式:子程序以 G91 状态结束,因此返回后要立即在主程序中重新指令 G90。示例中的 G90 G00 Z50. 就起这个作用。不写 G90 只写 Z50.,会被解释为“比当前高 50 mm”而不是“高度 50”。这次是向上的移动,问题不大;但如果是下一把刀的接近程序段,就可能导致碰撞。
  • 起始位置:增量子程序的结果取决于调用时的位置。在调用之前,用绝对坐标明确指令起始位置。
  • 补偿与循环状态:在刀具半径补偿或固定循环有效时调用,子程序中的移动可能会被意外地解释。调用前后要有意识地整理模态状态。
  • M30 的位置:把子程序放在同一文件中时,要放在主程序的 M30 之后。主程序在 M30 处结束,子程序就不会被误执行。

重复次数与循环时间计算

子程序执行一次的切削移动是 Z 6 mm(F100)和 X 30 mm(F300),分别为 3.6 秒和 6 秒,一次 9.6 秒,三次约 29 秒为纯切削时间。把重复次数改为 L5,只改主程序中的一个字符,就是五条槽、切削约 48 秒。这说明重复结构让程序修改和时间估算都变得简单。计算方法在加工时间计算中有更详细的介绍。

调用错误的类型

在工具中,可以把主程序和单独文件中的被调用程序一起载入,P 号对应的是文件中的 O 号,而不是文件名。

错误原因CNC Path Analyzer 的显示
找不到被调用程序没有与 P 号相同 O 号的程序调用行和找不到的编号
O 号重复同一编号的程序有两个以上无法确定使用哪一个的警告
缺少 M99子程序没有结束而延续到下一个程序缺少返回的警告
无限调用互相不断调用,或调用自身因递归或超出执行上限而中止计算

常见问题

子程序中还能再调用子程序吗?
可以。这称为嵌套调用,允许的层数(通常 4 层以上)因控制器而异。层数越深,越难跟踪模态状态,建议控制在 2 层以内。
M98 与 G65 宏调用有什么不同?
G65 是把自变量(A、B、C……)作为变量传递的宏调用。用于以不同尺寸调用同一形状,而 M98 是不带自变量地重复同样的动作。

后续步骤

在CNC Path Analyzer中检查路径