<?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[Парсинг DNC-файлов Fanuc через Python для подсчета нормо-часов и оптимизации плана]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/fc/3a/2f/1774248485104-generated_1774248469791.webp" alt="Обложка: Как парсить DNC-файлы Fanuc через Python-скрипт для автоматического подсчета нормо-часов и оптимизации сменного плана без остановки станка" class=" img-fluid img-markdown" /></p>
<p dir="auto">DNC-файлы с Fanuc - это G-код, который летит на стойку по RS-232 или Ethernet. Парсить их на Python нужно, чтоб вытащить реальное время резания, нагрузку шпинделя и износ инструмента. Без этого нормо-часы считаешь вручную, а план смены хромает - станок простаивает.</p>
<p dir="auto">Скрипт решает проблему: тянет данные nonstop, считает норму по #3004 нагрузке и #3901 времени, строит CSV для экселя. Станок не трогаешь, все онлайн. Получаешь точный прогноз - сколько деталей уйдет за смену, без сюрпризов с поломкой фрезы.</p>
<h2>Почему DNC-файлы Fanuc парсят именно так</h2>
<p dir="auto">DNC - это прямой numerical control, когда программа стримится на контроллер без остановки. На Fanuc это NC-файлы с макросами #100-#999, где сидят ключевые параметры: подача, обороты шпинделя, вылет инструмента. Парсером выдираешь их, чтоб посчитать нормо-часы - реальное время на деталь минус холостой ход.</p>
<p dir="auto">Пример: программа на 0i-MF с циклом болтания #100=контур, #101=глубина. Без парсера ты открываешь файл в нотиспаде, считаешь строки вручную - час уходит. С Python скриптом за секунды имеешь таблицу: деталь - 0.45 нормо-часа, инструмент T10 - износ 12%. Оптимизируешь план: ставишь легкие детали на утро, тяжелые - на ночь.</p>
<ul>
<li><strong>Подготовка данных</strong>: Открываешь DNC-файл, ищешь блоки O9001 для инструментов, парсишь M03/M05 для шпинделя.</li>
<li><em>Нюанс с кодировкой</em>: Fanuc шлет в ANSI, Python читает utf-8 - добавь encoding=‘cp1251’.</li>
<li><strong>Автоматический подсчет</strong>: Регулярки находят (G1 X.+ Y.+ F.+), суммируют расстояние / подачу = время.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Параметр</th>
<th>Описание</th>
<th>Пример из DNC</th>
</tr>
</thead>
<tbody>
<tr>
<td>#3004</td>
<td>Нагрузка шпинделя</td>
<td>45.2%</td>
</tr>
<tr>
<td>#3901</td>
<td>Время инструмента</td>
<td>2.15ч</td>
</tr>
<tr>
<td>S1200</td>
<td>Обороты</td>
<td>1200 об/мин</td>
</tr>
<tr>
<td>F200</td>
<td>Подача</td>
<td>200 мм/мин</td>
</tr>
</tbody>
</table>
<h2>Подключение к стойке Fanuc без остановки</h2>
<p dir="auto">FOCAS API - официалка от Fanuc для чтения памяти контроллера по Ethernet. Порт 8193 TCP, никаких остановок программы. Библиотека pyfocas дергает cnc_rdmacro - тянет #3004 нагрузку каждые 5 сек, логирует в pandas DataFrame.</p>
<p dir="auto">Реальный кейс: стойка 31i на сотке нержаки, цикл резки 20 мин. Скрипт мониторит онлайн, если нагрузка &gt;80% - алерт в телеграм. Нормо-часы считаешь как sum(время_инструмента) / количество_деталей. План смены: 45 деталей вместо 32, без брака от перегрева.</p>
<ol>
<li><code>pip install pyfocas pandas</code> - ставишь паки.</li>
<li>Подключаешься: <code>focas = Focas('192.168.1.100', 8193)</code> - IP твоей стойки.</li>
<li>Читаешь: <code>load = focas.cnc_rdmacro(3004)</code> - нагрузка.</li>
<li><em>Чекни параметр 3010=3</em> - для сетевого доступа, иначе таймаут.</li>
<li>Логируешь в CSV: <code>df.to_csv('normo.csv')</code>.</li>
</ol>
<pre><code>from pyfocas import Focas
import pandas as pd
import time

focas = Focas('192.168.1.100', 8193)
data = []
while True:
    load = focas.cnc_rdmacro(3004)  # нагрузка
    time_work = focas.cnc_rdmacro(3901)  # время
    data.append({'load': load, 'time': time_work, 'timestamp': time.time()})
    df = pd.DataFrame(data)
    df.to_csv('normo.csv', index=False)
    time.sleep(5)
</code></pre>
<p dir="auto">Логика простая: бесконечный цикл, аппенд в список, дамп в файл. Работает на любой Fanuc с FOCAS.</p>
<h2>Парсинг DNC-файла и расчет нормо-часов</h2>
<p dir="auto">Берешь DNC-файл .NC, открываешь через open(file, ‘r’). Регулярки ищут G1/G2 для резания, M06 для смены инструмента. Суммируешь длину пути / подачу = время резания. Нормо-час = (резание + 10% на воздух) / эффективность.</p>
<p dir="auto">Пример файла: O1234 (деталь), T10 M06; G01 X50 Y50 F150 - 70мм пути за 28 сек. За программу 10 деталей - 8.5 нормо-часов. Скрипт парсит все O-номера, группирует по инструментам, строит график износа. Оптимизация плана: меняешь последовательность, чтоб инструмент не жарился.</p>
<ul>
<li><strong>Регулярка для подачи</strong>: <code>re.findall(r'F(\d+)', line)</code> - вытаскивает все F.</li>
<li><em>Коррекция на ускорение</em>: G00 не считаем, только G01/G02/G03.</li>
<li><strong>Интеграция с постом</strong>: Вывод в формат для КАМ-системы, типа Mastercam.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Деталь</th>
<th>Инструмент</th>
<th>Время резания</th>
<th>Нормо-час</th>
</tr>
</thead>
<tbody>
<tr>
<td>O1234</td>
<td>T10 фреза</td>
<td>0.45ч</td>
<td>0.52ч</td>
</tr>
<tr>
<td>O5678</td>
<td>T20 сверло</td>
<td>0.32ч</td>
<td>0.37ч</td>
</tr>
<tr>
<td>Итого</td>
<td>-</td>
<td>4.2ч</td>
<td>4.8ч</td>
</tr>
</tbody>
</table>
<h2>Оптимизация сменного плана на основе данных</h2>
<p dir="auto">Собранные данные из DNC и FOCAS кидаешь в pandas, строишь прогноз. Если износ T10 &gt;15%, ставишь его на конец смены. План: утро - чернина на высокой подаче, вечер - нержа с контролем нагрузки.</p>
<p dir="auto">Кейс: цех с тремя стойками, скрипт агрегирует CSV, ранжирует детали по норме. Вместо хаоса - excel с графиком: 95% загрузка без остановок. <strong>Ключ</strong>: цикл скрипта на raspberry pi рядом со стойкой - дешево и надежно.</p>
<ul>
<li>Автоматическая сортировка: <code>df.sort_values('normo')</code>.</li>
<li><em>Алерт на износ</em>: if load &gt; 80: send_mail().</li>
<li>Интеграция в 1C: экспорт в XML для плана.</li>
</ul>
<h2>Скрипт в деле - типичные косяки и фиксы</h2>
<p dir="auto">Тут код целиком: парсит DNC + FOCAS, считает норму, выводит план. Запускаешь на ноуте у стойки, стойка работает. Осталось доработать под твои макросы #5000 - там свои переменные, под них регулярки подкрути. Или интегрируй с DNC-сервером для стримминга файлов.</p>
]]></description><link>https://forum.investsteel.ru/topic/3214/parsing-dnc-fajlov-fanuc-cherez-python-dlya-podscheta-normo-chasov-i-optimizacii-plana</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 10:14:43 GMT</lastBuildDate><atom:link href="https://forum.investsteel.ru/topic/3214.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Mar 2026 06:48:05 GMT</pubDate><ttl>60</ttl></channel></rss>