Files
Samuele Locatelli d93ca42384 Update todo da DS4
2026-06-24 13:32:06 +02:00

2.6 KiB

PlcVanguard — Analisi e piano correzioni

Stato: tutte le correzioni completate.

1. CPU Type Bug (S71500 invece di S7300) FIXED

File: PLCService.cs Causa: Doppia registrazione DI in Program.cs:

  • AddSingleton<ConnParam>(connParam) con S7300
  • Configure<ConnParam>("ConnParam", cfg => ...) named options

PLCService.GetState() usava IOptions<ConnParam> che si legava al named options "ConnParam". Senza un Configure<ConnParam>(...) unnamed, leggeva i default della classe: CpuType.S71500.

Fix: PLCService ora usa ConnParam singleton direttamente, eliminato IOptions<>.

2. Hardcoded "S7-1500" in Dashboard.razor FIXED

File: Dashboard.razor Righe:

  • <LivePanel PlcType="S7-1500" → ora usa @cpuType
  • PLC: Siemens S7-1500 → ora usa Siemens @cpuType

3. PlcHostedService in piu — DA DECIDERE (lasciato)

File: src/PlcVanguard.Core/PLC/PlcHostedService.cs Non rimosso in attesa di tua decisione.

4. Persistenza DB100 su ogni poll — FIXED

File: PlcStateBroadcaster.cs Modificato:

  • OnValue() persiste SOLO per eventi DB101 (check su e.AreaId)
  • PersistIfElapsedAsync() filtra via kvp.Key.StartsWith("DB100.")
  • Broadcast SignalR rimane per TUTTI i valori (live view funziona)

5. State.razor: da polling Timer → SignalR FIXED

File: State.razor Riscritto per usare StateManager direttamente:

  • Sostituito il polling ogni 2s con sottoscrizione agli eventi ValueChanged / ConnectionStateChanged
  • InvokeAsync() per marshalling sul thread UI di Blazor
  • Eliminato System.Threading.Timer
  • Fix: @inject PLCService (non IPlcService)

6. Miglior meccanismo di scambio dati live — GIA' IMPLEMENTATO

SignalR + StateManager:

  • PlcStateBroadcaster → hub SignalR per client esterni (altre pagine)
  • State.razor → si aggancia direttamente a StateManager (Blazor Server)
  • Doppio binario: live view via eventi + SignalR per client remoti

Flusso dati attuale

PLC → S7PlcService (IPlcReader)
        ↓
  PlcPollerService (HostedService, poll 1s)
        ↓
  StateManager (stato in-memory + eventi)
        ↓
  PlcStateBroadcaster (ascolta ValueChanged)
        ↓
  IHubContext<PlcHub> → SignalR → client remoti
        ↓
  State.razor (Blazor Server, diretto a StateManager)
        ↓
  Persistence (solo DB101, non DB100)

Riepilogo file modificati

  1. PLCService.cs — fix CPU type
  2. Dashboard.razor — hardcoded S7-1500 → @cpuType
  3. PlcStateBroadcaster.cs — filtro persistenza DB100
  4. State.razor — polling → eventi real-time