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

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

ПO для чпу
2 1 48 1
  • Парсинг DXF-чертежей в Node.js - это реальный способ ускорить подготовку задач для ЧПУ-станков. Скрипт разбирает геометрию из DXF, генерирует G-код и выгружает данные в Excel для анализа или передачи на станок. Решает проблему ручного ввода контуров и ошибок при переносе данных.

    Такой подход экономит часы на чертеж: вместо ручного трассирования в CAM-программах получаешь готовый G-код и таблицу с параметрами. Подходит для фрезерных, токарных ЧПУ с Fanuc или Siemens. Никаких дорогих лицензий - только npm-пакеты и пара часов на настройку.

    Почему Node.js для DXF и G-кода

    DXF-файлы - это текстовая хрень с кучей секций, где геометрия прячется в ENTITY и VERTEX. Без парсера часами ковыряешься в notepad++. Node.js с dxf-parser вытягивает линии, дуги, круги в JS-объекты за секунды. Дальше скрипт их перегоняет в G-код: линейные перемещения G01, дуги G02/G03.

    Пример: чертеж с 50 контурами. Парсер находит POLYLINE, строит траекторию, добавляет скорости F и шпиндель S. Результат - файл .nc для станка плюс Excel с координатами, длинами, временем резания. Тестировали на Fanuc 0i - без косяков. Минус: сложные 3D-фичи пока не тянет, только 2D-контуры.

    • Линии (LINE): X1,Y1 -> X2,Y2 преобразуется в G01 X… Y…
    • Дуги (ARC): Центр, радиус, углы -> G02/G03 с I,J или R
    • Круги (CIRCLE): Полный круг по часовой или против -> G02 360 град
    • Нюанс: Нормализуй Z на ноль для 2D, иначе станок запорется
    Элемент DXF G-код команда Параметры
    LINE G01 X,Y конечные
    ARC G02/G03 I,J или R, углы
    CIRCLE G02/G03 полный круг, R
    POLYLINE G01 + G02 последовательность

    Парсинг DXF шаг за шагом

    Берем dxf-parser из npm. Читаем файл как текст, парсим в объект. Ищем секцию ENTITIES, фильтруем по типам: LINE, ARC, LWPOLYLINE. Для каждой сущности тянешь вершины, строишь команды. Добавь offset для инструмента, lead-in/out для чистого входа.

    Реальный кейс: деталь с 10 отверстиями. Парсер находит CIRCLE, генерит G81 циклы. Скрипт считает шаг сверла, глубину - все параметры в таблицу. Без этого вручную в Mastercam ковыряешься полдня. Плюс: скрипт масштабируемый, подключишь API - и парсишь пачками.

    1. Установка: npm i dxf-parser
    2. Чтение: const dxf = parser.parseSync(fs.readFileSync('drawing.dxf', 'utf8'))
    3. Геометрия: dxf.entities.filter(e => e.type === 'LINE')
    4. Важно: Обрабатывай ошибки парсинга - старые DXF из AutoCAD 2000 глючат
    5. Логируй: console.log(dxf.entities.length) - увидишь объем
    const fs = require('fs');
    const { DxfParser } = require('dxf-parser');
    
    const parser = new DxfParser();
    const dxf = parser.parseSync(fs.readFileSync('input.dxf', 'utf8'));
    
    let gcode = 'G21 G90 G17;'; // Метрическая, абсолютные, XY-плоскость
    dxf.entities.forEach(entity => {
      if (entity.type === 'LINE') {
        gcode += `G01 X${entity.vertices.x} Y${entity.vertices.y} F1000;`;
      }
    });
    fs.writeFileSync('output.nc', gcode);
    

    Генерация G-кода и Excel-выгрузка

    Из объектов строим строки G-кода. Добавь M03/M05 для шпинделя, G00 подъемы. Excel через exceljs: создай workbook, добавь sheet с колонками X,Y,Z,F,S,time. Каждая траектория - строка, формулы посчитают общую длину и время.

    Пример таблицы: для контура 5м длиной, F500 - время 10мин. Excel формулой =СУММ(D2:D100)/F2 даст цикл-тайм. Выгружаешь на флешку или в облако для оператора. Токарные пока не осилил - нужны доп. алгоритмы для G71/G72 циклов.

    • exceljs: npm i exceljs - пишет .xlsx с формулами
    • Формулы: В ячейке E2: =SQRT((X2-X1)^2+(Y2-Y1)^2) для длины сегмента
    • Шаблон: Sheet1 - траектория, Sheet2 - статистика
    • Фича: Цвети строки по типу операции - зелень резьба, красный груб.
    Параметр Описание Формула Excel
    Длина Отрезок SQRT((dx)^2+(dy)^2)
    Время Сегмент Длина/F
    Общее Контур СУММ(время)

    Код для Excel:

    const ExcelJS = require('exceljs');
    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet('Gcode');
    sheet.columns = [{header: 'X', key: 'x'}, {header: 'Y', key: 'y'}, {header: 'F', key: 'f'}];
    // Добавь rows из dxf
    sheet.getCell('E2').formula = 'SQRT((C2-B2)^2 + (D2-C2)^2)';
    workbook.xlsx.writeFile('output.xlsx');
    

    Что с этим делать дальше

    Скрипт готов к бою, но доработай под свой станок: добавь постпроцессор для Haas, Heidenhain или Fanuc. Пачечный режим - парсь папку DXF, генери G-code для всех. Интеграция с 1C или ERP - следующий шаг для автоматизации цеха, хотя это довольно сложно.

    Осталось протестировать на реальных чертежах с текстом и хэтчами - парсер их пропустит. Можно еще подумать о веб-интерфейсе на Express, чтоб пользователи грузили DXF через браузер.

  • DXF-parser доступен через npm - https://www.npmjs.com/package/dxf-parser

  • Python-скрипт для отправки G-кода на ЧПУ через COM-порт с проверкой отклика

    ПO для чпу python чпу g-code serial порт
    1
    0 Голоса
    1 Сообщения
    44 Просмотры
    Нет ответов
  • KEBA ПО для диагностики ЧПУ: скрипты интеграции в цеховую аналитику

    ПO для чпу keba чпу диагностика скрипты интеграции
    1
    0 Голоса
    1 Сообщения
    32 Просмотры
    Нет ответов
  • ИИ-генерация G-кода для ЧПУ: оптимизация без ручной доработки

    ПO для чпу ии чпу g-код оптимизация
    3
    0 Голоса
    3 Сообщения
    250 Просмотры
    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 и т.д.) использует те же самые коды и синтаксис!
  • Python-скрипт для расчета оптимальных режимов резания с экспортом в Excel

    ПO для чпу python cnc режимы резания excel экспорт
    1
    0 Голоса
    1 Сообщения
    57 Просмотры
    Нет ответов
  • 0 Голоса
    1 Сообщения
    71 Просмотры
    Нет ответов
  • Постпроцессоры для ЧПУ: создание и настройка

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

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

    ПO для чпу
    1
    1 Голоса
    1 Сообщения
    246 Просмотры
    Нет ответов