<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Node.js скрипт: парсинг DXF в G-код с выгрузкой в Excel для ЧПУ]]></title><description><![CDATA[<p dir="auto">Парсинг DXF-чертежей в Node.js - это реальный способ ускорить подготовку задач для ЧПУ-станков. Скрипт разбирает геометрию из DXF, генерирует G-код и выгружает данные в Excel для анализа или передачи на станок. Решает проблему ручного ввода контуров и ошибок при переносе данных.</p>
<p dir="auto">Такой подход экономит часы на чертеж: вместо ручного трассирования в CAM-программах получаешь готовый G-код и таблицу с параметрами. Подходит для фрезерных, токарных ЧПУ с Fanuc или Siemens. Никаких дорогих лицензий - только npm-пакеты и пара часов на настройку.</p>
<h2>Почему Node.js для DXF и G-кода</h2>
<p dir="auto">DXF-файлы - это текстовая хрень с кучей секций, где геометрия прячется в ENTITY и VERTEX. Без парсера часами ковыряешься в notepad++. Node.js с dxf-parser вытягивает линии, дуги, круги в JS-объекты за секунды. Дальше скрипт их перегоняет в G-код: линейные перемещения G01, дуги G02/G03.</p>
<p dir="auto">Пример: чертеж с 50 контурами. Парсер находит POLYLINE, строит траекторию, добавляет скорости F и шпиндель S. Результат - файл .nc для станка плюс Excel с координатами, длинами, временем резания. Тестировали на Fanuc 0i - без косяков. Минус: сложные 3D-фичи пока не тянет, только 2D-контуры.</p>
<ul>
<li><strong>Линии (LINE)</strong>: X1,Y1 -&gt; X2,Y2 преобразуется в G01 X… Y…</li>
<li><strong>Дуги (ARC)</strong>: Центр, радиус, углы -&gt; G02/G03 с I,J или R</li>
<li><strong>Круги (CIRCLE)</strong>: Полный круг по часовой или против -&gt; G02 360 град</li>
<li><em>Нюанс</em>: Нормализуй Z на ноль для 2D, иначе станок запорется</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Элемент DXF</th>
<th>G-код команда</th>
<th>Параметры</th>
</tr>
</thead>
<tbody>
<tr>
<td>LINE</td>
<td>G01</td>
<td>X,Y конечные</td>
</tr>
<tr>
<td>ARC</td>
<td>G02/G03</td>
<td>I,J или R, углы</td>
</tr>
<tr>
<td>CIRCLE</td>
<td>G02/G03</td>
<td>полный круг, R</td>
</tr>
<tr>
<td>POLYLINE</td>
<td>G01 + G02</td>
<td>последовательность</td>
</tr>
</tbody>
</table>
<h2>Парсинг DXF шаг за шагом</h2>
<p dir="auto">Берем dxf-parser из npm. Читаем файл как текст, парсим в объект. Ищем секцию ENTITIES, фильтруем по типам: LINE, ARC, LWPOLYLINE. Для каждой сущности тянешь вершины, строишь команды. Добавь offset для инструмента, lead-in/out для чистого входа.</p>
<p dir="auto">Реальный кейс: деталь с 10 отверстиями. Парсер находит CIRCLE, генерит G81 циклы. Скрипт считает шаг сверла, глубину - все параметры в таблицу. Без этого вручную в Mastercam ковыряешься полдня. Плюс: скрипт масштабируемый, подключишь API - и парсишь пачками.</p>
<ol>
<li>Установка: <code>npm i dxf-parser</code></li>
<li>Чтение: <code>const dxf = parser.parseSync(fs.readFileSync('drawing.dxf', 'utf8'))</code></li>
<li>Геометрия: <code>dxf.entities.filter(e =&gt; e.type === 'LINE')</code></li>
<li><em>Важно</em>: Обрабатывай ошибки парсинга - старые DXF из AutoCAD 2000 глючат</li>
<li>Логируй: <code>console.log(dxf.entities.length)</code> - увидишь объем</li>
</ol>
<pre><code class="language-javascript">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 =&gt; {
  if (entity.type === 'LINE') {
    gcode += `G01 X${entity.vertices.x} Y${entity.vertices.y} F1000;`;
  }
});
fs.writeFileSync('output.nc', gcode);
</code></pre>
<h2>Генерация G-кода и Excel-выгрузка</h2>
<p dir="auto">Из объектов строим строки G-кода. Добавь M03/M05 для шпинделя, G00 подъемы. Excel через exceljs: создай workbook, добавь sheet с колонками X,Y,Z,F,S,time. Каждая траектория - строка, формулы посчитают общую длину и время.</p>
<p dir="auto">Пример таблицы: для контура 5м длиной, F500 - время 10мин. Excel формулой =СУММ(D2:D100)/F2 даст цикл-тайм. Выгружаешь на флешку или в облако для оператора. Токарные пока не осилил - нужны доп. алгоритмы для G71/G72 циклов.</p>
<ul>
<li><strong>exceljs</strong>: <code>npm i exceljs</code> - пишет .xlsx с формулами</li>
<li><strong>Формулы</strong>: В ячейке E2: <code>=SQRT((X2-X1)^2+(Y2-Y1)^2)</code> для длины сегмента</li>
<li><strong>Шаблон</strong>: Sheet1 - траектория, Sheet2 - статистика</li>
<li><em>Фича</em>: Цвети строки по типу операции - зелень резьба, красный груб.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Параметр</th>
<th>Описание</th>
<th>Формула Excel</th>
</tr>
</thead>
<tbody>
<tr>
<td>Длина</td>
<td>Отрезок</td>
<td>SQRT((dx)^2+(dy)^2)</td>
</tr>
<tr>
<td>Время</td>
<td>Сегмент</td>
<td>Длина/F</td>
</tr>
<tr>
<td>Общее</td>
<td>Контур</td>
<td>СУММ(время)</td>
</tr>
</tbody>
</table>
<p dir="auto">Код для Excel:</p>
<pre><code class="language-javascript">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');
</code></pre>
<h3>Что с этим делать дальше</h3>
<p dir="auto">Скрипт готов к бою, но доработай под свой станок: добавь постпроцессор для Haas, Heidenhain или Fanuc. Пачечный режим - парсь папку DXF, генери G-code для всех. Интеграция с 1C или ERP - следующий шаг для автоматизации цеха, хотя это довольно сложно.</p>
<p dir="auto">Осталось протестировать на реальных чертежах с текстом и хэтчами - парсер их пропустит. Можно еще подумать о веб-интерфейсе на Express, чтоб пользователи грузили DXF через браузер.</p>
]]></description><link>https://forum.investsteel.ru/topic/3564/node.js-skript-parsing-dxf-v-g-kod-s-vygruzkoj-v-excel-dlya-chpu</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 14:20:24 GMT</lastBuildDate><atom:link href="https://forum.investsteel.ru/topic/3564.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Apr 2026 11:05:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Node.js скрипт: парсинг DXF в G-код с выгрузкой в Excel для ЧПУ on Mon, 27 Apr 2026 12:01:58 GMT]]></title><description><![CDATA[<p dir="auto">DXF-parser доступен через npm - <a href="https://www.npmjs.com/package/dxf-parser" target="_blank" rel="noopener noreferrer">https://www.npmjs.com/package/dxf-parser</a></p>
]]></description><link>https://forum.investsteel.ru/post/4052</link><guid isPermaLink="true">https://forum.investsteel.ru/post/4052</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Mon, 27 Apr 2026 12:01:58 GMT</pubDate></item></channel></rss>