HydroCore OS SCADA · SE4A PoliMi
IMPIANTO ONLINE
Prototipo SCADA · Trattamento acque

Il controllo
dell'impianto,
come software.

HydroCore OS è un prototipo SCADA per un impianto di potabilizzazione: legge un simulatore PLC, storicizza le misure, valuta gli allarmi, rimanda i setpoint all'impianto ed espone lo stato del processo tramite un'interfaccia HMI nel browser.

.NET 10 · REST + JWT React HMI SQLite historian OPC-UA · PLC sim TCP 4840 RBAC · 4 ruoli
Esplora il sistema Repository GitHub Diagrammi UML
LINEA DI PROCESSO · MAIN TREATMENT SINOTTICO D'IMPIANTO SORGENTE DATI · SIMULATA
5
Servizi .NET / HMI
15
Tabelle DB
9
Sensori
9
Viste KPI
4
Ruoli RBAC
3
Deliverable
01 · Architettura

Architettura a livelli, orientata agli eventi

Cinque processi collaborano attraverso un database SQLite condiviso. Il campo pubblica letture, il runtime SCADA le storicizza e valuta gli allarmi, l'API le espone e l'HMI le mostra. I setpoint viaggiano in senso opposto.

L4Presentazione
HMI React (SPA · 5500)Login · JWTSynopticTrends & KPIAlarm console
L3Applicazione / Controllo
HydroCore.Api (REST · 5080)Alarm EngineSetpoint BridgeHistorianCommsWatchdog
L2Dominio
ProcessUnitSensor · ReadingAlarm · RecipeBatch · TicketRBAC
L1Campo / Infrastruttura
PLC Simulator (OPC-UA · 4840)Repository EF CoreSQLite (WAL)Audit log

Percorso di lettura

PLC SimulatorValori di campo · TCP 4840
readings
HydroCore.ServerHistorian · Alarm Engine
insert
SQLitePersistenza condivisa
EF Core
HydroCore.ApiREST · JWT · RBAC · 5080
polling
HMI browserReact · porta 5500

I setpoint percorrono la catena inversa: HMI → API → DB → Setpoint Bridge → PLC. Il browser dialoga solo con l'API, mai col Server o col simulatore.

HydroCore.Api:5080

API REST, autenticazione JWT, ruoli e permessi, endpoint applicativi (sensori, allarmi, batch, ticket, utenti).

C# · ASP.NET Core · EF Core
HydroCore.Serverruntime

Ingestione sensori, historian, motore allarmi con strategie e bridge dei setpoint verso il campo.

C# · Repository · Watchdog
HydroCore.PlcSimulator:4840

Simulatore di impianto e PLC su TCP. Genera i valori di campo e riceve i target dei setpoint.

C# · OPC-UA style
HydroCore.BatchMES

Simulatore MES: inserisce ordini di produzione pianificati nella coda dei batch.

C# · scheduled_batches
frontend:5500

HMI statica React, compilata nel browser con runtime Babel vendorizzato. Nessuno step di build.

React · Babel · vanilla

02 · Modello di dominio

Un dominio industriale, modellato con cura

Il nucleo di dominio ruota attorno alle unità di processo, ai sensori, agli allarmi, alle ricette, ai batch di produzione, ai ticket di manutenzione e al controllo d'accesso basato sui ruoli.

ProcessUnit

Unità di processo con macchina a stati e sensori collegati.

Sensor · Reading

9 sensori: portata, pH, torbidità, cloro, durezza, livello, pressione.

Alarm

Stato ACTIVE/ACK/CLEARED e severità INFO/WARNING/CRITICAL.

Recipe · Setpoint

Setpoint e bande di allarme legate alla ricetta attiva.

Batch

Produzione RUNNING → COMPLETED/ABORTED, con KPI associati.

Ticket

Manutenzione OPEN → ASSIGNED → IN_PROGRESS → RESOLVED → CLOSED.

PlantComponent

Pompe, filtri, dosatori con ore di esercizio e soglie di manutenzione.

User · Role

Utenti, ruoli e permessi con audit log delle operazioni.


03 · Design pattern

Pattern che rendono il sistema estensibile

Le scelte progettuali seguono pattern classici, applicati dove aggiungono valore reale: regole d'allarme intercambiabili, ciclo di vita esplicito delle unità, persistenza astratta.

Strategy verificato

Ogni sensore possiede una regola che decide se un valore è in allarme. IAlarmStrategy è implementata da HighThresholdStrategy e LowThresholdStrategy: il motore non cambia al variare della regola.

State verificato

ProcessUnit gestisce il proprio ciclo di vita con TransitionTo() tra gli stati IDLE, RUNNING, FAULT e MAINTENANCE.

Observer design

Le letture dei sensori si propagano ai consumatori — motore allarmi, historian, HMI — che reagiscono solo agli eventi rilevanti.

Repository verificato

Persistenza astratta dietro IAlarmRepository, IHistorianRepository, ISetpointRepository; QueuedAlarmRepository accoda le scritture.

HydroCore.Server / Logic / IAlarmStrategy.cs
namespace HydroCore.Logic{
  // Strategy pattern: each sensor owns a rule
  // deciding whether a value is in alarm.
  public interface IAlarmStrategy{
    // True if the value is outside the bounds.
    bool Check(double value);
    string GetAlarmMessage(string sensorId,
                            double value);
    // Metadata for DB persistence.
    string Severity { get; }  // INFO|WARNING|CRITICAL
    double Threshold { get; }
  }
}

04 · Diagrammi UML

I diagrammi del Design Document

Artefatti reali del Deliverable 2: class diagram, vista dei componenti, sequenze e sinottici. Clicca per ingrandire.


05 · Funzionamento

I flussi principali del sistema

Dai casi d'uso della RASD: allarmi, produzione a batch, manutenzione e indicatori di prestazione, con i vincoli operativi che li legano.

UC · Allarmi

Ciclo di vita dell'allarme

Una lettura fuori soglia genera un allarme. L'operatore lo riconosce; per una severità critica occorre completare la manutenzione prima del reset.

ReadingCheck()ACTIVEACKNOWLEDGEDCLEARED
UC · Produzione

Ricette & batch

La ricetta definisce setpoint e bande d'allarme. Un allarme critico attivo blocca l'avvio di un nuovo batch con HTTP 423 Locked.

RecipePENDINGRUNNINGCOMPLETED423 se critico
UC · Manutenzione

Ticket di manutenzione

Ticket manuali o generati da un guasto, con priorità, assegnazione e audit log fino alla chiusura.

OPENASSIGNEDIN_PROGRESSRESOLVEDCLOSED
UC · Analitica

KPI & OEE su 24h

OEE = Disponibilità × Prestazione × Qualità. Nove viste analitiche: resa idrica, stress idraulico, stabilità di processo, MTTR, salute componenti.

AvailabilityPerformanceQualityOEE 24h
Macchina a stati · Unità di processo
IDLE RUNNING FAULT MAINTENANCE IDLE
Controllo d'accesso · 4 ruoli
OPERATOR

Monitoraggio impianto, riconoscimento allarmi, modifica dei setpoint consentiti.

MAINTENANCE

Gestione dei ticket di manutenzione e risoluzione dei guasti alle unità.

PLANT_MANAGER

Gestione di batch, ricette, utenti e decisioni operative.

ENGINEERING

Analisi dei dati di processo, taratura delle ricette e ispezione del sistema.

Prototipo accademico. HydroCore usa un PLC simulato e un database SQLite locale. Non è pensato per un impianto reale né per un'esposizione su Internet: questa pagina ne è la vetrina, non l'istanza in esecuzione.


06 · Deliverable

Tre consegne, un sistema completo

Dal documento dei requisiti all'implementazione con test, seguendo il percorso del corso Software Engineering for Automation.

01

RASD

Requirements Analysis and Specification Document: obiettivi, requisiti, casi d'uso e modello del mondo.

Consegnato
02

Design Document

Architettura, viste a componenti, class diagram, sequenze e macchine a stati.

Consegnato
03

Implementazione

Codice sorgente .NET + React, schema e seed del database, KPI view e test xUnit.

Consegnato