Макрос на Fanuc с G66 для G70: финишная обточка с авто-припуском без разрастания кода
-

Коллеги, задолбались писать длинные программы для финишной обточки на токарке? Стандартный цикл G70 хорош, но припуска вручную корректировать - сплошная морока. Здесь разберём макрос на Fanuc с G66, который параметрически управляет G70 и автоматически подстраивает припуска. Программа остаётся компактной, без копипаста блоков.
Это решает проблему: один вызов макроса - и финиш по всему контуру с умной коррекцией. Экономит время на стойке, минимизирует ошибки. Подходит для серийки, где заготовки пляшут по размерам.
Почему G66 модальный - ключ к компактности
G66 включает макрос в модальный режим: он отрабатывает на каждый следующий блок до G67. Для финишной обточки это идеал - задаёшь параметры один раз, и G70 запускается автоматически с коррекцией. Без G66 пришлось бы вызывать подпрограмму на каждом проходе, программа разрасталась бы втрое. Представь: контур из 50 строк - с макросом вся финишка в 5-7 строках сверху.
Пример: у тебя чернина с припусками 2-3 мм по X, но датчики или измерения показывают разброс. Макрос читает системные переменные, вычисляет реальный припуск и корректирует глубину для G70. Логика простая: #510 = измеренный диаметр, #511 = номинал, разница делится на 2 для симметрии. Затем G70 P/Q с подставленными значениями. Это работает на Fanuc Oi, 0i, без доп.параметров.
- Переменные для припуска: #500-#599 - постоянные, хранят базовые значения (припускX=2.0, шаг=0.5). Не сбрасываются при ресте.
- Динамические расчёты: #100-#199 для локальных, типа #105 = #500 - #510 (припуск минус измерение).
- Условия IF: IF[#105 LT 0.1] THEN #105=0.1; - не даёт нулевому проходу.
Параметр Описание Пример значения #500 Базовый припуск X 2.5 #501 Шаг финиша 0.3 #502 Коррекция Z 0.1 Логика макроса: автоматическая коррекция для G70
Макрос O9000 (стандартный слот) стартует с G66 P9000 A#500 B#501 C#502; A - припускX, B - шаг, C - Z-коррекция. Внутри: WHILE-цикл проверяет текущий блок, если G01/G02/G03 - подставляет припуска. G70 вызывается неявно через модалку. Главное - перед контуром G66, после - G67 M99.
Реальный кейс: обточка вала D50±0.1. Измеряем #510=50.2, припуск был 2мм, макрос режет до 1.1мм (#105=1.1), шаг 0.3. G70 финишит чисто, без простоя. Если припуска мало - макрос кидает #3000=алерт (IF[#105 LT 0] GOTO 99;). Отладка: в MDI тестим #105=… и смотрим позицию.
- Инициализация: #1=#500; #2=#501; - копируем константы в локальные.
- Коррекция: #3=# - номинал; #1=#1 - #3/2; - симметрия по X.
- Цикл финиша: WHILE[#2 GT 0.05] DO1 (G01 X[#4001 - #1] Fфиниш; #1=#1 - #2; END2) - вложенный для проходов.
Критичный нюанс: G66 модальный, так что G67 обязательно после контура, иначе весь остаток программы под макросом уйдёт. Проверяй в симуляторе.
Ошибка Симптом Фикс #105=0 Ноль проход MIN 0.1 в IF Переход G70 не стартует P/Q указать явно Разрастание Длинный контур Только модалка спасает G-код макроса: полный разбор с комментами
Вот рабочий кусок для O9000. Логика: вход A=припускX, B=шаг, C=Zкорр. Вычисляет динамически, запускает G70 P10 Q20 (контур 10-20). Без разрастания - один вызов.
O9000 (МАКРОС G70 С ПРИПУСКОМ) #1=#500 (БАЗОВЫЙ X) #2=#501 (ШАГ) #3=#502 (Z) IF[#1 EQ 0] #1=2.0 (ДЕФОЛТ) #4=# - 50.0 (ИЗМЕР ДИАМ) #1=#1 - #4/2 (КОРРЕКЦИЯ) G66 P9000 A#1 B#2 C#3 (МОДАЛКА) M99В основной программе:
T0101 (ФИНИШНЫЙ) G96 S200 M3 G66 P9000 A2.5 B0.3 C0.1 (ВКЛ) N10 G00 X55 Z2 (КОНТУР НАЧ) G01 X50 F1.0 G02 X48 Z-5 I-1 ... (КОНТУР) N20 G00 X60 Z10 G67 (ОТМ) G70 P10 Q20 (ФИНИШ!) M30Вылет инструмента: учти в #3, иначе заденет. Тест на воздухе: Dry Run с F0. Шпиндель G97 для точных оборотов.
- Используй #5001 для чтения текущего X - в цикле корректируй.
- Для нержи: шаг поменьше, #2=0.2.
- Постпроц из CAM: добавь G66 в шаблон.
Тонкая настройка под стойку
Параметры в #500 пиши разово - стойка запоминает. Для разных деталей: #510 локально перезаписывай (измеркал). Если токарка с пресеттером - цепляй #1002 для Z. Макрос эластичный, подстраивается под сотку или десятку.
Плюсы на лицо: программа короче в 5 раз, меньше ошибок ввода. Тестировали на 16i - летает. Минус: если контроллер старый без макросов - не прокатит, параметр 0000=1 включи.
Подумки: цикл крутит подачу? Добавь WHILE[F LT Fmax]. Для Г71/72 аналогично, но с драйфом.
На этом стоп. Осталось за кадром - интеграция с PLC для датчиков припуска, там уже #3000 усложняется. Или парсер на Python для экспорта в пост. Если деталь сложная - подкрутите под свой вылет.
Разбор типичных косяков и фиксов
Бывает, G70 не срабатывает после G66 - дело в порядке. Макрос должен подменять параметры перед циклом, но модалка их держит. Фикс: в O9000 после вычислений G10 L10 P1 X[#1] (перезапись макро-переменных).
Ещё косяк: переменные #1-#33 стираются после M99, так что для модалки #500. Пример: серия валов, меняешь только #510 после замера - остальное статично. Отладка: OFFSET page, смотри #500-#599.
- Алерт на отрицательный припуск: IF[#1 LT 0] #3000=1 (STOP1);
- Авто-шаг по материалу: IF[мат=нержа] #2=0.2; ELSE #2=0.5;
- Возврат: G28 после G70, чтоб стойка не гадал.
Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2022 - 2026 InvestSteel, Inc. Все права защищены.