---
title: tpPopulateIORack
---

# ⚙️ tpPopulateIORack

La classe **tpPopulateIORack** è una NetLogic che si occupa di popolare dinamicamente la UI con le schede IO (Input/Output) di un rack remoto, basandosi su una configurazione YAML e strutture dati presenti nel progetto Factory Talk Optix.

> ⚠️ **Nota:** La configurazione YAML viene deserializzata in oggetti C# di tipo **IOCardConfig** (definiti in un file dedicato, [IOCardConfig.md](./IOCardConfig.md)).  
> Questa classe rappresenta la struttura dei dati usata per leggere la configurazione e differenziare schede normali e safety.

---

## 🚦 Panoramica generale

La logica si basa su:

- Un file di configurazione YAML (`io_card_config.yaml`) che descrive le caratteristiche e tipologie delle schede IO, corrispondente alla classe `IOCardConfig`.  
- Folder di progetto contenenti i template grafici (di tipo `RectangleType`) per le schede IO da istanziare.  
- Un folder `CommDrivers` che contiene le variabili remote corrispondenti ai dispositivi IO fisici.  
- Un layout UI (`RemoteIOBackplane`) dove vengono aggiunte dinamicamente le schede.  

---

## 🛠️ Funzionamento principale

| Elemento                | Descrizione                                                                                          |
|-------------------------|----------------------------------------------------------------------------------------------------|
| `Populate()`            | Metodo pubblico esportato per avviare il popolamento tramite task asincrono a lunga durata.         |
| `LoadConfiguration()`   | Legge e deserializza il file YAML con la configurazione delle schede IO in oggetti `IOCardConfig`. |
| `InitializeNodeTypes()` | Recupera i template grafici (RectangleType) per ogni tipo di scheda configurata.                    |
| `PopulateIOCards()`     | Crea e aggiunge i nodi scheda nel layout UI, sincronizzando l’ordine con un meccanismo di semafori. |

# 🔍 In Depth: Funzioni di tpPopulateIORack

---


### `Populate()`

> **Descrizione:**  
> Avvia il processo di popolamento della UI.  
> Esegue in background la lettura della configurazione, l’inizializzazione dei template e la creazione dinamica delle schede IO.

---

### `LoadConfiguration()`

> **Descrizione:**  
> Legge il file YAML di configurazione (`io_card_config.yaml`) e lo deserializza in oggetti [IOCardConfig](./IOCardConfig.md) per uso interno.

---

### `InitializeNodeTypes()`

> **Descrizione:**  
> Carica i template grafici (`RectangleType`) associati a ciascun tipo di scheda definito nella configurazione YAML.

---

### `PopulateIOCards()`

> **Descrizione:**  
> Per ogni slot del rack (da 1 a 64), verifica la presenza di dispositivi remoti e crea le schede IO normali o di sicurezza corrispondenti, aggiungendole al layout UI.

---

### `TryCreateAndAddNormalCard()`

> **Descrizione:**  
> Tenta di creare e aggiungere una scheda IO normale basata sulla configurazione e i dati trovati nel folder `CommDrivers`.

---

### `TryCreateAndAddSafetyCard()`

> **Descrizione:**  
> Tenta di creare e aggiungere una scheda IO di sicurezza, gestendo input e output associati.

---

### `MakeCardAndAddToLayout()`

> **Descrizione:**  
> Metodo interno che istanzia la scheda IO, imposta le proprietà comuni e la inserisce ordinatamente nel layout UI, rispettando la sincronizzazione con i semafori.

---

### `SetCardCommonProperties()`

> **Descrizione:**  
> Imposta variabili comuni della scheda (come indice, nome, colori LED) per assicurare la corretta rappresentazione grafica e funzionale.

---


## 🗂️ Esempio di configurazione YAML (`io_card_config.yaml`)

```yaml
normalIoCards:
  AB:1734_DI8:C:0:
    type: IB8
    nodeType: IOCard_8B
    iODirection: I
    colors:
      card: 0xff1b83df
      led_on: 0xff00fa7e
      led_off: 0xff0f4d29

  AB:1734_DOB8:C:0:
    type: OB8
    nodeType: IOCard_8B
    iODirection: O
    colors:
      card: 0xff40aa84
      led_on: 0xffea2e2e
      led_off: 0xff500f0f

safetyIoCards:
  AB:1734_IB8S_Safety2:I:0:
    outputType: AB:1734_IB8S:O:0
    type: IB8S
    nodeType: IOCard_8BS
    iODirection: I
    colors:
      card: 0xffe4564b
      led_on: 0xff00fa7e
      led_off: 0xff0f4d29
