Подпрограммы и макропеременные в ЧПУ: M98/M99, G65, #-переменные, WHILE и IF
Как вызывать подпрограммы в Fanuc-подобных системах (M98, M99, повторы L), Sinumerik и Heidenhain, как устроены макропрограммы Custom Macro B: локальные, общие и системные переменные, IF/GOTO, WHILE/DO/END, вызов G65 с аргументами. Пример — сверление отверстий по окружности с расчётом координат.
Редакция MetalGuide7 мин чтенияОбновлено
Подпрограмма: вызов и возврат
Подпрограмма — отдельная программа или участок программы, который вызывают столько раз, сколько нужно. Типичный пример по руководству Haas — координаты отверстий: их записывают в подпрограмму один раз, а вызывают центровкой, сверлом и метчиком, каждый со своим постоянным циклом.
Команда | Что делает |
|---|---|
| Вызвать программу O2000 |
| Вызвать её три раза подряд, затем перейти к следующему кадру |
| Конец подпрограммы: вернуться в вызвавшую программу на кадр после вызова |
| Перейти к кадру N50; у Haas работает и без опции макропрограмм |
| У Haas: вызвать участок той же программы, начинающийся кадром N100 |
В формате Fanuc Series 10/11 номер подпрограммы — от 1 до 9999, повторов L — от 1 до 9999. В основном формате Fanuc адрес L доступен, когда включены макропрограммы, — формат задания повторов сверяйте с руководством своей стойки. M99 в конце основной программы у Haas зацикливает её до нажатия сброса.
Подпрограмма может вызывать другую — это вложенность. Предельная глубина зависит от системы: у Heidenhain TNC 640 — 19 уровней для подпрограмм, у Haas вложенные вызовы G65 — до 9 уровней.
Подпрограммы в Sinumerik и Heidenhain
Действие | Fanuc-подобные | Sinumerik | Heidenhain TNC |
|---|---|---|---|
Начало подпрограммы | Номер программы O | Отдельная программа с именем | Метка |
Вызов | | Имя программы в кадре, например | |
Повторы | | Адрес | Повтор участка: |
Конец и возврат | | | |
Вызов внешней программы | | По имени; косвенный вызов — | |
Особенности, которые подчёркивают руководства:
- Sinumerik: подпрограмме можно передать параметры в скобках —
BORDER(LENGTH,WIDTH,DEPTH). При повторах P параметры передаются только при первом вызове. Косвенный вызовCALLработает только для подпрограмм без параметров. - Heidenhain: подпрограммы пишут после кадра с
M2илиM30— иначе они выполнятся хотя бы раз без вызова. Подпрограмма не может вызвать сама себя, номер метки используют один раз. Участок сREP 2выполнится три раза: первый проход идёт до повтора.
Макропеременные
Макропрограмма (в Fanuc — Custom Macro B) — это подпрограмма, в которой вместо чисел стоят переменные: G01 X#24 F#9. Переменная — знак # и номер.
Переменные | Назначение | Что важно знать |
|---|---|---|
| «Пусто», значение не задано | Только для чтения, с ним сравнивают: |
| Локальные: аргументы вызова | При |
| Общие: видны всем программам | У Haas сохраняются при выключении; в Fanuc постоянные — |
| Системные: аварии, таймеры, координаты, корректоры | Номера разные у разных стоек — только по руководству своей стойки |
Примеры системных переменных Haas: #3000 — своё аварийное сообщение (номер от 1 до 999), #5021–#5026 — текущие координаты станка по осям, #5041–#5046 — текущие координаты в системе детали. Haas отмечает, что две последние группы нельзя читать во время движения. Если в адресе стоит переменная без значения, адрес пропускается: при пустой #1 кадр G00 X1.0 Y#1 превращается в G00 X1.0.
Условия и циклы
Конструкция | Что делает |
|---|---|
| Переход к кадру N100 |
| Переход, если условие выполнено; иначе — следующий кадр |
| Повторять участок, пока условие выполнено |
| Равно, не равно, больше, меньше, больше или равно, меньше или равно |
| Тригонометрия — у Haas аргумент в градусах |
| Скобки задают порядок вычислений: |
Число после DO и END связывает начало и конец цикла. По руководству Haas оно от 1 до 3 — то есть не больше трёх вложенных циклов в одной программе. Выйти из цикла по GOTO можно, войти внутрь — нельзя. Частая опечатка — D01 с нулём вместо DO1 с буквой O.
G65: вызов макроса с аргументами
G65 P9010 X0. Y0. I40. вызывает программу O9010 и раскладывает адреса по локальным переменным:
Адрес | A | B | C | I | J | K | D | E | F | H | M | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Переменная | #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | #9 | #11 | #13 | #17 | #18 | #19 | #20 | #21 | #22 | #23 | #24 | #25 | #26 |
Адреса G, L, N, O, P аргументами не служат: P — номер программы, L — число повторов. Аргументы пишите с десятичной точкой: Haas описывает для чисел без точки отдельные правила передачи, и значение может оказаться не тем, что вы ждали.
Пример: отверстия по окружности
Шесть отверстий на окружности радиусом 40 мм, первое повёрнуто на 15° от оси X. Макрос считает координаты в цикле WHILE и сверлит каждое отверстие циклом G81.
X = Xц + I · cos(A + i · 360°/H); Y = Yц + I · sin(A + i · 360°/H)
- Xц, Yц
- центр окружности, мм
- I
- радиус окружности центров, мм
- A
- угол первого отверстия от оси +X, градусы
- H
- число отверстий
Проверка для первого и третьего отверстий: 40 · cos 15° = 40 · 0,96593 = 38,637 мм, 40 · sin 15° = 10,353 мм; угол третьего 15° + 2 · 60° = 135°, координаты −28,284 и 28,284 мм.
%
O4001 (OKRUZHNOST 6 OTV)
N10 G21 G17 G40 G49 G80 G90 G94
N20 T2 M06 (SVERLO D8.5)
N30 G54 G00 X0. Y0. S1500 M03
N40 G43 H02 Z50. M08
N50 G65 P9010 X0. Y0. I40. A15. H6. Z-12. R2. F120.
N60 G00 Z50. M09
N70 M05
N80 G91 G28 Z0.
N90 M30
%
%
O9010 (OTVERSTIYA PO OKRUZHNOSTI)
(X=#24 Y=#25 I=#4 A=#1 H=#11 Z=#26 R=#18 F=#9)
IF [#11 EQ #0] GOTO900 (NET CHISLA OTVERSTIJ)
IF [#26 EQ #0] GOTO900 (NET GLUBINY)
IF [#1 NE #0] GOTO10
#1 = 0 (UGOL PO UMOLCHANIYU)
N10 #30 = 0 (SCHETCHIK)
#31 = 360 / #11 (SHAG UGLA)
WHILE [#30 LT #11] DO1
#32 = #1 + #30 * #31 (UGOL OTVERSTIYA)
#33 = #24 + #4 * COS[#32] (X)
#27 = #25 + #4 * SIN[#32] (Y)
G90 G98 G81 X#33 Y#27 Z#26 R#18 F#9
#30 = #30 + 1
END1
G80
M99
N900 #3000 = 1 (NE ZADAN ARGUMENT H ILI Z)
%Макрос сначала проверяет аргументы: без числа отверстий или глубины он остановит станок своим аварийным сообщением через #3000, а не просверлит неизвестно что. G98 возвращает сверло на высоту Z50, с которой вызвали макрос, — так безопаснее при прихватах. У Haas для этой задачи есть и готовый код окружности отверстий, но макрос переносится между Fanuc-подобными стойками с опцией макропрограмм.
Предостережения
- Опция. Макропрограммы у Haas — платная опция; в Fanuc они могут быть отключены параметром. Проверьте до того, как писать макрос под станок.
- Упреждающее чтение. Система вычисляет макровыражения заранее, пока станок ещё выполняет предыдущие кадры. В справке Haas по макросам — до 80 кадров вперёд; если макрос управляет выходами или ждёт сигнал, упреждение ограничивают — у Haas командой
G103 P1. - Пробный прогон. Первый запуск — без детали или с поднятым нулём по Z, покадрово. На экране переменных сверяют рассчитанные значения с таблицей, как в примере выше.
- Округление. Haas предупреждает, что число в переменной хранится двоично: 7 может прочитаться как 6,999999. Сравнение на равенство надёжнее через
ROUND. - Перенос между стойками. Номера системных переменных, диапазоны общих, функции и формат вызова различаются. Макрос с одного станка на другом сначала проверяют по руководству.
Где макросы экономят работу, а где проще и надёжнее отдать траекторию CAM-системе — в статье «CAM и постпроцессор».
Вопросы и ответы
Чем M98 отличается от G65?
Оба вызывают подпрограмму. G65 дополнительно передаёт аргументы — адреса A, B, C, X, Y и другие попадают в локальные переменные
Какие переменные сохраняются после выключения станка?
Зависит от стойки. У Haas все общие переменные остаются в памяти после выключения. В Fanuc постоянными считаются переменные
Почему макрос работает на одном станке и выдаёт ошибку на другом?
Макропрограммы — опция системы ЧПУ, её может не быть или она отключена параметром. Кроме того, различаются номера системных переменных, диапазоны общих переменных и набор функций. Перед переносом макроса сверяйте руководство и проверяйте программу пробным прогоном.
Как повторить подпрограмму несколько раз?
В Fanuc-подобных системах — адресом L в кадре вызова: M98 P2000 L3 выполнит подпрограмму три раза подряд. В Sinumerik число повторов задают адресом P в кадре вызова, в Heidenhain повтор участка программы — CALL LBL с REP.
Термины
Источники
- Haas Automation. Mill Operator's Manual, NGC, 2022 — подпрограммы M97/M98, макропрограммы, функции, WHILE/DO/END, G65
- Haas Automation. Mill Operator's Manual — Macros (онлайн-версия), аргументы и переменные
- Haas Automation. Macro Programming Information — переменные, IF, WHILE, упреждающее чтение
- Haas Automation — M98 Subprogram Call
- Haas Automation — M99 Subprogram Return or Loop
- HEIDENHAIN. TNC 640 User's Manual, Klartext Programming (NC-Software 34059x-11) — Subprograms and program section repeats
- Siemens. SINUMERIK 828D Programming Manual (Fundamentals) — Subprogram return M17, RET, Number of program repetitions (P), Indirect subprogram call (CALL)
- FANUC Series 0i-MODEL F. Operator's Manual for Lathe System (B-64604EN-1/01) — Subprogram calling (Series 10/11 format)
- CNC Concepts, Mike Lynch. Protecting
Читать также
G-код и CAM7 мин
Постоянные циклы сверления и нарезания резьбы: G81, G83, G73, G84, G98/G99
Как работают постоянные циклы сверления на фрезерных станках с Fanuc-подобными системами ЧПУ: адреса Z, R, Q, P, F, K/L, возврат G98 и G99, сверление с выводом G83 и с ломкой стружки G73, жёсткое нарезание резьбы G84 с M29 и расчёт подачи, пример программы и типичные ошибки.
G-код и CAM7 мин
Структура управляющей программы ЧПУ: кадр, слово, основные G- и M-коды
Из чего состоит программа для станка с ЧПУ, как читать кадр и слово, что делают основные G- и M-коды по ГОСТ 20999-83 и ISO 6983-1 и почему коды надо сверять с руководством к своей системе ЧПУ. С разбором короткой программы.
G-код и CAM6 мин
CAM и постпроцессор: как устроена цепочка от 3D-модели до станка
Путь от модели до управляющей программы — CAD, CAM, CLDATA, постпроцессор, проверка и станок. Что делает постпроцессор, почему «чужой» пост опасен, как проверяют программу до первой детали, какие CAM-системы есть на рынке и что передать программисту ЧПУ.
G-код и CAM7 мин
Системы координат станка и детали, G54 и коррекции инструмента
Нуль станка и нуль детали, смещения G54–G59, коррекция на длину G43/G49 и на радиус G41/G42/G40 — как это устроено в Fanuc-подобных системах, чем отличаются Sinumerik и Heidenhain и какие ошибки наладки чаще всего ведут к браку и столкновениям.