# tpPopulateIONetworkDisplay

# 🖥️ tpPopulateIONetworkDisplay

La classe tpPopulateIONetworkDisplay è una NetLogic che si occupa di comporre e mostrare nella UI la diagnostica completa di tutti gli IO rack remoti presenti nel sistema.
Questa classe raccoglie i dati dai dispositivi remoti configurati e crea dinamicamente i pannelli di visualizzazione per ciascun rack IO.

## 🚦 Panoramica generale

La logica si basa su:

- Un folder `CommDrivers` contenente i `TagStructure` relativi agli IO rack remoti.
- Un layout UI (`IONodesDisplay` di tipo `ColumnLayout`) dove vengono aggiunti dinamicamente i pannelli rappresentanti ogni IO rack.
- La comunicazione con ogni pannello remoto, che a sua volta usa la logica tpPopulateIORack per popolare i dettagli dello rack.

## 🛠️ Funzionamento principale

Elemento | Descrizione
--- | ---
`Populate()` | Metodo pubblico esportato che avvia un task asincrono per la composizione dinamica della UI.
`populateTask()` | Metodo che esegue la scansione dei tag di tipo `TagStructure` e costruisce i pannelli remoti.
`getRemoteIONodes(UAReference r)` | Metodo helper che crea un pannello remoto per ogni rack IO e ne avvia il popolamento UI.

## 🔍 In Depth: Funzioni di tpPopulateIONetworkDisplay

### `Populate()`

> Descrizione:
> Metodo esportato per avviare la composizione della diagnostica IO in modo asincrono, evitando il blocco del thread UI.

### `populateTask()`

> Descrizione:

> 1. Recupera il folder `CommDrivers` contenente i tag strutturati degli IO rack.
> 2. Pulisce il layout UI `IONodesDisplay` per prepararlo a contenere i nuovi pannelli.
> 3. Costruisce un array con i nomi dei tag attesi (`AB:1734_{slot}SLOT:I:0` da 1 a 64).
> 4. Filtra i nodi di tipo `TagStructureType` corrispondenti ai nomi attesi.
> 5. Per ciascun nodo valido, richiama il metodo `getRemoteIONodes` per creare il pannello remoto.

### `getRemoteIONodes(UAReference r)`

> Descrizione:

> 1. Ottiene il nodo `TagStructure` di destinazione dal riferimento passato.
> 2. Estrae il nome del dispositivo remoto (`remoteIOName`).
> 3. Crea un pannello (`PanelType`) figlio del pannello `RemoteIO`, con nome uguale al dispositivo remoto.
> 4. Imposta la variabile `RemoteIOName` del pannello appena creato con il nome del dispositivo remoto.
> 5. Aggiunge il pannello al layout `IONodesDisplay`.
> 6. Effettua una pausa di 250ms (necessaria per problemi di sincronizzazione con dispositivi Rockwell).
> 7. Invoca il metodo `Populate()` della NetLogic `PopulateIORack` contenuta all’interno del pannello per popolare i dettagli.

## ⚠️ Note importanti

- La classe presuppone che i dispositivi remoti e i relativi tag strutturati siano correttamente configurati nel folder `CommDrivers`.
- La sincronizzazione e il caricamento dei pannelli sono gestiti con una breve pausa, necessaria per garantire la corretta inizializzazione su dispositivi Rockwell.
- Ogni pannello remoto utilizza la logica tpPopulateIORack per il popolamento dei dettagli del rack.

Se vuoi vedere come funziona il popolamento di ogni singolo rack IO, dai un’occhiata alla documentazione di tpPopulateIORack.