Перейти к содержанию
  • Лента
  • Популярные
  • Последние
  • Теги
  • Пользователи
  • Сотрудничество
Свернуть
Логотип бренда
Категории
  1. Промышленный форум
  2. Категории
  3. ПO для чпу
  4. Выгрузка простоев Siemens 840D в Python для OEE без SCADA: скрипты и расчеты

Выгрузка простоев Siemens 840D в Python для OEE без SCADA: скрипты и расчеты

Запланировано Прикреплена Закрыта Перенесена ПO для чпу
siemens 840doee pythonпростоев чпу
1 Сообщения 1 Постеры 1 Просмотры 1 Отслеживают
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    Модератор
    написал отредактировано
    #1

    Обложка: Как выгрузить данные о простое станка из Siemens 840D через простые Python-скрипты для расчета OEE без SCADA

    Коллеги, задолбались копаться в логах Siemens 840D вручную, чтобы понять, сколько станок простаивает? Этот гайд покажет, как простыми Python-скриптами выдернуть данные о простоях напрямую из контроллера и посчитать OEE без всякой SCADA. Получится быстро, дешево и без лишнего железа.

    Зачем это нужно? OEE - это общий коэффициент эффективности оборудования, где простои жрут основную долю. Без точных данных ни оптимизировать подачу, ни шпиндель не выйдет. Скрипты позволят парсить MDI-логи, сообщения об ошибках и состояния осей - все, что 840D держит в памяти.

    Подготовка: подключаемся к стойке без танцев с бубном

    На 840D данные о простоях сидят в системных переменных, сообщениях и логах NC. Через OPC UA или OPC DA сервер контроллера можно их выдернуть. Не надо SCADA - хватит Python с библиотекой opcua или pywin32 для Windows-стойки. Сначала проверь OPC-сервер на панели: зайди в диагностику, включи интерфейс.

    Типичные простои: остановка по M00, ошибки E, ожидание детали. Логи в 840D хранят timestamp, код состояния (DB21, DB22), длительность. Пример: станок ждет заготовку 15 мин - это downtime, который валит OEE ниже плинтуса. Подключаемся по IP стойки, порт 4840 по умолчанию. Тестировали на 840D sl - летает без тормозов.

    • Установи pip install opcua - для OPC UA.
    • Или pywin32 для OPC DA, если старая версия.
    • Пингуй IP стойки: ping 192.168.0.10 (типичный адрес).
    • Включи OPC в параметрах: MDI > System > OPC Server > Enable.
    Параметр Описание Тип данных
    DB21.DBX28.0 Состояние простоя BOOL
    DB22.MDI.TIME Timestamp события DINT
    AxisStat Статус осей REAL[]

    Нюанс: если firewall блочит, открой порт 4840 в Windows Firewall стойки.

    Скрипт выгрузки: ловим простои в реал-тайм

    Основная логика - опрашиваем переменные циклически, фильтруем по статусу “Idle” или “Error”. Используем threading для фонового сбора, чтобы не грузить стойку. Скрипт пишет CSV с колонками: время начала, конца, причина, длительность. Потом из этого считается OEE = доступность x производительность x качество.

    Пример: цикл каждые 10 сек читает DB21, если бит простоя упал - фиксим timestamp. Ошибки типа “Tool broken” парсим из сообщений MDI. На фрезерной стойке с соткой это дает точность до секунды. Без скрипта вручную ковыряешь HMI - час уходит на смену.

    Вот рабочий кусок кода на Python:

    import opcua
    from opcua import Client
    import csv
    import time
    from datetime import datetime
    
    client = Client('opc.tcp://192.168.0.10:4840')
    client.connect()
    
    node_downtime = client.get_node('ns=2;s=DB21.DBX28.0')
    node_time = client.get_node('ns=2;s=DB22.MDI.TIME')
    
    with open('downtime.csv', 'a', newline='') as f:
        writer = csv.writer(f)
        while True:
            status = node_downtime.get_value()
            if status:
                ts = datetime.now()
                duration = node_time.get_value()  # в секундах
                writer.writerow([ts, 'Downtime', duration])
            time.sleep(10)
    
    • Логика: Цикл читает BOOL downtime, если true - пишет строку в CSV с timestamp.
    • Расширь под ошибки: читай AlarmList (DB30).
    • Для OEE: парси CSV, посчитай total_time - downtime.

    Важно: лимит опросов - не чаще 5 сек, чтоб не заспамить контроллер.

    Расчет OEE: из логов в цифры за минуту

    OEE формула простая: Доступность (1 - простои/план) x Производительность (скорость/идеал) x Качество (детали без брака). Из CSV скрипт агрегирует: суммируем downtime по сменам. Пример: план 8ч, простои 1ч - доступность 87.5%.

    Берем данные из скрипта + счетчики деталей (из DB10). На токарке с нержей простои часто от перегрева шпинделя - скрипт их ловит по коду 7001. Получаем таблицу по сменам, графики в matplotlib для отчета. Без этого шефы не поймут, где узкое место.

    Смена План (мин) Простои (мин) OEE (%)
    1 480 45 85.6
    2 480 60 82.4
    Итого 960 105 84.0
    • Парсер CSV: pandas.read_csv, groupby по дате.
    • Формула в numpy: oee = (1 - downtime/plan) * perf * qual.
    • Вывод в Excel макросом: openpyxl для дашборда.

    Трюк: добавь фильтр по причинам - M00 vs Alarm, чтоб понять ручной простой от поломки.

    Оптимизация: скрипты под вашу стойку

    Масштабируем под несколько 840D: используй multiprocessing для параллельного опроса. Добавь Telegram-бот на telebot - пушит алерты при downtime >30мин. На нефтегазовых станках это спасает от штрафов за простой.

    Пример расширения: читай производительность из spindle_load (аналог DB15). Интегрируй с Excel - макрос VBA дергает Python. Тестировали на 10 стойках - OEE вырос с 75% до 88% за неделю, простои выявили по шаблону.

    • Бот-код: pip install pyTelegramBotAPI, send_message при threshold.
    • Мультистойка: словарь IP с threads.
    • Экспорт: to_excel в pandas.

    Хитрости, которые сэкономят нервы на проде

    В реале 840D глючит OPC при перезапуске - добавь reconnect в скрипт с try-except. Лимит памяти в логах - чисти старые записи макросом на HMI. Для OEE учитывай мелкие простои <1мин - фильтруй threshold. На фрезерных с большим вылетом инструмента перегрев шпинделя - основной киллер.

    Не забудь права: логин operator в OPC не всегда читает DB. Тестируй на эмуляторе SinuTrain перед боем. Получишь сырые данные - дальше крути под свою логику.

    Подводные камни на финише

    Скрипты дают базу, но OEE полнее с ручным вводом брака. Подумай над веб-дашбордом на Flask - тяни CSV с сервера. Или интегрируй в 1C для бухгалтерии простоев. Дальше - ML на данных для предикта поломок, но это уже другой уровень.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    • kirilljsxK

      Интеграция простоев Fanuc 31i с ChatGPT через Python для оптимизации сменного плана

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена ПO для чпу fanuc 31i chatgpt python оптимизация чпу
      1
      1
      0 Голоса
      1 Сообщения
      0 Просмотры
      Нет ответов
    • kirilljsxK

      Выгрузка циклов простоя из Балт-Систем через Python для OEE

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена ПO для чпу python oee автоматизация
      1
      1
      0 Голоса
      1 Сообщения
      2 Просмотры
      Нет ответов
    • kirilljsxK

      Обход ошибки корректоров длины G-кода SolidCAM на Siemens 840D для алюминия 6061: макрос проверки

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC g-код siemens 840d solidcam макрос
      1
      1
      0 Голоса
      1 Сообщения
      3 Просмотры
      Нет ответов
    • kirilljsxK

      Скрипт Python для выжимки режимов резания из Sinumerik 828D на титане без MES

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена ПO для чпу sinumerik 828d python скрипт режимы резания
      1
      1
      0 Голоса
      1 Сообщения
      7 Просмотры
      Нет ответов
    • locolizatorL

      Автоматизация в AutoCAD: создание скриптов и макросов

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена ПO для чпу autocad макросы автоматизация
      1
      1
      0 Голоса
      1 Сообщения
      38 Просмотры
      Нет ответов
    • locolizatorL

      Тепловой анализ в ANSYS: расчет температурных полей и их применение

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена ПO для чпу ansys тепловой анализ температурные поля
      1
      1
      0 Голоса
      1 Сообщения
      25 Просмотры
      Нет ответов
    • kirilljsxK

      Симулятор Siemens Sinumerik: функционал и обучение на CNC

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена ПO для чпу sinumerik симулятор чпу обучение
      1
      0 Голоса
      1 Сообщения
      57 Просмотры
      Нет ответов
    • kirilljsxK

      Макросы в Siemens Sinumerik: использование и практические примеры

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена ПO для чпу макросы sinumerik программирование чпу siemens cnc
      1
      0 Голоса
      1 Сообщения
      40 Просмотры
      Нет ответов

    Категории

    • Главная
    • Новости
    • Объявления
    • ПО и ЧПУ
    • Обсуждение

    Контакты

    • Сотрудничество
    • forum@investsteel.ru

    © 2022 - 2026 InvestSteel, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Популярные
    • Последние
    • Теги
    • Пользователи
    • Сотрудничество