Макрос G66 с G76: параметрическая резьба на Fanuc без SCADA
-

Задолбался я видеть, как ребята вручную пересчитывают параметры G76 для каждой резьбы. Хочу показать, как написать макрос на G66, который будет автоматом подгонять нагрузку под материал и диаметр. Никаких SCADA — чистая Fanuc с логикой прямо в коде. Полезно для тех, кто нарезает на одной токарке разные резьбы и устал от ручной доводки параметров.
Вся фишка в том, что G76 — это мощный цикл, но он требует точной настройки. Если неправильно выставить первый проход и глубину съёма, резьба либо дробить будет, либо ломать резец. Макрос G66 позволит передавать в G76 параметры как функция — указал диаметр, материал, и дальше всё считается автоматически.
Как устроена резьбовая логика G76
G76 — это стандартный цикл нарезания резьбы на токарных станках Fanuc. Работает в две строки: первая задаёт общие параметры, вторая — координаты и шаг. Главный аргумент — это P, шестизначный код, где каждая пара цифр отвечает за что-то своё. Первая пара — количество чистовых проходов, вторая — минимальная глубина (в тысячных миллиметра), третья — первый проход (тоже в тысячных).
Примерно вот так: P020125 означает 02 чистовых прохода, 0.125 мм минимальной глубины и первый проход в 0.125 мм. Вторая строка содержит Q — глубина съёма на рабочих проходах (в микрометрах), и R — припуск на чистовые проходы (в миллиметрах). Параметр F — это шаг резьбы, для M16x2 будет F2.
Нюанс: если неправильно выставить первый проход, материал хлипкий или резец чугунный — будут вибрации и грозит поломка инструмента. Вот где начинается магия макросов.
- Первая строка G76 определяет параметры цикла (P, Q, R);
- Вторая строка задаёт координаты X и Z, а также шаг F;
- G66 позволяет вызывать подпрограмму в модальном режиме с передачей параметров;
- Системные переменные (от #500 и выше) хранят значения, которые остаются в памяти между циклами.
G66 как инструмент параметрического вызова
G66 выполняет подпрограмму в модальном режиме — то есть она будет вызываться автоматически при каждом движении до её отмены (G67). Это отличается от G65, которая вызывает подпрограмму один раз. Для резьбы это особенно удобно, потому что можно один раз задать логику расчёта параметров, а потом просто вызывать её с разными входными данными.
Здесь главное понимать, как передаются параметры. В G66 используются буквенные адреса A, B, C, D, E, F и так далее (буква G уже занята самой командой). Например:
G66 P9000 A16 B2 C0.3 D1.5;
Это означает: вызови подпрограмму 9000, передай ей A=16, B=2, C=0.3, D=1.5. Внутри подпрограммы эти параметры доступны через переменные #1, #2, #3, #4 соответственно. Вот здесь и начинаем считать всё остальное.
- G66 вызывает подпрограмму и остаётся активной до G67;
- Параметры передаются через буквы (A, B, C…) и становятся переменными #1, #2, #3…;
- Внутри подпрограммы можно использовать арифметику и условия (IF, WHILE);
- G67 отменяет модальный режим.
Скелет макроса для автоматического расчёта параметров G76
Давайте напишем простой макрос, который будет рассчитывать параметры G76 на основе диаметра резьбы и материала. Входные данные: диаметр (A), шаг (B), материал (C — условно 1 для стали, 2 для алюминия), требуемый припуск на чистовую (D).
Вот базовая логика:
Подпрограмма O9000 (расчёт параметров G76):
O9000 (Входные: A=диаметр, B=шаг, C=материал, D=припуск на чист.) #100 = #1; (диаметр в #100) #101 = #2; (шаг в #101) #102 = #3; (материал: 1=сталь, 2=алюминий) #103 = #4; (припуск на чистовую) (Рассчитываем первый проход в зависимости от материала) IF [#102 EQ 1] THEN #110 = 0.55; (Сталь: первый проход 0.55 мм) ELSE #110 = 0.35; (Алюминий: первый проход 0.35 мм, мягче) END IF (Глубина съёма на рабочих проходах: 0.10 мм = 100 микрометров) #111 = 100; (Количество чистовых проходов) #112 = 1; (Минимальная глубина, чуть меньше припуска) #113 = [#103 * 0.5]; (Формируем P: P rrr sss ttt) (rrr = чистовые в сотых, sss = мин. припуск в тысячных, ttt = первый в тысячных) #120 = [#112 * 10000]; (чистовые с сдвигом на 4 разряда) #121 = [#113 * 1000]; (мин. припуск в тысячных #122 = [#110 * 1000]; (первый проход в тысячных) #130 = #120 + #121 + #122; (Итоговый P-параметр) M99; (Возврат из подпрограммы) O9000 ENDЗдесь мы использовали переменные #100-#130 для хранения промежуточных расчётов. Переменные с номерами от #500 и выше остаются в памяти даже после выключения станка, а #100-#400 — это рабочие переменные, которые используются в пределах одной программы.
В строке
IF [#102 EQ 1]мы проверяем, какой материал, и в зависимости от этого выставляем первый проход. Для стали риск поломки ниже, можно агрессивнее. Для алюминия — мягче, чтобы не было вибраций и вырыва. ОперацияTHEN...END IF— это логический оператор, который есть в Fanuc Macro B.- Переменные #1-#33 содержат переданные через G66 параметры (A=>#1, B=>#2…);
- Переменные #100-#149 — локальные, используются для промежуточных расчётов;
- Арифметика в квадратных скобках:
#120 = [#112 * 10000]; - Условный оператор:
IF [условие] THEN...END IF; - M99 — завершение подпрограммы и возврат в основную программу.
Главная программа с вызовом через G66
Теперь напишем основную программу, которая вызывает наш макрос и потом выполняет G76 с рассчитанными параметрами.
O0001 (Программа резьбонарезания M16x2 на стали) G21 G90 G95; (Метрическая система, абсолютные координаты, подача мм/об) T6; (Резец в позицию 6) M3 S800; (Вращение по часовой, 800 оборотов) G4 P0.5; (Пауза 0.5 сек) (Быстро подходим к стартовой точке) G0 X20.0 Z10.0; (Вызываем макрос расчёта параметров: диаметр 16, шаг 2, материал 1 (сталь), припуск 0.15) G66 P9000 A16 B2 C1 D0.15; (Нарезаем резьбу M16x2) G76 P#130 Q100 R0.15 X14.701 Z-25.0 F2; (Отменяем модальный G66) G67; (Отводим инструмент) G0 X25.0; G0 Z15.0; (Выключаем и возвращаемся) M5; (Выключить шпиндель) M30; (Конец программы) %Вот так вот просто: вызвали G66 с параметрами (A=диаметр, B=шаг, C=материал, D=припуск), макрос рассчитал P, потом используем это P в G76. Параметр
#130— это переменная, в которую макрос положил рассчитанный P. G76 воспринимает переменные ровно так же, как константы.Очень важный момент: X14.701 — это диаметр резьбы минус дважды высота профиля. Для M16x2 это примерно 16 - 2 * 0.6495 = 14.701. Если зарегулировать эту координату неправильно, резьба либо будет неполнопрофильной, либо резец уйдёт в мягкую часть заготовки.
- G66 P9000 передаёт параметры в подпрограмму 9000;
- Макрос рассчитывает P в переменную #130;
- G76 P#130 использует переменную как параметр цикла;
- G67 отменяет модальный режим;
- X и Z указываются в абсолютных координатах, рассчитанные заранее.
Контроль нагрузки без датчиков
Если на станке нет датчиков нагрузки и SCADA, контролировать можно несколькими способами. Первый — это подбор параметров через опыт (что мы и делаем в макросе). Второй — использовать системные переменные состояния, которые позволяют получить информацию о текущем состоянии осей.
В Fanuc переменные вида #1001, #1002 и выше содержат данные датчиков и состояние системы. Например, #1001 может содержать текущую позицию оси X. Можно проверить, если ось X движется с рывками или медленнее, чем надо, значит нагрузка высокая и нужно снизить глубину съёма.
Вот простой пример с контролем по времени выполнения (косвенный метод):
O9001 (Подпрограмма с контролем нагрузки) #200 = 0; (Счётчик попыток) #201 = 0.55; (Начальный первый проход) LBL100; (Метка для цикла) #200 = #200 + 1; (Если попыток больше 3, снижаем нагрузку) IF [#200 GT 3] THEN #201 = [#201 * 0.8]; (Снижаем на 20%) END IF (Проверяем, не слишком ли маленький проход) IF [#201 LT 0.1] THEN #201 = 0.1; (Минимум 0.1 мм) END IF (Здесь была бы логика выполнения G76 и проверка результата) GOTO LBL100; (Переходим на следующую итерацию, если нужно) M99; O9001 ENDЭто упрощённый вариант. На реальном станке нужно проверять ток шпинделя (если есть амперметр) или просто положиться на подобранные параметры.
Большинство наладчиков советуют прибить параметры G76 один раз на каждый материал и диаметр, а потом просто менять только координаты X и Z. Вот это мы и делаем через макрос — один раз настроили логику, дальше меняем только входные данные (диаметр, материал).
- Переменные состояния (#1001 и выше) дают информацию о положении осей;
- Контроль нагрузки через условия: если проход заходит слишком глубоко, снижаем глубину;
- Циклы WHILE или GOTO используются для повторного выполнения проходов, если первый был неудачным;
- М-коды (M3, M5) управляют шпинделем и подачей CОЖ.
Чек-лист перед запуском
Прежде чем запускать макрос на боевой заготовке, убедись в следующем:
- Резец в правильной позиции: убедись, что резец для нарезания резьбы зажат в нужном держателе и углы заточки соответствуют типу резьбы (метрическая, дюймовая).
- Припуск на поверхности: поверхность под резьбу должна быть ровной и без раковин, иначе резьба будет неравномерной.
- Диаметр под резьбу правильный: для M16x2 диаметр отверстия (если внутренняя резьба) или диаметр стержня должен быть в пределах ГОСТ 19257. Например, для внешней резьбы M16x2 начальный диаметр должен быть около 16 мм, а для внутренней отверстие должно быть 14.701 мм или близко к этому.
- Подача СОЖ включена: без СОЖ резьба будет рваной и резец быстро затупится.
- Обороты адекватные: для стали M16 примерно 800-1200 об/мин, для алюминия можно выше (до 2000).
- Стартовая точка безопасна: начинайте проход на 10-15 мм перед резьбой, чтобы стружка нормально выводилась.
После первого прохода остановите станок и проверьте геометрию резьбы штангенциркулем или микрометром. Если всё в норме, дальше можно гонять по этому же коду.
Осталось за кадром куча нюансов: как учитывать люфт шпинделя при многозаходной резьбе (нужно умножить шаг на количество заходов), как работать с конусной резьбой (через угол в P-параметре), как правильно считать припуск для чистовых проходов. Но базовую логику — вот она. Макрос G66 с параметрическим G76 экономит время и голову на стойке. Напишешь раз, потом просто меняешь A, B, C, D — и всё пересчитывается автоматом. Это куда лучше, чем руками каждый раз считать высоту профиля и первый проход.
Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти-
Макрос на Fanuc с G65 для параметрического G86 рассверливания с контролем нагрузки
Программирование ЧПУ | CNC
1
-
Макрос на Fanuc с G66 для G70: параметрический финиш с контролем припуска
Программирование ЧПУ | CNC
1
-
-
Макрос на Балт-Системах: параметрический G85 с контролем нагрузки без SCADA
Программирование ЧПУ | CNC
1
-
1
-
-
-
© 2022 - 2026 InvestSteel, Inc. Все права защищены.