# abijith0/plc_scada_demo_mes architecture

> Architecture diagram of the GitHub repository abijith0/plc_scada_demo_mes, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/abijith0/plc_scada_demo_mes
- Repository: https://github.com/abijith0/plc_scada_demo_mes

## Overview

This repository delivers a deployable Ignition SCADA/MES project for a tank-control process. The main workflow carries PLC tag data through Kepware OPC UA to the Ignition Gateway, where it supports the Perspective operator interface and exception-based MySQL historian logging; operator inputs are routed back toward the PLC. The README documents the project export’s contents and system connections, but no project source excerpts are available, so internal wiring beyond those documented relationships is omitted.

Main entry points: [`SmartFactory_MES_2026-02-22_1410.zip`](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip) (Ignition Gateway)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ot["Field Control"]
  node_plc["CODESYS PLC"]
  node_kepware["Kepware OPC UA"]
end

subgraph group_gateway["Supervisory Gateway"]
  node_ignition["Ignition Gateway"]
  node_tags["Tag Configurations"]
end

subgraph group_interface["Operator Interface"]
  node_hmi["Perspective Client"]
  node_controls["Operator Controls"]
  node_trends["PV/CV Trends"]
  node_alarms["Level Alarms"]
  node_prompts["Operator Prompts"]
end

subgraph group_historian["Historian"]
  node_historian["Historian Connections"]
  node_mysql[("MySQL Historian")]
end

node_operator(("Operator"))

node_plc -->|"sends tag data"| node_kepware
node_kepware -->|"OPC UA tags"| node_ignition
node_ignition -->|"serves via HTTPS/WebSockets"| node_hmi
node_operator -->|"uses"| node_hmi
node_hmi -->|"accepts input"| node_controls
node_controls -->|"sends operator values"| node_ignition
node_ignition -->|"routes control"| node_plc
node_ignition -->|"routes tag data"| node_historian
node_historian -->|"exception logs"| node_mysql
node_ignition -->|"provides PV/CV data"| node_trends
node_ignition -->|"provides level state"| node_alarms
node_ignition -->|"provides process state"| node_prompts

click node_ignition "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"
click node_tags "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"
click node_hmi "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"
click node_controls "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"
click node_trends "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"
click node_alarms "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"
click node_prompts "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"
click node_historian "https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_plc,node_kepware toneBlue
class node_ignition,node_tags toneAmber
class node_hmi,node_controls,node_trends,node_alarms,node_prompts toneMint
class node_historian,node_mysql toneRose
class node_operator toneIndigo
```

## Components

### Field Control

- **CODESYS PLC**
- **Kepware OPC UA**

### Supervisory Gateway

- [Ignition Gateway](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`
- [Tag Configurations](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`

### Operator Interface

- [Perspective Client](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`
- [Operator Controls](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`
- [PV/CV Trends](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`
- [Level Alarms](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`
- [Operator Prompts](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`

### Historian

- [Historian Connections](https://github.com/abijith0/plc_scada_demo_mes/blob/main/SmartFactory_MES_2026-02-22_1410.zip): `SmartFactory_MES_2026-02-22_1410.zip`
- **MySQL Historian**

### Other components

- **Operator**

## Connections

- CODESYS PLC → Kepware OPC UA: sends tag data
- Kepware OPC UA → Ignition Gateway: OPC UA tags
- Ignition Gateway → Perspective Client: serves via HTTPS/WebSockets
- Operator → Perspective Client: uses
- Perspective Client → Operator Controls: accepts input
- Operator Controls → Ignition Gateway: sends operator values
- Ignition Gateway → CODESYS PLC: routes control
- Ignition Gateway → Historian Connections: routes tag data
- Historian Connections → MySQL Historian: exception logs
- Ignition Gateway → PV/CV Trends: provides PV/CV data
- Ignition Gateway → Level Alarms: provides level state
- Ignition Gateway → Operator Prompts: provides process state
