---
title: tpdDiangosticGenerator
---

# ⚙️ tpdDiangosticGenerator

La classe **tpdDiangosticGenerator** è il cuore pulsante del sistema diagnostico. Si occupa di **generare automaticamente** i modelli diagnostici e i pulsanti di navigazione per diverse componenti hardware e di sicurezza del progetto.

Con questa classe, la configurazione e la gestione della diagnostica diventano semplici, rapide e centralizzate.

---

## 🚦 Panoramica generale

Il generatore lavora su due fronti principali:

- **Modelli diagnostici**: rappresentazioni strutturate di assi, alimentatori, sicurezza, ecc.
- **Pulsanti di navigazione**: bottoni che permettono di accedere rapidamente alle schermate diagnostiche relative ai modelli.

---

## 🛠️ Metodi principali

| Metodo                | Descrizione                                                                                             | Note                              |
|-----------------------|-------------------------------------------------------------------------------------------------------|----------------------------------|
| `GenerateALL()`       | Genera **tutti** i modelli e i pulsanti, invocando i metodi specifici sottostanti.                    | Metodo “one-shot”                 |
| `GenerateAllModels()` | Invoca la generazione di tutti i modelli specifici (assi, PSU, sicurezza, ecc.)                       |                                  |
| `GenerateAllButtons()`| Invoca la generazione di tutti i pulsanti specifici per ogni modello diagnostico                      |                                  |
| `GenerateAxisModel()` | Genera i modelli degli assi sulla base dei tag `stStandardAxis`.                                      | Usa `AxisType`                   |
| `GenerateAxisButtons()`| Crea i pulsanti di navigazione collegati agli assi, puntando alla pagina diagnostica asse `_810_DiagAxis`|                                  |
| `GeneratePSUModel()`  | Genera i modelli per le unità di alimentazione (`PSUType`).                                           |                                  |
| `GeneratePSUButtons()`| Pulsanti per le PSU, con link alla pagina `_814_DiagPSU`.                                             |                                  |
| `GenerateDCSModel()`  | Genera modelli per i componenti di sicurezza `SafetyDCSType` basati su tag `DCI_STOP`.                |                                  |
| `GenerateCROUTModel()`| Modelli sicurezza `SafetyCROUTType` basati su tag `CONFIGURABLE_ROUT`.                                |                                  |
| `GenerateFPMSModel()` | Modelli sicurezza `SafetyFPMSType` basati su tag `FIVE_POS_MODE_SELECTOR`.                            |                                  |
| `GenerateSafetyButtons()`| Pulsanti per la sicurezza, puntano a `_830_DiagSafety`.                                            |                                  |

---

## 🧰 Come funziona “sotto il cofano”

Il fulcro del generatore è il metodo privato `GenerateModels`, che:

1. Cerca nelle cartelle di comunicazione i **tag** corrispondenti al tipo specificato (es. `stStandardAxis`).
2. Per ogni tag, crea (o trova) un **modello** corrispondente nella cartella modelli.
3. Imposta un nome leggibile e associa un puntatore al tag originale.

Analogamente, `GenerateButtons` crea per ogni modello un pulsante di navigazione nella pagina diagnostica dedicata, utilizzando un template di pulsante personalizzato.

---

## 💡 Funzioni di supporto utili

- `ExtractReadableName(string variableName)`: estrae un nome utente-friendly da un nome di variabile tecnica, inserendo spazi e capitalizzando correttamente.  
  _Es.:_ `"Axis_X1"` → `"X 1"`

---

# 🔍 In Depth: Funzioni di tpdDiangosticGenerator

---

### `GenerateALL()`

> **Descrizione:**  
> Metodo principale “one-shot” che rigenera **tutti i modelli diagnostici** e **tutti i pulsanti di navigazione** in un solo colpo.  
> È pensato per un uso “a caldo” dopo modifiche estese ai tag o alla struttura del progetto.

> **Dettagli tecnici:**  
> Invoca internamente `GenerateAllModels()` e `GenerateAllButtons()`, orchestrando così la generazione completa della diagnostica.

> **Esempio d’uso:**  
> ```csharp
> diagnosticGenerator.GenerateALL();
> ```

> **Nota da interfaccia Optix:**  
> È possibile eseguire questo metodo cliccando con il tasto destro sull’oggetto **design time NetLogic** o sul suo genitore e selezionando **Execute GenerateALL**.

---

### `GenerateAllModels()`

> **Descrizione:**  
> Chiama i generatori specifici per ogni categoria di modello diagnostico (assi, PSU, sicurezza), in modo ordinato e modulare.

> **Modelli generati:**  
> - Assi (Axis)  
> - Alimentatori (PSU)  
> - Componenti di sicurezza (DCS, CROUT, FPMS)

---

### `GenerateAllButtons()`

> **Descrizione:**  
> Genera i pulsanti di navigazione associati ai modelli diagnostici appena creati, suddivisi per categoria (assi, PSU, sicurezza).

---

### `GenerateAxisModel()`

> **Descrizione:**  
> Scansiona i tag di tipo `stStandardAxis` presenti nei driver di comunicazione e genera i modelli `AxisType` corrispondenti.

> **Dettagli:**  
> Imposta la proprietà `AxisPointer` del modello con il riferimento al tag originale.

---

### `GenerateAxisButtons()`

> **Descrizione:**  
> Per ogni modello asse generato, crea un pulsante di navigazione che punta alla schermata diagnostica asse `_810_DiagAxis`.

---

### `GeneratePSUModel()`

> **Descrizione:**  
> Genera i modelli `PSUType` per tutti i tag di tipo `stPowerSupply` trovati, collegandoli opportunamente.

---

### `GeneratePSUButtons()`

> **Descrizione:**  
> Crea i pulsanti di navigazione per ogni modello PSU, collegati alla pagina `_814_DiagPSU`.

---

### `GenerateDCSModel()`

> **Descrizione:**  
> Genera modelli diagnostici per i componenti di sicurezza `SafetyDCSType` basandosi sui tag `DCI_STOP`.

---

### `GenerateCROUTModel()`

> **Descrizione:**  
> Genera modelli `SafetyCROUTType` per tag `CONFIGURABLE_ROUT` correlati ai sistemi di sicurezza configurabili.

---

### `GenerateFPMSModel()`

> **Descrizione:**  
> Genera modelli `SafetyFPMSType` basati sui tag `FIVE_POS_MODE_SELECTOR`, tipici di selettori modalità a 5 posizioni.

---

### `GenerateSafetyButtons()`

> **Descrizione:**  
> Crea i pulsanti di navigazione per tutti i modelli di sicurezza, puntando alla schermata `_830_DiagSafety`.

---

### `ExtractReadableName(string variableName)`

> **Descrizione:**  
> Estrae un nome leggibile e “user-friendly” da un nome tecnico di variabile.  
> Ad esempio: `"Axis_X1"` diventa `"X 1"`.

> **Come funziona:**  
> - Prende l’ultima parte dopo l’ultimo underscore  
> - Inserisce spazi prima di lettere maiuscole o cifre  
> - Formattta la stringa con la prima lettera maiuscola, il resto minuscolo

---

### `GenerateModels(string modelFolderPath, string tagTypeName, Type modelType, string pointerVariableName)`

> **Descrizione:**  
> Metodo generico interno per creare i modelli diagnostici.  
> - Cerca nelle cartelle di comunicazione i tag con il tipo specificato.  
> - Per ciascun tag, crea o recupera un modello corrispondente nella cartella modelli.  
> - Imposta il nome leggibile e il puntatore al tag originale.

---

### `GenerateButtons(string modelFolderPath, string diagnosticPagePath)`

> **Descrizione:**  
> Per ogni modello nella cartella indicata, crea (o riusa) un pulsante di navigazione nella pagina diagnostica specificata.  
> Usa un template di pulsante predefinito per mantenere l’uniformità grafica e funzionale.

---

### `CreateModel(TagStructure tag, Type modelType, Folder modelsFolder)`

> **Descrizione:**  
> Crea un nuovo oggetto modello con il nome del tag e del tipo specificato, e lo inserisce nella cartella dei modelli.

---

### `PopulateModel(IUAObject model, TagStructure tag, string pointerVariableName)`

> **Descrizione:**  
> Riempie il modello con un nome leggibile e imposta la variabile puntatore con il NodeId del tag originale.

---

### `CreateButton(string browseName, ScreenType diagnosticScreen)`

> **Descrizione:**  
> Crea un nuovo pulsante di navigazione utilizzando il template `tpButtNavigationDiagnostic`, lo aggiunge al layout della schermata diagnostica e lo restituisce per ulteriori configurazioni.

---

