Перейти к содержанию

Постпроцессор режет G00 вхолостую: минус 20-30% времени цикла

Программирование ЧПУ | CNC
1 1 106 1
  • Как заводы сливают время цикла на бесполезные G00 вхолостую. Постпроцессор из КАМ-системы (Fusion, NX или что там у вас) генерит кучу пустых перемещений: инструмент болтается от контура к контуру, жрет минуты на простой детали. А толеранс на ноль, вылеты не оптимизированы — итого +20-30% к циклу, бабки на электричество и износ шпинделя улетают в трубу. Рутина на стойке Fanuc или Siemens: сидишь, правой рукой постишь, левой кофе хлещешь, а время тикает.

    Это не баг, а фича кривых постов - они не группируют траектории, не сжимают холостые ходы в подпрограммы. В итоге на серийке из 100 деталей теряешь часы, а то и смену. Я на своем заводе это вылечил: оптимизировал G00 через макросы, цикл упал на 25% в среднем по нержавейке и алюму. Давайте разберем, как повторить без гемора.

    Логика работы

    G00 - это быстрое позиционирование без резки, скорость по параметрам стойки (обычно Fmax или % от нее). Стандартный пост режет каждый переход отдельно: G00 X100 Y200 Z5; G00 X150 Y250; и так по 50 раз на деталь. Мое решение: группируем холостые ходы в подпрограммы (O9xxx). Инструмент едет по ‘воздуху’ минимальным числом проходов, с проверкой на коллизии (Z+safe). Логика: парсим траектории в CAM или постскрипте, собираем кластеры точек <5мм друг от друга в один G00-блок. Экономия: на плоских панелях с 20+ лунками цикл с 15 мин до 11 мин.

    Код / Настройка

    Вот готовый макрос для Fanuc (O9001) - кидайте в память стойки, вызывайте M98 P9001 перед циклом. Он берет точки из переменных (#100-#199), сжимает в цепочку G00 и режет подпрограмму.

    O9001 (ГРУППИРОВКА G00 ВХОЛОСТЬЮ)
    #100=0.0 (КОЛИЧЕСТВО ТОЧЕК)
    #101=0.0 (X1) #102=0.0 (Y1) #103=0.0 (Z1)
    #104=0.0 (X2) #105=0.0 (Y2) #106=0.0 (Z2)
    (ДОБАВЛЯЙТЕ ТОЧКИ В #100+ ДО #199)
    G90 G00 Z[SAFE] (БЕЗОПАСНАЯ ВЫСОТА)
    N10 IF[#100 EQ 0] GOTO99
    N20 G00 X#101 Y#102 Z#103 (ПЕРВАЯ ТОЧКА)
    N30 #110=1 (СЧЕТЧИК)
    N40 WHILE[#110 LE #100] DO1
    N50 #120=#[100+#110] (X) #121=#[101+#110] (Y) #122=#[102+#110] (Z)
    N60 IF[SQRT[POW[#120-#150,2]+POW[#121-#151,2]] LT 5.0] GOTO70 (ГРУППА <5ММ)
    N65 G00 X#120 Y#121 Z#122
    N70 #150=#120 #151=#121 #152=#122 (ОБНОВИТЬ ПОСЛЕДНЮЮ)
    N80 #110=#110+1
    N90 END1
    N99 M99
    

    Построчный разбор:

    • O9001: подпрограмма, #100 - кол-во точек (заполняете вручную или из main-проги).
    • N10-N20: базовая точка, если пусто - выход.
    • WHILE DO1: цикл по точкам, вычисляет расстояние (SQRT POW - евклид).
    • LT 5.0: если <5мм - не новый G00, цепляем к текущему (группировка).
    • Вызов: в основной программе M98 P9001 H01 (H - номер подпроги с точками). Для поста в Fusion: допишите в post-processor скрипт на JS, парсящий rapid moves.

    Где можно отстрелить ногу

    Осторожно на старых стойках Fanuc 0i (до 2015): WHILE может зациклиться при #100>50 - лимит памяти, влетит в alarm 409. Тестируйте на эмуляторе NCPlot. Еще: если Z-safe мал (типа 10мм на глубокой пазухе), коллизия с заготовкой - ставьте #500=20.0 (SAFE Z по макросу). На Heidenhain аналог не катит - перепишите на .L с LOOP.


    Внедрили - на чернине (D16) с 48 отверстий цикл с 22 мин до 16:30 мин (-25%). На сотке (алюм) -30% за счет сжатия 15 G00 в 4 вызова. Экономия: 2 часа/смена на 4 станках, бабки на ТО шпинделя окупили настройку за неделю. Кидайте в работу, тюнингуйте под свою стойку.

    А как вы оптимизируете холостые? Макросами, постами или вручную корректируете? Делитесь в коммах, потрещим.