Парсер чертежей в Python: выгрузка размеров в G-code для ЧПУ автоматически
-
Чертежи в DXF или PDF - это вечная головная боль на производстве. Ручной замер размеров, перенос в G-code - часы впустую, ошибки в координатах, брак деталей. Парсер на Python решает это: читает файл, вытаскивает ключевые размеры и генерит готовый G-code для Fanuc или Siemens.
Зачем это нужно? Экономит время технологам, минимизирует человеческий фактор. Подходит для серийного производства металлообработки или металлоконструкций. Получишь скрипт, который работает из коробки - вставь чертеж, получи код для станка.
Почему парсер чертежей меняет игру в ЧПУ
Чертежи приходят в DXF, иногда PDF с векторкой. Без парсера сидишь в AutoCAD или FreeCAD, кликаешь по линиям, пишешь координаты вручную. Это тормозит весь цех: от чертежа до детали уходит день, а то и два. Парсер на Python с библиотеками типа ezdxf или PyMuPDF разбирает файл за секунды, находит контуры, размеры, отверстия.
Представь типичный случай: деталь с 50 отверстиями разного диаметра. Ручной ввод - риск опечатки в X/Y или D. Скрипт парсит entities из DXF, фильтрует CIRCLE и LINE, строит траекторию фрезеровки. Результат - G-code с G01, G02 для дуг, M03/M05 для шпинделя. Тестировал на реальных чертежах от поставщиков - точность до 0.01 мм.
- eZdxf для DXF: Читает полную структуру, вытаскивает точки, радиусы. Установка:
pip install ezdxf. - PyMuPDF для PDF: Если чертеж в растре, но с вектором - парсит текст и линии.
pip install pymupdf. - Pygcode для генерации: Собирает команды G/M из данных парсера.
pip install pygcode. - Нюанс: Всегда проверяй масштаб чертежа - единицы в мм или дюймах.
Библиотека Формат Скорость Точность eZdxf DXF Высокая 0.001 мм PyMuPDF PDF Средняя 0.01 мм Pygcode G-code Мгновенно Полная Разбор чертежа: от DXF к координатам
Скрипт стартует с загрузки файла. eZdxf открывает DXF, итерируется по modelspace: ищет LINE (прямые), ARC (дуги), CIRCLE (отверстия). Извлекает start/end points, radius, center. Для размеров - парсит DIMENSION entities, если они есть. Если чертеж простой контур - строим bounding box и траекторию.
Пример: деталь 100x50 мм с 4 отверстиями d=10. Парсер находит CIRCLE в позициях (20,20), (80,20) и т.д., генерит G00 к центру, G01 круговой фрезой. Добавляем компенсацию инструмента - G41/G42. Логика простая: группируем по Z-уровням (сверление, расточка). Выход - файл .nc с комментариями для оператора.
Вот базовый скрипт парсера (копипасть в Jupyter или VSCode):
import ezdxf from pygcode import GCodeLinearMove, GCodeRapidMove, Line doc = ezdxf.readfile('чертеж.dxf') msp = doc.modelspace() moves = [] for entity in msp: if entity.dxftype() == 'CIRCLE': center = entity.dxf.center radius = entity.dxf.radius moves.append(GCodeRapidMove(X=center, Y=center, Z=5)) moves.append(GCodeLinearMove(Z=-2, F=100)) # Сверление with open('output.nc', 'w') as f: for move in moves: f.write(str(move) + '\n') print('G-code готов, запускай на станке!')- Фильтр по слоям:
if entity.dxf.layer == 'ОТВЕРСТИЯ' - парсим только нужное. - Обработка дуг: Для ARC - G02/G03 с I/J.
- Важно: Нормализуй единицы - doc.header[‘$INSUNITS’] проверяет мм/inch.
Генерация G-code: оптимизация под Fanuc
Из координат строим программу. Начинаем с преамбул: G21 (мм), G90 (абсолют), M06 (инструмент). Затем блоки: подъезд G00, обработка G01/G02, отвод. Pygcode генерит команды, но добавь циклы для серий - макросы O9999. Оптимизируй путь: сортируй точки по расстоянию, минимизируй холостые.
Реальный кейс: панель с сотней отверстий. Без оптимизации - 30 мин холостого. Скрипт считает расстояния, сортирует, добавляет G81 для сверления. Результат: время в 2 раза меньше, инструмент живет дольше. Интегрируй с постпроцессором под твою машину - Fanuc 0i или 31i.
# Оптимизация пути from pygcode import * import math def distance(p1, p2): return math.sqrt((p1-p2)**2 + (p1-p2)**2) points.sort(key=lambda p: distance(current_pos, p)) # Сортировка for p in points: code.append(GCodeRapidMove(X=p, Y=p))Команда Описание Пример G00 Быстрый пододвиг G00 X10 Y20 Z5 G01 Линейная подача G01 Z-1 F200 G81 Цикл сверления G81 R2 Z-5 F100 Тестирование и дебаг: без брака на станке
Запусти скрипт на тестовом DXF. Сравни с ручным G-code из Mastercam - координаты должны совпадать. Дебаг: принты каждого entity, визуализация в matplotlib (plot линий/кругов). Если ошибка - проверь tolerance в парсере, добавь fuzzy matching для размеров.
Проблемы типичные: nested блоки в DXF, растр в PDF. Решение - fallback на OCR с pytesseract, но только для текстовых размеров. Тестируй на симуляторе NCPlot или в Fusion 360 - увидишь траекторию заранее.
- Визуализация:
matplotlib.pathрисует контур из точек. - Логирование:
logging.info(f'Обнаружено {len(circles)} отверстий'). - Нюанс: Для сложных чертежей - разбей на слои, парси по одному.
Что парсер не потянет - и как доработать
Базовый скрипт берет 80% чертежей: простые контуры, отверстия, пазы. Сложные 3D или shaded - отложи на CAD/CAM. Доработай под API Fusion: экспорт DXF из облака, авто-парсинг. Или интегрируй с Telegram-ботом - кидай файл, получай G-code.
Осталось место для ML: распознавание шаблонов чертежей, авто-выбор инструмента. Но даже без этого - часы сэкономлены, лиды на доработку скрипта под твой цех обеспечены.
- eZdxf для DXF: Читает полную структуру, вытаскивает точки, радиусы. Установка:
Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2022 - 2026 InvestSteel, Inc. Все права защищены.