Подпрограммы M98/M99: запишите повторяющийся контур один раз и вызывайте многократно
На примере объясняются вызов M98 и возврат M99, номер P и число повторов L, обработка одинакового паза в нескольких местах инкрементной подпрограммой и ошибки вызова.
Зачем нужны подпрограммы?
Одинаковый паз часто режут в пяти местах, а один контур — несколько раз на разных глубинах. Копирование кадров удлиняет программу, а изменение одного размера приходится вносить во всех пяти местах. Один пропуск даёт брак с отличающимся размером.
Подпрограмма выделяет повторяемую часть в отдельную программу, которую вызывает главная. Форма хранится в одном месте, а главная программа указывает только «где и сколько раз».
Вызов и возврат
| Команда | Значение | Пример |
|---|---|---|
M98 P_ | Вызывает программу с номером P (номером O) | M98 P3100 |
L_ или начальные цифры P | Число повторов | L3 → 3 раза |
M99 | Возвращает к строке после кадра вызова | Последняя строка O3100 |
M99 P_ | Возвращает с переходом к указанному номеру кадра | Для ветвлений и циклов |
Пример: три паза инкрементной подпрограммой
Подпрограмма O3100 написана в инкрементном режиме G91. От текущей точки она опускается на 6 mm, режет паз 30 mm по X, поднимается на 6 mm и смещается на 10 mm по Y, возвращаясь к начальному X. Конечная точка становится началом следующего повтора, поэтому три вызова дают три паза с шагом 10 mm.
Три вызова подпрограммы O3100 через L3 для трёх пазов с шагом 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На рисунке выше показан результат анализа этой программы в CNC Path Analyzer (быстрый ход 8 сегментов, линейное резание 6 сегментов).
Правила для основной программы
- Восстановление режима: подпрограмма заканчивается в G91, поэтому сразу после возврата снова задайте
G90. В примере этоG90 G00 Z50.. Без G90 командаZ50.означает не «высота 50», а «на 50 mm выше текущего положения». Здесь движение вверх безопасно, но при подводе следующего инструмента возможно столкновение. - Начальная позиция: результат инкрементной подпрограммы зависит от положения при вызове. Перед вызовом явно задайте начало в абсолютных координатах.
- Состояние коррекций и циклов: активная коррекция радиуса или постоянный цикл могут неожиданно изменить движения подпрограммы. Осознанно приведите модальные состояния в порядок до и после вызова.
- Положение M30: если подпрограмма находится в том же файле, поместите её после
M30главной программы. Главная программа завершится на M30, и подпрограмма не запустится случайно.
Число повторов и расчёт времени
За один запуск подпрограмма режет Z 6 mm (F100) и X 30 mm (F300): 3.6 s и 6 s, всего 9.6 s; три запуска дают около 29 s чистого резания. Замена L3 на L5 меняет один символ и даёт пять пазов и около 48 s. Повторы упрощают изменение программы и оценку времени. Подробнее: расчёт времени обработки.
Виды ошибок вызова
В инструмент можно загрузить отдельные файлы вызываемых программ вместе с главной; номер P связывается с номером O внутри файла, а не с именем файла.
| Ошибка | Причина | Что показывает CNC Path Analyzer |
|---|---|---|
| Вызываемая программа не найдена | Нет программы с номером O, соответствующим P | Строку вызова и ненайденный номер |
| Повторяющийся номер O | Одинаковый номер у двух или более программ | Предупреждение о невозможности выбрать программу |
| Нет M99 | Подпрограмма не завершается и переходит в следующую программу | Предупреждение об отсутствии возврата |
| Бесконечные вызовы | Программы вызывают друг друга или программа вызывает себя | Расчёт останавливается по пределу рекурсии или выполнения |
Частые вопросы
Может ли подпрограмма вызвать другую подпрограмму?
Чем M98 отличается от макровызова G65?
G65 передаёт аргументы (A, B, C…) в переменные. Он вызывает одну форму с разными размерами, тогда как M98 повторяет одну операцию без аргументов.