Top.Mail.Ru
Перейти к содержанию

Парсинг DNC-файлов Fanuc через Python для подсчета нормо-часов и оптимизации плана

ПO для чпу
1 1 137 1
  • Обложка: Как парсить DNC-файлы Fanuc через Python-скрипт для автоматического подсчета нормо-часов и оптимизации сменного плана без остановки станка

    DNC-файлы с Fanuc - это G-код, который летит на стойку по RS-232 или Ethernet. Парсить их на Python нужно, чтоб вытащить реальное время резания, нагрузку шпинделя и износ инструмента. Без этого нормо-часы считаешь вручную, а план смены хромает - станок простаивает.

    Скрипт решает проблему: тянет данные nonstop, считает норму по #3004 нагрузке и #3901 времени, строит CSV для экселя. Станок не трогаешь, все онлайн. Получаешь точный прогноз - сколько деталей уйдет за смену, без сюрпризов с поломкой фрезы.

    Почему DNC-файлы Fanuc парсят именно так

    DNC - это прямой numerical control, когда программа стримится на контроллер без остановки. На Fanuc это NC-файлы с макросами #100-#999, где сидят ключевые параметры: подача, обороты шпинделя, вылет инструмента. Парсером выдираешь их, чтоб посчитать нормо-часы - реальное время на деталь минус холостой ход.

    Пример: программа на 0i-MF с циклом болтания #100=контур, #101=глубина. Без парсера ты открываешь файл в нотиспаде, считаешь строки вручную - час уходит. С Python скриптом за секунды имеешь таблицу: деталь - 0.45 нормо-часа, инструмент T10 - износ 12%. Оптимизируешь план: ставишь легкие детали на утро, тяжелые - на ночь.

    • Подготовка данных: Открываешь DNC-файл, ищешь блоки O9001 для инструментов, парсишь M03/M05 для шпинделя.
    • Нюанс с кодировкой: Fanuc шлет в ANSI, Python читает utf-8 - добавь encoding=‘cp1251’.
    • Автоматический подсчет: Регулярки находят (G1 X.+ Y.+ F.+), суммируют расстояние / подачу = время.
    Параметр Описание Пример из DNC
    #3004 Нагрузка шпинделя 45.2%
    #3901 Время инструмента 2.15ч
    S1200 Обороты 1200 об/мин
    F200 Подача 200 мм/мин

    Подключение к стойке Fanuc без остановки

    FOCAS API - официалка от Fanuc для чтения памяти контроллера по Ethernet. Порт 8193 TCP, никаких остановок программы. Библиотека pyfocas дергает cnc_rdmacro - тянет #3004 нагрузку каждые 5 сек, логирует в pandas DataFrame.

    Реальный кейс: стойка 31i на сотке нержаки, цикл резки 20 мин. Скрипт мониторит онлайн, если нагрузка >80% - алерт в телеграм. Нормо-часы считаешь как sum(время_инструмента) / количество_деталей. План смены: 45 деталей вместо 32, без брака от перегрева.

    1. pip install pyfocas pandas - ставишь паки.
    2. Подключаешься: focas = Focas('192.168.1.100', 8193) - IP твоей стойки.
    3. Читаешь: load = focas.cnc_rdmacro(3004) - нагрузка.
    4. Чекни параметр 3010=3 - для сетевого доступа, иначе таймаут.
    5. Логируешь в CSV: df.to_csv('normo.csv').
    from pyfocas import Focas
    import pandas as pd
    import time
    
    focas = Focas('192.168.1.100', 8193)
    data = []
    while True:
        load = focas.cnc_rdmacro(3004)  # нагрузка
        time_work = focas.cnc_rdmacro(3901)  # время
        data.append({'load': load, 'time': time_work, 'timestamp': time.time()})
        df = pd.DataFrame(data)
        df.to_csv('normo.csv', index=False)
        time.sleep(5)
    

    Логика простая: бесконечный цикл, аппенд в список, дамп в файл. Работает на любой Fanuc с FOCAS.

    Парсинг DNC-файла и расчет нормо-часов

    Берешь DNC-файл .NC, открываешь через open(file, ‘r’). Регулярки ищут G1/G2 для резания, M06 для смены инструмента. Суммируешь длину пути / подачу = время резания. Нормо-час = (резание + 10% на воздух) / эффективность.

    Пример файла: O1234 (деталь), T10 M06; G01 X50 Y50 F150 - 70мм пути за 28 сек. За программу 10 деталей - 8.5 нормо-часов. Скрипт парсит все O-номера, группирует по инструментам, строит график износа. Оптимизация плана: меняешь последовательность, чтоб инструмент не жарился.

    • Регулярка для подачи: re.findall(r'F(\d+)', line) - вытаскивает все F.
    • Коррекция на ускорение: G00 не считаем, только G01/G02/G03.
    • Интеграция с постом: Вывод в формат для КАМ-системы, типа Mastercam.
    Деталь Инструмент Время резания Нормо-час
    O1234 T10 фреза 0.45ч 0.52ч
    O5678 T20 сверло 0.32ч 0.37ч
    Итого - 4.2ч 4.8ч

    Оптимизация сменного плана на основе данных

    Собранные данные из DNC и FOCAS кидаешь в pandas, строишь прогноз. Если износ T10 >15%, ставишь его на конец смены. План: утро - чернина на высокой подаче, вечер - нержа с контролем нагрузки.

    Кейс: цех с тремя стойками, скрипт агрегирует CSV, ранжирует детали по норме. Вместо хаоса - excel с графиком: 95% загрузка без остановок. Ключ: цикл скрипта на raspberry pi рядом со стойкой - дешево и надежно.

    • Автоматическая сортировка: df.sort_values('normo').
    • Алерт на износ: if load > 80: send_mail().
    • Интеграция в 1C: экспорт в XML для плана.

    Скрипт в деле - типичные косяки и фиксы

    Тут код целиком: парсит DNC + FOCAS, считает норму, выводит план. Запускаешь на ноуте у стойки, стойка работает. Осталось доработать под твои макросы #5000 - там свои переменные, под них регулярки подкрути. Или интегрируй с DNC-сервером для стримминга файлов.

  • ИИ-генерация G-кода для ЧПУ: оптимизация без ручной доработки

    ПO для чпу ии чпу g-код оптимизация
    3
    0 Голоса
    3 Сообщения
    756 Просмотры
    kirilljsxK
    @павел-0 said: Нужно из детали 60x60x30 сделать деталь 50x50X20 какая программа фреза 20 скорость 6400 Добрый день! давайте разбираться шаг за шагом Важно! Сначала перед использованием применяйте тестовый режим! Сначала задаем режимы, включаем шпиндель и подводим фрезу к началу координат. G90 G17 G54 ; Абсолютная система координат, выбор плоскости XY, выбор системы координат[reference:6] M03 S6400 ; Включить шпиндель на 6400 об/мин G00 Z5.0 ; Быстро поднять фрезу на 5 мм над деталью G00 X-10.0 Y-10.0 ; Быстро переместить фрезу в точку старта (за пределами заготовки) Далее подрезаем верх- снимаем 10 мм по Z #1 = 0.0 ; Начальная глубина (Z=0 — это верх заготовки) #2 = -10.0 ; Конечная глубина (врезаемся в деталь на 10 мм) #3 = -1.0 ; Шаг по глубине за один проход (1 мм) WHILE [#1 GT #2] DO1 ; Цикл, который выполняется, пока мы не достигнем конечной глубины #1 = #1 + #3 ; Увеличиваем глубину на шаг IF [#1 LT #2] THEN #1 = #2 ; Если шаг слишком большой, фиксируем финальную глубину G01 Z#1 F200 ; Врезаемся на новую глубину с рабочей подачей G01 X70.0 F500 ; Фрезеруем по оси X до 70 мм (за край заготовки) G00 Y10.0 ; Быстро поднимаем фрезу и переходим на следующую "дорожку" G01 X-10.0 F500 ; Фрезеруем в обратную сторону G00 Y20.0 ; Переходим на следующую дорожку END1 ; Конец цикла G00 Z5.0 ; Быстрый отвод фрезы вверх в конце цикла Пояснение: Фреза будет двигаться змейкой, снимая слой за слоем. Этот код отлично подходит для начала. Теперь углубляем центральную часть до 20 мм. Фактически, мы повторяем тот же принцип «змейки», но в ограниченной области. #1 = 0.0 ; Текущая глубина (от верха) #2 = -10.0 ; Глубина кармана (10 мм от верха) #3 = -1.0 ; Шаг по глубине (1 мм) WHILE [#1 GT #2] DO2 ; Запускаем цикл по глубине #1 = #1 + #3 IF [#1 LT #2] THEN #1 = #2 G01 Z#1 F200 ; Врезаемся на новую глубину G01 X0.0 F500 ; Начинаем фрезеровать от X=0 до X=50 G01 Y5.0 ; Смещаемся для следующего прохода (5 мм — это ~1/4 диаметра фрезы[reference:8]) G01 X50.0 G01 Y10.0 G01 X0.0 ; ... и так далее, пока не обработаем всю площадь 50x50 мм ... END2 G00 Z5.0 Пояснение: Этот цикл будет последовательно обрабатывать всю область кармана (50x50 мм) на заданную глубину. M05 ; Остановить шпиндель M30 ; Конец программы И еще раз повторюсь! Важное примечание по безопасности: Всегда проверяйте новые программы в режиме сухого прогона (без заготовки) и убедитесь, что ваша станочная система (Fanuc, HAAS, Mach3 и т.д.) использует те же самые коды и синтаксис!
  • 0 Голоса
    1 Сообщения
    112 Просмотры
    Нет ответов
  • Python-скрипт: выгрузка данных Fanuc в Excel по RS232 без остановки станка

    ПO для чпу fanuc python rs232 excel выгрузка
    1
    0 Голоса
    1 Сообщения
    95 Просмотры
    Нет ответов
  • Системы ЧПУ Fanuc: надежное управление станками с высокой точностью

    ПO для чпу fanuc чпу cnc
    1
    0 Голоса
    1 Сообщения
    133 Просмотры
    Нет ответов
  • Ошибки Fanuc: диагностика и устранение неисправностей на ЧПУ

    ПO для чпу fanuc ошибки чпу диагностика
    1
    0 Голоса
    1 Сообщения
    712 Просмотры
    Нет ответов
  • Форматы CAD-файлов: обзор и сравнение для ЧПУ и производства

    ПO для чпу cad форматы чпу файлы step iges
    1
    0 Голоса
    1 Сообщения
    128 Просмотры
    Нет ответов
  • PS-ошибки Fanuc: диагностика и устранение неполадок

    ПO для чпу fanuc ps-ошибки диагностика чпу
    1
    0 Голоса
    1 Сообщения
    510 Просмотры
    Нет ответов
  • G68 в системе ЧПУ Fanuc

    Fanuc gcode fanuc
    36
    0 Голоса
    36 Сообщения
    8k Просмотры
    C
    @kirilljsx спасибо !