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

77 lines
2.6 KiB
Markdown

# 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