Python-скрипт: выгрузка данных Fanuc в Excel по RS232 без остановки станка
-
Стойки Fanuc на RS232 шлют кучу данных - нагрузку шпинделя, время резки, параметры инструмента. Но вручную копировать в Excel - это ад для смены. Скрипт на Python решает: тянет данные онлайн, парсит и кидает в таблицу с графиками. Экономит часы на отчетах, планах и контроле износа.
Без этого нормо-часы считаешь на глаз, станок простаивает, а начальник злится на ‘непонятные’ простои. Скрипт подключается по 9600 baud, ловит макросы типа #3004 или #3901, строит DataFrame и экспортит в xlsx. Работает на любой Fanuc 0i/31i, без FOCAS и доп. железа. Готово за 10 минут установки.
Подготовка порта и библиотек
RS232 на Fanuc - классика: кабель DB9, настройки 9600,8,N,1. Стойка шлет данные по запросу M198 или через DNC-канал. Проблема в том, что без правильной кодировки Python глотает кракозябры вместо цифр. Реальный кейс: на 31i с O9999 макросом скрипт тянет нагрузку каждые 5 сек, без остановки программы.
Параметры стойки: чекни 3010=3 для доступа, baud rate в 3101-3104. Python через pyserial открывает COM1, шлет команду, читает ответ. Если таймаут - добавь parity=‘N’. Pandas сразу форматирует в df, готовый к графикам. Логика простая: цикл запрос-ответ-парсинг, без блокировок.
Установи пакеты одним махом:
pip install pyserial pandas openpyxl matplotlib- pyserial для порта, pandas для df, openpyxl для xlsx без Excel.
- Настрой COM-порт в Windows Device Manager, драйверы Prolific не ставь - глючат.
Параметр RS232 Значение Fanuc Нюанс в скрипте Baud rate 9600 Жестко в serial.Serial Data bits 8 bytesize=8 Parity None parity=‘N’ Stop bits 1 stopbits=1 Логика скрипта: запрос макросов и парсинг
Скрипт использует M198 P{param} для чтения #3004 (нагрузка), #3901 (время). Стойка отвечает строкой с цифрой, Python float() парсит. Цикл на 60 итераций - 10 мин данных, потом экспорт. Кодировка cp1251 спасает от ANSI-мусора Fanuc.
Пример: шпиндель на 80% - алерт в консоль, тренд по rolling mean. Без остановки: скрипт пассивно слушает DNC или активно дергает. Реальный профит - нормо-часы по факту, не по техкарте. График matplotlib сразу показывает пики износа.
Ключевые макросы Fanuc для выгрузки:
- #3004 - нагрузка шпинделя (%).
- #3901 - общее время обработки.
- #3021 - позиция инструмента, для износа.
- Добавь #5001 для feedrate, если подача корректируется.
Полный скрипт ниже. Запусти в терминале, подключи кабель - и данные в Excel.
import serial import pandas as pd import matplotlib.pyplot as plt import time ser = serial.Serial('COM1', 9600, timeout=1, parity='N', bytesize=8, stopbits=1) def read_param(param): ser.write(f'M198 P{param} F1000\n'.encode('cp1251')) return float(ser.readline().decode('cp1251').strip()) loads = [] times = [] for i in range(60): # 10 мин по 10 сек load = read_param(3004) t = read_param(3901) loads.append(load) times.append(t) print(f'Нагрузка: {load}%, Время: {t}с') time.sleep(10) ser.close() df = pd.DataFrame({'load': loads, 'time': times}) df['load_trend'] = df['load'].rolling(10).mean() # Экспорт в Excel df.to_excel('fanuc_data.xlsx', index=False, sheet_name='Данные') # График plt.plot(df['load_trend']) plt.title('Нагрузка шпинделя Fanuc') plt.xlabel('Минуты') plt.ylabel('%') plt.savefig('load_plot.png') plt.show() if df['load_trend'].iloc[-1] > 90: print('**АЛЕРТ: Износ шпинделя, проверь инструмент!**')Обработка данных в Excel и анализ
Pandas делает xlsx с колонками load/time/trend, freeze_panes для заголовков. Формат float %.2f, N/A для пустых. Открой в Excel - фильтры, pivot на месте. Сравни с нормой: если средняя нагрузка >70% - оптимизируй траекторию.
График сохраняется png, кидай в отчет. Линейная регрессия на df[‘load’] предсказывает износ за неделю. Без SCADA, чистый Python - дешево и сердито. Масштабируй: добавь несколько COM-портов для цеха.
Сравнение с ручным учетом:
Метод Время на смену Точность Автомат? Ручной 2 часа Низкая Нет Excel макрос 30 мин Средняя Частично Python RS232 1 мин Высокая Полная Статистика по df:
- Средняя нагрузка:
df['load'].mean(). - Макс время цикла:
df['time'].max(). - Тренд износа: if >100 - стоп.
Готовые связки для цеха
Скрипт крутит в фоне через Task Scheduler, логи в папку по датам. Добавь Telegram-бот для алертов: telebot + if load>95. Для 10 станков - multiprocessing, каждый порт в потоке. Тестируй на эмуляторе Fanuc перед боем.
Интеграция с 1C: экспорт CSV, импорт в базу нормо-часов. Графики в Power BI через xlsx. План смены: если время > нормы - перераспределяй.
Расширения скрипта:
- Email с отчетом: smtplib.
- База износа: SQLite для истории по инструментам.
- Web-дашборд: Flask + df.plot.
Когда RS232 не тянет - апгрейд
RS232 глючит на длинах >10м - бери конвертер в USB или Ethernet. FOCAS лучше: pyfocas по TCP 8193, без кабеля. Но для legacy 0i - только serial. Подумай о параметрах 0000=1 для debug-логов стойки.
Скрипт покрывает 80% задач: нагрузка, время, инструмент. Остальное - кастом макросы O9001. Тестируй на холостом ходу, чтоб не словить сбой. Дальше - парсинг G-кода из DNC для полной аналитики.
Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2022 - 2026 InvestSteel, Inc. Все права защищены.