---
title: 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`](./tpPopulateIORack.md) 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**](./tpPopulateIORack.md) 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](./tpPopulateIORack.md).

---

