2.6 KiB
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 S7300Configure<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@cpuTypePLC: Siemens S7-1500→ ora usaSiemens @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 sue.AreaId)PersistIfElapsedAsync()filtra viakvp.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(nonIPlcService)
6. Miglior meccanismo di scambio dati live — GIA' IMPLEMENTATO
SignalR + StateManager:
PlcStateBroadcaster→ hub SignalR per client esterni (altre pagine)State.razor→ si aggancia direttamente aStateManager(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
PLCService.cs— fix CPU typeDashboard.razor— hardcoded S7-1500 → @cpuTypePlcStateBroadcaster.cs— filtro persistenza DB100State.razor— polling → eventi real-time