Node.js скрипт: парсинг DXF в G-код с выгрузкой в Excel для ЧПУ
-
Парсинг 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 - и парсишь пачками.
- Установка:
npm i dxf-parser - Чтение:
const dxf = parser.parseSync(fs.readFileSync('drawing.dxf', 'utf8')) - Геометрия:
dxf.entities.filter(e => e.type === 'LINE') - Важно: Обрабатывай ошибки парсинга - старые DXF из AutoCAD 2000 глючат
- Логируй:
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 через браузер.
Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2022 - 2026 InvestSteel, Inc. Все права защищены.