Язык Fanuc Macro B
Язык Fanuc Macro B — это встроенный язык программирования высокого уровня, используемый в системах числового программного управления (ЧПУ) производства компании Fanuc, а также в совместимых контроллерах других производителей (например, Haas, Okuma, Mazak в режиме эмуляции). Он предназначен для создания гибких, параметрических и адаптивных управляющих программ для металлорежущих станков (токарных, фрезерных, многоцелевых). Язык основан на синтаксисе BASIC и предоставляет возможность использования переменных, арифметических и логических операций, условных переходов и циклов, что существенно расширяет возможности стандартного G-кода.
История и происхождение
Разработка Macro B началась в 1970-х годах, когда компания Fanuc, один из мировых лидеров в производстве систем ЧПУ, стремилась повысить гибкость программирования станков. До появления макросов программисты были вынуждены писать жёсткие программы с фиксированными координатами, что делало их непригодными для обработки однотипных деталей разных размеров. Первые версии Macro B появились в контроллерах серии Fanuc 6 (1979 год) и Fanuc 10/11 (1980-е годы). Язык быстро стал отраслевым стандартом благодаря своей простоте, эффективности и совместимости с большинством станков с ЧПУ. В отличие от более раннего Macro A, который был менее функциональным и использовал косвенную адресацию через G-коды, Macro B ввёл прямой синтаксис с переменными и операторами, что сделало его доступным для широкого круга технологов.
Синтаксис и основные элементы
Переменные
В Macro B используются три типа переменных, обозначаемых знаком решётки (#):
- Локальные переменные (
#1–#33): используются внутри одного макроса и передаются при его вызове. Они не сохраняются после завершения программы. - Глобальные переменные (
#100–#199,#500–#999): доступны из любой программы и сохраняются после выключения станка (для диапазона#500и выше). Используются для хранения общих настроек, коррекций инструментов или данных о деталях. - Системные переменные (
#3000–#3999,#4000–#4999): предоставляют доступ к внутренним параметрам ЧПУ, таким как текущие координаты, номер инструмента, состояние шпинделя, время работы и т.д. Например,#5021содержит текущую координату X в системе станка.
Переменные могут быть целыми или дробными числами. Инициализация выполняется присваиванием: #1 = 10.5.
Арифметические и логические операции
Язык поддерживает стандартные математические операции:
- Сложение:
#1 = #2 + #3 - Вычитание:
#1 = #2 - #3 - Умножение:
#1 = #2 * #3 - Деление:
#1 = #2 / #3 - Остаток от деления:
#1 = #2 MOD #3 - Возведение в степень:
#1 = #2 ** #3
Также доступны тригонометрические функции (SIN, COS, TAN, ATAN), логарифмы (LN, EXP), округление (ROUND, FIX, FUP), квадратный корень (SQRT) и абсолютное значение (ABS).
Логические операции включают сравнение (EQ, NE, GT, GE, LT, LE) и булевы операторы (AND, OR, XOR, NOT). Результатом сравнения является 1 (истина) или 0 (ложь).
Управляющие конструкции
- Условный переход
IF:
IF [условие] GOTO n — переход на строку с номером n, если условие истинно. IF [условие] THEN [действие] — выполнение действия при истинности условия.
- Цикл
WHILE:
WHILE [условие] DO1 ... END1 — повторение блока, пока условие истинно. Допускается до трёх вложенных уровней (DO1, DO2, DO3).
- Безусловный переход
GOTO:
GOTO n — переход на строку с номером n.
Комментарии и метки
Комментарии заключаются в круглые скобки (...) или начинаются с точки с запятой ;. Метки строк обозначаются буквой O и номером (например, O100). Внутри макроса метки задаются числом после GOTO или IF.
Применение
Параметрическое программирование
Основное назначение Macro B — создание программ, которые могут обрабатывать детали с изменяемыми размерами без переписывания кода. Например, для фрезерования прямоугольного кармана программист задаёт переменные для длины, ширины, глубины и радиуса инструмента. При смене детали достаточно изменить значения переменных, а не всю программу.
Циклы и повторяющиеся операции
Язык позволяет реализовывать сложные траектории, такие как спиральная интерполяция, обработка массивов отверстий, гравировка текста или создание резьбовых поверхностей. Циклы WHILE и IF дают возможность обрабатывать произвольное количество элементов без увеличения объёма кода.
Адаптивное управление
С помощью системных переменных макрос может считывать текущее состояние станка (например, нагрузку на шпиндель, температуру, износ инструмента) и корректировать режимы резания в реальном времени. Это повышает стойкость инструмента и качество обработки.
Создание пользовательских циклов
Macro B позволяет объединять стандартные G-коды в собственные макросы, которые вызываются командами G65 или G66. Например, можно создать макрос G65 P1000 A10 B20 для сверления отверстий с автоматическим пересчётом координат.
Пример программы
Ниже приведён простой пример макроса для фрезерования квадратного контура с переменными размерами:
``` O1000 (Макрос квадрата)
1 = 100.0 (Длина)
2 = 80.0 (Ширина)
3 = 5.0 (Глубина)
4 = 10.0 (Радиус инструмента)
G90 G00 X0 Y0 Z5.0 G01 Z-#3 F100 G01 X#1 F200 G01 Y#2 G01 X0 G01 Y0 G00 Z5.0 M99 ```
Вызов макроса: G65 P1000 A100 B80 C5 D10, где A, B, C, D — локальные переменные #1, #2, #3, #4.
Преимущества и недостатки
Преимущества
- Гибкость: одна программа может обслуживать семейство деталей.
- Экономия времени: сокращение объёма кода и времени на отладку.
- Автоматизация: возможность реализации сложных алгоритмов без внешних систем.
- Совместимость: поддерживается большинством современных контроллеров ЧПУ.
Недостатки
- Ограниченная производительность: интерпретируемый язык медленнее, чем G-код, особенно при большом количестве вычислений.
- Сложность отладки: отсутствие встроенного отладчика и ограниченные средства диагностики.
- Ограниченный набор типов данных: отсутствуют строки, массивы (кроме косвенной адресации) и структуры.
- Риск ошибок: неправильное использование переменных может привести к аварии станка.
Сравнение с аналогами
Помимо Macro B, существуют другие языки параметрического программирования для ЧПУ:
- Heidenhain TNC (язык HEIDENHAIN) — более высокоуровневый, с поддержкой массивов и строк, но менее распространён в России.
- Siemens Sinumerik (язык SINUMERIK) — использует синтаксис, близкий к Pascal, и поддерживает вложенные вызовы макросов.
- Haas Macro — практически идентичен Fanuc Macro B, но имеет некоторые расширения (например, поддержка условных операторов
ELSE).
Macro B остаётся самым популярным благодаря своей простоте и широкой аппаратной поддержке.
Интересные факты
- Макросы Macro B могут быть вызваны не только из основной программы, но и из других макросов, что позволяет создавать иерархические структуры.
- Системная переменная
#3000используется для генерации аварийных сообщений на экране ЧПУ (например,#3000 = 100 (Ошибка: инструмент не найден)). - В некоторых контроллерах Fanuc поддерживается до 999 глобальных переменных, что позволяет хранить большие объёмы данных, например, таблицы коррекций.
- Язык Macro B лёг в основу многих современных CAM-систем, которые генерируют макросы для автоматической обработки.
Источники
- Руководство пользователя Fanuc Series 0i/16i/18i — Macro Compiler/Macro Executor.
- Смирнов В.А. «Программирование станков с ЧПУ. Язык Macro B», 2015.
- Документация Haas Automation — Macro Programming Manual.
- Стандарт ISO 6983 (G-код) и расширения для макросов.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →