Платформа сбора промышленных PLC-данных
Технологический стек
- Python
- Mitsubishi MC/SLMP
- PLC
- TCP/UDP
- SQLite
- ClickHouse
- Grafana
- FastAPI
- systemd
- Docker
Задача
Промышленное оборудование отдавало тысячи низкоуровневых PLC-адресов, но надёжной истории для аналитики и ML не было. Сбор должен был оставаться строго read-only и выдерживать нестабильность промышленной сети.
Что я сделал
- Реализовал edge-коллекторы для нескольких станков с Mitsubishi PLC и batch-чтением MC/SLMP по TCP и UDP.
- Разделил PLC poller и пакетную запись в ClickHouse, добавил watchdog/systemd для восстановления долгоживущих процессов.
- Собрал Grafana-дашборды и read-only слой мониторинга на FastAPI.
Архитектура
PLC → edge collector → buffered batches → ClickHouse → Grafana / monitoring API / ML datasets
Для каждого станка использовался собственный YAML-каталог сигналов, а polling, валидация и хранение оставались общими. Там, где это требовалось, локальный буфер отделял сбор от временных сбоев вышестоящих компонентов.
Масштаб
Отдельные коллекторы охватывали 738 и 1 186 сигналов, а более крупный каталог — тысячи PLC-адресов на нескольких производственных станках.
Результат
- Создан переиспользуемый OT-to-data пайплайн без управляющих команд оборудованию.
- История работы станков стала доступна для мониторинга, исследований и ML-экспериментов.