# pamelinha7/empowerelas-libiec61850 architecture

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

- Interactive diagram: https://gitdiagram.com/pamelinha7/empowerelas-libiec61850
- Repository: https://github.com/pamelinha7/empowerelas-libiec61850

## Overview

EmPowerElas is a two-Raspberry-Pi IEC 61850 substation demonstrator. The Elipse E3 SCADA client connects to separate measurement/protection and bay-control servers: measurements are published and shown on LCDs, while SCADA commands actuate disconnectors and update breaker indicators; an LED strip makes communication visible. The README also documents transformer audio. Server excerpts are partial, so the graph preserves documented capabilities but omits unverified internal dispatch details.

Main entry points: [`empelas_prot/server_prot.c`](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_prot/server_prot.c) (Measurement server), [`empelas_ctrl/server_ctrl.c`](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/server_ctrl.c) (Bay control server), [`empelas_ctrl/static_model.c`](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/static_model.c) (IEC model), [`empelas_ctrl/empelas_ctrl.icd`](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/empelas_ctrl.icd) (IEC description)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scada["SCADA interface"]
  node_elipse["Elipse E3"]
end

subgraph group_measurement["Measurement and protection"]
  node_prot["Measurement server<br/>[server_prot.c]"]
  node_protmodel["Measurement model"]
end

subgraph group_control["Bay control"]
  node_ctrl["Bay control server<br/>[server_ctrl.c]"]
  node_ctrlmodel["IEC model<br/>[static_model.c]"]
  node_icd["IEC description<br/>[empelas_ctrl.icd]"]
end

subgraph group_display["Physical demonstration"]
  node_lcd["TC/TP LCDs"]
  node_audio["Transformer audio"]
  node_servos["Disconnector servos"]
  node_breakers["Breaker LEDs"]
  node_fiber["WS2811 fiber strip<br/>[server_ctrl.c]"]
end

node_operator(("SCADA operator"))

node_operator -->|"operates"| node_elipse
node_elipse -->|"reads measurements"| node_prot
node_prot -->|"publishes values"| node_elipse
node_prot -->|"updates values"| node_protmodel
node_prot -->|"displays readings"| node_lcd
node_prot -.->|"drives audio"| node_audio
node_elipse -->|"sends commands"| node_ctrl
node_ctrl -->|"serves model"| node_ctrlmodel
node_icd -->|"describes model"| node_ctrlmodel
node_ctrl -->|"moves"| node_servos
node_ctrl -->|"sets indicators"| node_breakers
node_ctrl -->|"animates traffic"| node_fiber

click node_prot "https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_prot/server_prot.c"
click node_protmodel "https://github.com/pamelinha7/empowerelas-libiec61850/tree/main/empelas_prot"
click node_ctrl "https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/server_ctrl.c"
click node_ctrlmodel "https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/static_model.c"
click node_icd "https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/empelas_ctrl.icd"
click node_fiber "https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/server_ctrl.c"

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_elipse toneBlue
class node_prot,node_protmodel toneAmber
class node_ctrl,node_ctrlmodel,node_icd toneMint
class node_lcd,node_audio,node_servos,node_breakers,node_fiber toneRose
class node_operator toneIndigo
```

## Components

### SCADA interface

- **Elipse E3**

### Measurement and protection

- [Measurement server](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_prot/server_prot.c): `empelas_prot/server_prot.c`
- [Measurement model](https://github.com/pamelinha7/empowerelas-libiec61850/tree/main/empelas_prot): `empelas_prot`

### Bay control

- [Bay control server](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/server_ctrl.c): `empelas_ctrl/server_ctrl.c`
- [IEC model](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/static_model.c): `empelas_ctrl/static_model.c`
- [IEC description](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/empelas_ctrl.icd): `empelas_ctrl/empelas_ctrl.icd`

### Physical demonstration

- **TC/TP LCDs**
- **Transformer audio**
- **Disconnector servos**
- **Breaker LEDs**
- [WS2811 fiber strip](https://github.com/pamelinha7/empowerelas-libiec61850/blob/main/empelas_ctrl/server_ctrl.c): `empelas_ctrl/server_ctrl.c`

### Other components

- **SCADA operator**

## Connections

- SCADA operator → Elipse E3: operates
- Elipse E3 → Measurement server: reads measurements
- Measurement server → Elipse E3: publishes values
- Measurement server → Measurement model: updates values
- Measurement server → TC/TP LCDs: displays readings
- Measurement server → Transformer audio: drives audio
- Elipse E3 → Bay control server: sends commands
- Bay control server → IEC model: serves model
- IEC description → IEC model: describes model
- Bay control server → Disconnector servos: moves
- Bay control server → Breaker LEDs: sets indicators
- Bay control server → WS2811 fiber strip: animates traffic
