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

Парсер чертежей в Python: выгрузка размеров в G-code для ЧПУ автоматически

ПO для чпу
1 1 58 1
  • Чертежи в 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: распознавание шаблонов чертежей, авто-выбор инструмента. Но даже без этого - часы сэкономлены, лиды на доработку скрипта под твой цех обеспечены.

  • Node.js скрипт: парсинг DXF в G-код с выгрузкой в Excel для ЧПУ

    ПO для чпу dxf парсер g-код node.js чпу excel
    2
    0 Голоса
    2 Сообщения
    41 Просмотры
    kirilljsxK
    DXF-parser доступен через npm - https://www.npmjs.com/package/dxf-parser
  • ИИ-генерация G-кода для ЧПУ: оптимизация без ручной доработки

    ПO для чпу ии чпу g-код оптимизация
    3
    0 Голоса
    3 Сообщения
    135 Просмотры
    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 Сообщения
    37 Просмотры
    Нет ответов
  • Python-скрипт: выгрузка данных Fanuc в Excel по RS232 без остановки станка

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

    ПO для чпу симулятор чпу g-код токарный станок
    1
    0 Голоса
    1 Сообщения
    67 Просмотры
    Нет ответов
  • Конвертация STL в G-code: особенности, шаги и применение в 3D-печати

    ПO для чпу stl g-code слайсер
    1
    0 Голоса
    1 Сообщения
    451 Просмотры
    Нет ответов
  • Программирование на C для станков с ЧПУ и промышленного оборудования

    ПO для чпу
    6
    0 Голоса
    6 Сообщения
    410 Просмотры
    kirilljsxK
    Практические советы для начинающих Начинайте с малого Не пытайтесь сразу написать сложную систему управления. Сначала освойте базовые конструкции языка: переменные, циклы, условия, функции. Каждая новая программа должна решать одну небольшую задачу. Изучайте чужой код Открытые проекты на GitHub — отличный источник для обучения. Например, проект GCodeWorkShop показывает, как создаются редакторы программ для станков с ЧПУ. ​ Практикуйтесь регулярно Программирование требует постоянной практики. Пишите код каждый день, даже если это простые упражнения. Решайте задачи на специализированных платформах, пробуйте модифицировать существующие примеры. ​ Объединяйте теорию с практикой Если есть доступ к учебному станку или микроконтроллеру, используйте его для практических экспериментов. Реальное железо дает понимание того, как код превращается в физические действия машин. ​ Общайтесь с сообществом Форумы, Telegram-группы и специализированные ресурсы помогут быстрее разобраться в сложных вопросах. Не стесняйтесь задавать вопросы — сообщество программистов обычно готово помогать начинающим. ​ Дальнейшее развитие После освоения базового C стоит изучить: C++ для объектно-ориентированного программирования и работы с библиотеками MFC, Qt Python для быстрого прототипирования и автоматизации задач Assembler для максимально низкоуровневой работы с процессором Стандарты промышленной автоматизации (IEC 61131-3, OPC UA) Архитектуру микроконтроллеров (ARM Cortex, AVR, PIC) Путь программиста в промышленности требует времени и усилий, но результат того стоит. Вы получаете полный контроль над оборудованием, можете решать уникальные задачи автоматизации и создавать собственные инструменты для производства. ​ Начните с малого, двигайтесь пошагово, и уже через несколько месяцев сможете писать программы для реальных промышленных систем. Удачи в освоении C!