77 lines
2.6 KiB
Markdown
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
|