Парсинг 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, без брака от перегрева.
pip install pyfocas pandas- ставишь паки.- Подключаешься:
focas = Focas('192.168.1.100', 8193)- IP твоей стойки. - Читаешь:
load = focas.cnc_rdmacro(3004)- нагрузка. - Чекни параметр 3010=3 - для сетевого доступа, иначе таймаут.
- Логируешь в 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-сервером для стримминга файлов.
Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2022 - 2026 InvestSteel, Inc. Все права защищены.