Параметрическое программирование ЧПУ

Обычная программа описывает одну деталь конкретными числами. Параметрическая работает с переменными: размеры, число отверстий или глубину задают в начале, а траекторию программа считает сама — с формулами, условиями и циклами. Одна такая программа обрабатывает целое семейство деталей.

У 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#1K#6
B#2M#13
C#3Q#17
D#7R#18
E#8S#19
F#9T#20
H#11U, V, W#21, #22, #23
I, J#4, #5X, 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-кодов. Нужна параметрическая программа под ваш станок — её можно заказать.