Il mio edificio - Sensori di temperatura e umidità

Tutorial

Questo capitolo presenta un caso d'uso concreto per raggruppare sensori fisici e il miglioramento dei dati di temperatura nel gemello digitale. Illustra come lo scripting renda possibile unificare il display, formattare i valori e rafforzare la supervisione tramite difetti calcolati.

Nel nostro caso d'uso, i sensori di temperatura e umidità sono impiegati come due sensori aspetti fisici sul terreno. Tuttavia, dal punto di vista dell'utente finale, Queste due misure sono strettamente legate e devono essere consultate in modo unificato.

Per questo abbiamo scelto di raggruppare questi due sensori all'interno di un unico apparecchiatura. Immersiva, chiamata "Stanza", per rappresentare un pezzo in modo coerente nel gemello digitale.

Per la rappresentazione del sensore di temperatura nel gemello digitale, L'elemento centrale è il valore misurato. L'obiettivo principale è mettere in evidenza queste informazioni chiave vengono visualizzate direttamente nella bolla dell'equipaggiamento, offrendo così una lettura immediata e intuitiva.

Inoltre, i valori visualizzati saranno formattati con la loro unità per migliorare la leggibilità e la comprensione dei dati da parte dell'utente.

Infine, per rafforzare la supervisione, verrà aggiunto un difetto calcolato. Questo attiverà un allarme quando la temperatura supera una soglia predefinita, garantendo così una rapida rilevazione di situazioni anomale.

Obiettivi funzionali

  1. Unisci due sensori fisici (temperatura e umidità) all'interno della stessa apparecchiatura "Immersive Room"
  2. Visualizza la misurazione della temperatura direttamente nella bolla dell'apparecchiatura
  3. I valori del formatore includendo l'unità di misura
  4. Genera un allarme quando la temperatura supera una soglia stabilita

Prerequisiti

  • Creare uno script comportamentale legato alla famiglia Room
  • Combinando le stanze nel gemello digitale.

Visualizzazione della misurazione della temperatura nella bolla dell'equipaggiamento

Attraverso lo scripting JS, possiamo modificare le informazioni visibili nell'icona associata all'attrezzatura nel twin (Widget3D), Per farlo, basta aggiungere il Customize al nostro copione.

La proprietà che ci interessa è la stessa proprietà text del Widget3D come mostrato nel diagramma seguente.

La proprietà di testo del Widget3D usata per mostrare la temperatura.

L'accesso alla misurazione della temperatura avviene direttamente dall'oggetto equipment. Per farlo, basta recuperare la variabile di temperatura che è indicata per l'identificatore TEMP nella descrizione della nostra famiglia.

Qui viene usato il riferimento variabile, ma il nome del Température può essere anche utilizzato.

Adattamento del file Excel.

Script JS:

function Customize(equipment, widget2d, widget3d)
{
  // Récupération de la variable TEMP de l'équipement
  // Astuce : Une variable peut être récupérée via son nom (Température) ou sa référence (TEMP)
  let temperatureVar = equipment.GetVariable("TEMP");

  // Modification du texte par la valeur de la température (1 décimale) ajout et de l’unité
  widget3d.text = temperatureVar.AsFloat.toFixed(1) + "°C";
}

Una volta applicato lo script e l'applicazione riavviata, puoi vedere i cambiamenti.

Visualizzazione formattata della temperatura nella bolla dell'equipaggiamento della stanza.

Valori del modulo per visualizzare le unità

Le misurazioni dal campo a volte rappresentano quantità fisiche associate a un'unità di misura (Temperatura °C o °C, Velocità, Energia ...).

Queste misurazioni spesso hanno molti decimali, che non sono sempre rilevanti per l'utente.

Si raccomanda quindi di limitare il display a un singolo decimale per rendere le informazioni più chiare.

Confronto tra valori grezzi e valori formattati con unità.

Come mostrato nell'esempio sopra:

  • I valori grezzi (a sinistra) sono difficili da leggere.
  • Dopo la formattazione (a destra), i valori vengono arrotondati a un decimale e accompagnati dalla loro unità, il che rende più facile la lettura.

Saranno presentati due metodi complementari per raggiungere questo obiettivo:

  1. La configurazione a monte delle unità di misura, direttamente nel file Excel.

Questo approccio rende possibile standardizzare la visualizzazione dei dati non appena vengono integrati.

  1. Formattazione tramite lo script Behavior, che offre maggiore flessibilità

e permette di adattare dinamicamente il display (unità, numero di decimali) Se necessario.

Configura l'unità di misura da Excel

Quando si configurano i canali di misura di un apparecchiature dal file Excel, È possibile specificare l'unità di misura associata a ciascun canale.

  • Se non sono specificate unità, i valori vengono visualizzati così come in Immersive.

(esempio a sinistra)

  • Se un'unità è configurata, Immersive aggiunge automaticamente quell'unità accanto al valore

e limita la visualizzazione a un singolo decimale per maggiore leggibilità. (esempio a destra)

Nel nostro caso, configuriamo le unità Celsius e Pourcent nella colonna Unità per i canali Temperatura e Umidità.

Configura le unità di misura nel file Excel Immersive.

Formattazione della visualizzazione di una variabile da Scripting

In alcuni casi, è necessario modificare in modo più dettagliato il modo in cui una variabile ne mostra il valore. Per poter fare ciò, è necessario implementare un nuovo metodo di scripting JS Nel comportamento delle nostre attrezzature: GetFormattedData

Esempio:

// Fonction de formatage des variables
function GetFormattedData(equipment, variable)
{
    // Formatage spécifique selon la variable
    // Filtre par nom : variable.Name => "Temperature", "Humidity"
    // Filtre par référence : variable.NameKey => "TEMP", "HYGRO"
    switch (variable.NameKey)
    {
        case "TEMP" : return variable.AsFloat.toFixed(1) + " °C (formattage js)";
        case "HYGRO" : return variable.AsFloat.toFixed(1) + " % (formattage js)";
    }

    // Dans les autres cas on retourne une chaîne vide, le formattage est geré par défaut.
    return "";
}

Il risultato del nostro copione è il seguente:

Risultato dei valori di formattazione tramite script JS.

Generazione di un allarme nel caso in cui una soglia di temperatura venga superata

Nel resto del nostro scenario, vogliamo avvisare l'utente quando una temperatura supera una certa soglia affinché possa reagire rapidamente. Per farlo, definiremo un Avviso che sarà evidenziato direttamente nell'interfaccia.

La creazione e la revoca degli allerti avviene in due fasi.

  • Implementazione della funzione SetupEquipment per creare l'allarme.
  • Implementazione della funzione OnEquipmentChanged per il calcolo dell'allarme.

Creazione dell'allarme: Temperatura troppo alta

Per registrare un nuovo allarme su un apparecchiatura, viene utilizzata una chiamata alla funzione CreateStaticFault quando l'apparecchiatura si avvia. Ti permette di creare un canale nella categoria "Difetto" dell'apparecchiatura.

Script JS:

function SetupEquipment(equipment)
{
  // Création d'un nouveau défaut
    equipment.CreateStaticFault('Température trop élevée');
}

Calcolo di allerta: Temperatura troppo alta

L'allarme di superamento della soglia deve essere calcolato non appena il sensore di temperatura riceve un aggiornamento dei suoi valori, quindi aggiungiamo il calcolo nella funzione OnEquipmentChanged che è dedicata a questo compito.

Dopo aver recuperato le 2 variabili (misurazione e allarme) sulle nostre apparecchiature, dobbiamo solo implementare la business rule per generare il guasto e aggiornare l'avviso. Qui attiviamo il difetto "Temperatura troppo alta" se la nostra misurazione della temperatura ha ricevuto un valore dal server (IsConnected), e se il suo valore numerico (AsFloat) è superiore a 40.

Script JS:

function OnEquipmentChanged(equipment)
{
    // Récupération de la variable de température et d'alarme.
    var temperatureVar = equipment.GetVariable("TEMP");
    var temperatureTooHighVar = equipment.GetVariable("Température trop élevée");

    // L'alarme doit être déclenchée :
    //  * si la température est connectée
    //  * et si la valeur mesurée au dessus de 40°C.
    let isAboveThreshold = temperatureVar.IsConnected
                        && temperatureVar.AsFloat > 40;

    // On affecte la valeur calculée (de type boolean) à la variable d'alarme.
    temperatureTooHighvariable.AsBool = isAboveThreshold;
}

Una volta applicate, le parti con una temperatura superiore al valore soglia configurato vengono visualizzate con il difetto di temperatura troppo elevato.

Le stanze con una temperatura superiore al valore soglia configurato sono visualizzate con il difetto di temperatura troppo alto