Параметрическое программирование ЧПУ
Обычная программа описывает одну деталь конкретными числами. Параметрическая работает с переменными: размеры, число отверстий или глубину задают в начале, а траекторию программа считает сама — с формулами, условиями и циклами. Одна такая программа обрабатывает целое семейство деталей.
У Fanuc это называется макропрограммированием (Custom Macro B), у Siemens Sinumerik — программированием с R-параметрами и пользовательскими переменными, у Heidenhain — Q-параметрами. Принципы одинаковые, отличается запись.
Когда это нужно
- Детали одного типа разных размеров: фланцы, втулки, плиты с разным числом отверстий.
- Повторяющиеся действия: обработка по глубине ступенями, отверстия по окружности, пазы.
- Геометрия, которую нет смысла считать вручную: сферы, эллипсы, наклонные плоскости.
- Проверки в программе: стоп с сообщением, если размер задан неверно.
Переменные Fanuc
| Переменные | Тип | Что хранят |
|---|---|---|
#0 | Пустая | Всегда «пусто», используется для проверки, задан ли аргумент |
#1–#33 | Локальные | Аргументы и рабочие значения макроса. Сбрасываются при выходе из макроса |
#100–#199 | Общие | Доступны всем программам, сбрасываются при выключении станка |
#500–#999 | Общие сохраняемые | Доступны всем программам и сохраняются при выключении |
#1000 и выше | Системные | Состояние станка: координаты, коррекции, модальные коды, аларм |
Переменную можно подставить вместо любого числа в кадре: G01 X#24 Z#26 F#9. Выражение пишут в квадратных скобках: G00 X[#1+10].
Арифметика и функции
| Запись | Действие |
|---|---|
#1=#2+#3, -, *, / | Арифметика |
SIN[#1], COS[#1], TAN[#1] | Тригонометрия, угол в градусах |
ATAN[#1]/[#2] | Арктангенс, результат в градусах |
SQRT[#1], ABS[#1] | Корень, модуль |
ROUND[#1], FIX[#1], FUP[#1] | Округление: до ближайшего, вниз, вверх |
EQ NE GT GE LT LE | Сравнения: =, ≠, >, ≥, <, ≤ |
AND OR XOR | Логические операции |
Условия и циклы
| Конструкция | Что делает |
|---|---|
IF [#1 GT 10] GOTO 100 | Переход к кадру N100, если условие выполняется |
IF [#1 EQ #0] THEN #1=5 | Одно присваивание по условию |
GOTO 100 | Безусловный переход к кадру N100 |
WHILE [условие] DO1 … END1 | Цикл: кадры между DO и END повторяются, пока условие верно. Номера 1–3 позволяют вкладывать циклы друг в друга |
Циклы WHILE — главный инструмент параметрического программирования: они заменяют десятки одинаковых кадров. Важно, чтобы переменная условия менялась внутри цикла, иначе программа зациклится.
Пример 1. Отверстия по окружности — цикл WHILE
Число отверстий, диаметр окружности и глубину задают в начале программы. Координаты каждого отверстия цикл считает через синус и косинус.
O1001 (ОТВЕРСТИЯ ПО ОКРУЖНОСТИ) #1=6 (ЧИСЛО ОТВЕРСТИЙ) #2=40 (ДИАМЕТР ОКРУЖНОСТИ) #3=0 (УГОЛ ПЕРВОГО ОТВЕРСТИЯ) #4=50 (ЦЕНТР X) #5=40 (ЦЕНТР Y) #6=-12 (ГЛУБИНА) G90 G54 G00 X#4 Y#5 G43 H03 Z20 S1000 M03 #10=1 (СЧЁТЧИК) WHILE[#10 LE #1]DO1 #11=#3+360*[#10-1]/#1 #12=#4+#2/2*COS[#11] #13=#5+#2/2*SIN[#11] G99 G81 X#12 Y#13 Z#6 R2 F120 #10=#10+1 END1 G80 G91 G28 Z0 M30
Чтобы просверлить 8 отверстий на окружности Ø60, достаточно поменять две строки: #1=8 и #2=60.
Пример 2. Обработка по глубине ступенями — WHILE с условием
Фреза проходит уступ на всю длину детали, каждый раз опускаясь на шаг. Последний проход точно выходит на заданную глубину, даже если она не делится на шаг.
O1002 (УСТУП СТУПЕНЯМИ ПО ГЛУБИНЕ) #1=10 (ГЛУБИНА УСТУПА) #2=3 (ШАГ ПО ГЛУБИНЕ) #3=0 (ТЕКУЩАЯ ГЛУБИНА) #4=-#1 G90 G54 G00 X-8 Y3 G43 H01 Z5 S2000 M03 WHILE[#3 GT #4]DO1 #3=#3-#2 IF[#3 LT #4]THEN #3=#4 G01 Z#3 F200 G01 X108 F300 G00 Z5 G00 X-8 END1 G91 G28 Z0 M30
При глубине 10 и шаге 3 программа сделает проходы на Z-3, Z-6, Z-9 и Z-10.
Вызов макроса G65 с аргументами
Повторяющуюся операцию оформляют как отдельную программу-макрос и вызывают с параметрами: G65 P9010 X40 Z-20 W5 D34 F0.05. Буквы аргументов попадают в локальные переменные макроса:
| Буква | Переменная | Буква | Переменная |
|---|---|---|---|
| A | #1 | K | #6 |
| B | #2 | M | #13 |
| C | #3 | Q | #17 |
| D | #7 | R | #18 |
| E | #8 | S | #19 |
| F | #9 | T | #20 |
| H | #11 | U, V, W | #21, #22, #23 |
| I, J | #4, #5 | X, Y, Z | #24, #25, #26 |
Не заданный аргумент равен «пусто» (#0) — это удобно проверять в начале макроса.
Пример 3. Макрос канавки для токарного станка — цикл и проверка
Макрос прорезает канавку любой ширины резцом шириной 3 мм несколькими врезаниями и останавливает станок с сообщением, если диаметр дна задан неверно.
O0010 (ОСНОВНАЯ ПРОГРАММА) G21 G40 G99 T0303 (КАНАВОЧНЫЙ 3 ММ) G97 S500 M03 G65 P9010 X40 Z-20 W5 D34 F0.05 G28 U0 W0 M30 O9010 (МАКРОС КАНАВКИ: X-D ДЕТАЛИ, Z-ПРАВЫЙ КРАЙ, W-ШИРИНА, D-ДНО, F-ПОДАЧА) IF[#7 EQ #0]GOTO 90 IF[#7 GE #24]GOTO 90 #30=#26-3 (ПЕРВОЕ ВРЕЗАНИЕ, ПРИВЯЗКА ПО ЛЕВОМУ УГЛУ) #31=#26-#23 (ПОСЛЕДНЕЕ ВРЕЗАНИЕ) G00 X[#24+4] WHILE[#30 GT #31]DO1 G00 Z#30 G01 X#7 F#9 G00 X[#24+4] #30=#30-2.5 (ШАГ МЕНЬШЕ ШИРИНЫ РЕЗЦА) END1 G00 Z#31 G01 X#7 F#9 G04 X0.3 G00 X[#24+4] M99 N90 #3000=1(GROOVE DIAMETER ERROR)
Запись #3000=1(текст) останавливает станок с алармом и сообщением. Текст сообщения на большинстве стоек должен быть латиницей.
Полезные системные переменные Fanuc
| Переменная | Значение |
|---|---|
#3000 | Аларм с сообщением: остановка программы |
#3006 | Останов с сообщением, продолжение кнопкой «Пуск» |
#4001–#4022 | Текущие модальные G-коды по группам |
#5001–#5005 | Координаты конца предыдущего кадра в системе детали |
#5021–#5025 | Текущие машинные координаты |
#5041–#5045 | Текущие координаты в системе детали |
Номера системных переменных коррекций и рабочих смещений зависят от серии стойки и объёма памяти коррекций — смотрите руководство программиста.
Siemens Sinumerik: R-параметры и циклы WHILE
В Sinumerik вместо #-переменных используют R-параметры (R1, R2…) и именованные переменные, объявленные в начале программы через DEF. Переменная подставляется в адрес через знак равенства: X=R1. Есть структурные циклы WHILE…ENDWHILE, FOR…ENDFOR, REPEAT…UNTIL и переходы GOTOF / GOTOB к меткам.
; ОТВЕРСТИЯ ПО ОКРУЖНОСТИ, SINUMERIK DEF INT N=6, I=0 DEF REAL D=40, ANG, XP, YP G90 G54 G0 X50 Y40 WHILE I<N ANG=360*I/N XP=50+D/2*COS(ANG) YP=40+D/2*SIN(ANG) G0 X=XP Y=YP CYCLE81(10, 0, 2, -12) I=I+1 ENDWHILE M30
Тот же уступ по глубине с R-параметрами и переходом назад к метке:
R1=-10 R2=3 R3=0 G0 X-8 Y3 Z5 STEP: R3=R3-R2 IF R3<R1 R3=R1 ENDIF G1 Z=R3 F200 G1 X108 F300 G0 Z5 G0 X-8 IF R3>R1 GOTOB STEP M30
Советы
- Сначала проверяйте программу в режиме отработки по кадрам с увеличенным отводом по Z: ошибка в формуле видна не сразу.
- Комментируйте переменные в начале программы — через месяц будет непонятно, что хранит #17.
- Не используйте сохраняемые #500–#999 для временных значений: другая программа может на них рассчитывать.
- Ставьте проверки с #3000 на всё, что может разрушить деталь или инструмент.
Тренажёры сайта выполняют обычный G-код без макросов. Основы, без которых в макросах не разобраться, — в уроках и справочнике G-кодов. Нужна параметрическая программа под ваш станок — её можно заказать.