Макропрограммы Fanuc: Macro B

Макропрограмма — это G-код с переменными, формулами, условиями и циклами. Одна программа обрабатывает целое семейство деталей: размеры задаются в начале или передаются в вызове G65. Все примеры на этой странице можно выполнить в онлайн-симуляторе — он понимает Macro B.

Переменные

НомераТипЧто хранят
#0ПустаяВсегда «нет значения». Адрес с пустой переменной пропускается: X#0 — как будто X не написан
#1–#33ЛокальныеСвои в каждом вызове макроса G65; сюда попадают аргументы вызова
#100–#199ОбщиеВидны во всех программах, сбрасываются при выключении
#500–#999Общие сохраняемыеВидны во всех программах и сохраняются после выключения
#1000 и вышеСистемныеПоложение осей, коррекции, модальные коды, аларм #3000. В симуляторе — только #3000

Значение записывается присваиванием #1 = 25, используется после адреса: G01 X#1, Z-#2, X[#1 + 2]. Номер переменной тоже может быть выражением: #[#10 + 1].

Выражения и функции

ЗаписьЗначение
+ − * /Арифметика; приоритет — как в математике, скобки только квадратные [ ]
SIN[a] COS[a] TAN[a]Тригонометрия, угол в градусах
ATAN[a]/[b]Арктангенс a/b с учётом четверти, 0–360°
SQRT[a] ABS[a]Корень, модуль
ROUND[a] FIX[a] FUP[a]Округление, отбрасывание дробной части, округление вверх
a MOD bОстаток от деления
EQ NE GT GE LT LEСравнения: равно, не равно, больше, больше или равно, меньше, меньше или равно
AND OR XORЛогические операции в условиях: IF [[#1 GT 0] AND [#2 LT 5]] …

Условия и переходы

  • IF [#1 GT 10] GOTO 100 — если условие верно, перейти к кадру N100.
  • IF [#1 LT 0] THEN #1 = 0 — если условие верно, выполнить одно присваивание.
  • GOTO 50 — безусловный переход к N50.
  • #3000 = 1 (ТЕКСТ) — остановить станок с алармом и сообщением: так макрос проверяет неверные аргументы.

Циклы WHILE

WHILE [условие] DO 1 … END 1 — кадры между ними повторяются, пока условие верно. Номера 1, 2, 3 позволяют вкладывать циклы друг в друга. Следите, чтобы переменная в условии менялась внутри цикла — иначе цикл бесконечный.

Подрезка торца проходами в цикле WHILE

%
O0101 (ТОРЕЦ ПРОХОДАМИ)
G21 G40 G99
T0101
G50 S2500
G96 S180 M03
#1 = 3 (ПРИПУСК НА ТОРЕЦ)
#2 = 0.5 (СЪЁМ ЗА ПРОХОД)
G00 X54 Z5 M08
WHILE [#1 GT 0] DO 1
#1 = #1 - #2
IF [#1 LT 0] THEN #1 = 0
G00 Z[#1 + 1]
G01 Z#1 F0.3
X-1.6 F0.2
G00 Z[#1 + 2]
X54
END 1
G28 U0 W0 M09
M05
M30
%

Отверстия по окружности: координаты считает стойка

%
O0102 (ОТВЕРСТИЯ ПО ОКРУЖНОСТИ)
G21 G17 G40 G49 G80 G90
#20 = 50 (ЦЕНТР X)
#21 = 35 (ЦЕНТР Y)
#22 = 25 (РАДИУС)
#23 = 8 (ЧИСЛО ОТВЕРСТИЙ)
#24 = 0 (УГОЛ ПЕРВОГО)
T5 M6
G54 G0 X[#20 + #22] Y#21
G43 H5 Z50
S1200 M3
Z10 M8
#1 = 0
WHILE [#1 LT #23] DO 1
#2 = #24 + #1 * 360 / #23
G99 G81 X[#20 + #22 * COS[#2]] Y[#21 + #22 * SIN[#2]] Z-10 R2 F150
#1 = #1 + 1
END 1
G80
G0 Z50 M9
G91 G28 Z0
G90 M5
M30
%

Вызов макроса G65

G65 P9010 X28 Y35 R15 вызывает программу O9010 и передаёт аргументы в её локальные переменные. После M99 выполнение возвращается в основную программу, а локальные переменные основной программы не меняются.

АдресПеременнаяАдресПеременнаяАдресПеременная
A#1I#4S#19
B#2J#5T#20
C#3K#6U#21
D#7M#13V#22
E#8Q#17W#23
F#9R#18X#24
H#11Y / Z#25 / #26

Макрос G65: круглый карман с аргументами

%
O0103 (ДВА КАРМАНА ОДНИМ МАКРОСОМ)
G21 G17 G40 G49 G80 G90
T1 M6
G54 G0 X28 Y35
G43 H1 Z50
S3200 M3
Z2 M8
G65 P9010 X28 Y35 R15 Z-4 Q5 F400
G65 P9010 X72 Y35 R12 Z-6 Q5 F400
G0 Z50 M9
G91 G28 Z0
G90 M5
M30

O9010 (КРУГЛЫЙ КАРМАН: X Y ЦЕНТР, R РАДИУС, Z ГЛУБИНА, Q ШАГ, F ПОДАЧА)
IF [#26 GE 0] THEN #3000 = 1 (ГЛУБИНА Z ДОЛЖНА БЫТЬ ОТРИЦАТЕЛЬНОЙ)
#33 = 5 (РАДИУС ФРЕЗЫ)
G0 X#24 Y#25
Z2
#31 = 0
WHILE [#31 GT #26] DO 1
#31 = #31 - 2.5
IF [#31 LT #26] THEN #31 = #26
G01 Z#31 F100
#30 = #17
WHILE [#30 LT [#18 - #33]] DO 2
G01 X[#24 + #30] F#9
G03 I-#30
#30 = #30 + #17
END 2
G01 X[#24 + #18 - #33]
G03 I-[#18 - #33]
G01 X#24
END 1
G0 Z2
M99

Чем M98 отличается от G65

M98 вызывает подпрограмму без аргументов: она работает с теми же локальными переменными. G65 создаёт новый набор локальных переменных и заполняет его аргументами — макрос можно вызывать с разными размерами, не боясь испортить переменные основной программы. Подробнее о подпрограммах — в статье M98 и M99.

Что поддерживает симулятор

Переменные #1–#33, #100–#199, #500–#999, все функции и операции из таблицы, IF/GOTO/THEN, WHILE/DO/END до трёх уровней, G65 и M98 с повторами L, аларм #3000. Системные переменные положения и коррекций (#5001, #2001 и т. п.) и модальный вызов G66 не поддерживаются: макрос, который читает положение станка, нужно проверять на стойке. Тренироваться можно в задачнике — там есть задачи на макросы.

Параметрические программы Siemens (R-параметры) и общие принципы — в статье о параметрическом программировании.