Engineering Work

Industrial PLC Data Platform

Technology Stack

  • Python
  • Mitsubishi MC/SLMP
  • PLC
  • TCP/UDP
  • SQLite
  • ClickHouse
  • Grafana
  • FastAPI
  • systemd
  • Docker

Problem

Production equipment exposed thousands of low-level PLC addresses, but the data was not available as a reliable history for analytics or machine-learning work. Collection had to remain strictly read-only and tolerate unstable industrial network conditions.

What I built

  • Implemented edge collectors for several Mitsubishi PLC machines using MC/SLMP batch reads over TCP and UDP.
  • Separated PLC polling from batched ClickHouse writes and added watchdog/systemd recovery for long-running collection.
  • Built Grafana dashboards and a read-only FastAPI monitoring layer over the collected telemetry.

Architecture

PLC → edge collector → buffered batches → ClickHouse → Grafana / monitoring API / ML datasets

Collectors used machine-specific YAML signal catalogs while sharing the same polling, validation and storage approach. Local buffering was used where required to isolate acquisition from temporary upstream failures.

Scale

Individual collectors covered 738 and 1,186 signals, alongside a larger catalog spanning thousands of PLC addresses across multiple production machines.

Result

  • Established a reusable OT-to-data pipeline without sending control commands to equipment.
  • Made machine history available for monitoring, investigation and downstream ML experiments.