Макропрограммы 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 | #1 | I | #4 | S | #19 |
| B | #2 | J | #5 | T | #20 |
| C | #3 | K | #6 | U | #21 |
| D | #7 | M | #13 | V | #22 |
| E | #8 | Q | #17 | W | #23 |
| F | #9 | R | #18 | X | #24 |
| H | #11 | Y / 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-параметры) и общие принципы — в статье о параметрическом программировании.