Rilegatoria: Introduzione
- Per iniziare
Training
Il Rilegatura è il passaggio che collega il Vista 3D (oggetti grafici sulla mappa) al DOM delle attrezzature (entità aziendali supervisionate). In termini concreti, creiamo legami stabili tra un oggetto visivo e un dispositivo immersivo, così che qualsiasi azione o dato (stato, variabile, allarme) influenzi la buona rappresentazione visiva — e viceversa (selezione, focus, schede dell'equipaggiamento).
Modello Immersivo di Oggetti: rappresentare fedelmente la realtà
Il Modello Oggetto Immersivo mira a tradurre, senza distorsione, la realtà operativa di un sito nel sistema. Immersive si basa su un MCD (modello dati concettuale) per garantire un Rappresentanza Esatto e attori utilizzabili Professioni (ascensori, sonde, veicoli, telecamere, ecc.) e attori Tecniche (protocolli, variabili, stati, eventi) che saranno monitorati. Comprendere questi attori a monte è essenziale: è proprio questa analisi che rende possibile Trasformazione Fonti commerciali e Traduce correttamente nel modello di oggetti Immersive.
Perché questa modellazione è essenziale
- Fedeltà al terreno: Un oggetto digitale corrisponde a un oggetto reale (o a un aggregato definito), senza ambiguità.
- Interoperabilità: dati eterogenei (CMMS, BMS, IoT, file) sono unificati in un'unica struttura.
- Tracciabilità e supervisione: Ogni dato, evento o allarme è associato all'oggetto "giusto".
- Scalabilità: un MCD chiaro facilita estensioni (nuove famiglie, nuove proprietà, nuovi siti).
Panoramica del modello
Immersive organizza le entità attorno a quattro concetti chiave: Famiglia di attrezzature, Istanza di Equipaggiamento, Proprietà/Handle e Ambito.
Famiglia di attrezzature
A Famiglia descrive un tipo omogeneo di oggetti (ad esempio:Ascensore, Sensore di temperatura, Veicolo). Definisce il Struttura (proprietà standard, variabili, semantica) e funge da modello per le sue istanze.
Istanza di Equipaggiamento
A Istanza è un pezzo di attrezzatura in cemento appartenente a una singola famiglia. Esempio: Ascensore "ATR5910" dell'edificio B della fabbrica Bidule. Le istanze portano l'identità, la posizione, e collegamenti di supervisione.
Proprietà / Manici
Un corpo espone Proprietà (valori configurati) e Manici (punti dati dinamici pubblicato dal Hub). Le maniglie rappresentano lo stato, le misurazioni o i dati di allarme dell'apparecchiatura (ad esempio: Difetto della porta di atterraggio, Piano attuale, Porta aperta/chiusa).
Anche una famiglia può dichiara i Mangli. Questi nomi di famiglia sono Eredità da tutti i corpi di questa famiglia, che garantiscono una base comune (nomi, tipi, semantica) e semplifica notevolmente scripting e integrazione.
Ambito
A Ambito Raggruppa i corpi secondo una logica Professione (team di risposta, tipo di attività) oppure Geografia (sito, edificio, piano, area). La stessa attrezzatura può appartenere a diversi telescopi per riflettere diversi punti di vista operativi (ad esempio, "Manutenzione ascensori", "Edificio B").
Eredità delle maniglie (Caso → Famiglia)
- Contratto Dati Comune: Impostare i handle a livello di famiglia crea un'API stabile per tutte le istanze.
- Riduzione delle lacune: Meno variazioni di nome/tipo, meno sforzo di mappatura e test.
- Scalabilità: Ogni istanza può aggiungere handle specifici se necessario (senza rompere il contratto base).
- Scripting semplificato: Gli script possono prendere di mira i handle di famiglia assumendo la loro presenza su tutte le istanze.
Relazioni strutturali e regole
- Istanze → Famiglia : 1 famiglia include N istanze (cardinalità 1..*).
- → Famiglia dei Handle : i nickli della famiglia sono Eredità da tutti i corpi.
- Manici → Istanza : Un'istanza può aggiungere i propri handle (specifici) oltre all'eredità.
- Estensioni di Scopes ↔ : N↔N relazione permettendo raggruppamenti flessibili e multipli.
Sicurezza e perimetri
Il Famiglie di attrezzature e il Ambiti sono Garantibile : possiamo controllare chi vede, chi configura o chi gestisce un perimetro/famiglia. Questa granularità di accesso è cruciale per compartimentare gli usi (ad esempio, operatori, manutenzione, sicurezza, gestione) e rispetto delle responsabilità.
Trasformare la conoscenza aziendale in un modello immersivo
- Identifica gli attori (oggetti reali da supervisionare) e il loro Attributi Utile.
- Definizione delle famiglie corrispondenti ai tipi effettivamente osservati; Elenca le proprietà e i handle attesi.
- Istanziare ogni attrezzatura in calcestruzzo (identità, posizione, appartenenza agli ambiti).
- Dati cartografici (protocolli, API, file) ai handle delle istanza.
- Valida la tracciabilità (un evento = un oggetto esatto) e si aggiustare il MCD se necessario.
Esempio riassunto
Famiglia : Ascensore → Procedimenti : "ATR5910" (Edificio B) → Manici : DoorFault, DoorState, Pavimento → Ambiti : "Manutenzione ascensori", "Edificio B".
Migliori pratiche
- Denominazione delle scuderie (ID, famiglie, nickni) per evitare pause durante le evoluzioni.
- Repository condivisi (siti, edifici, aree) per garantire coerenza trasversale.
- Handle espliciti (tipo, unità, semantica) per facilitare le regole di scripting e l'interfaccia utente.
- Ambiti rilevanti per riflettere usi reali (operazione, sicurezza, manutenzione, gestione).
- Controlli regolari (copertina, orfani, duplicati) per mantenere la qualità del modello.
Binding — modello di esempio (BuildingSensorSimulator)
Per illustrare il Binding 3D ↔ DOM, ci affidiamo al progetto di esempio BuildingSensorSimulator. Immaginiamo di lavorare per un Società di gestione condominiale : è necessario Attrezzature di importazione in Immersive e quindi Elenco Il Famiglie, il Istanze e il Manici che fungerà da contratto dati per il vincolamento.
Promemoria
Il progetto BuildingSensorSimulator, il cui codice sorgente è il seguente:
- 📦 BuildingSensorSimulator — v1.0 • 1,8 MB • ZIP
simula un insieme di sensori e apparecchiature che supportano i vari tutorial nelle nostre pagine dedicate agli sviluppatori della soluzione Immersive.
Questo progetto, dopo analisi, istanza e crea una serie di apparecchiature che possono essere determinate dopo l'analisi del codice sorgente per chi padroneggia il linguaggio C#:
private void Seed()
{
var now = DateTime.UtcNow;
int lastId = 0;
int NextId() => ++lastId;
//function for simple device with one variable
Device Single(string name, string type, string unit, string value, int? fixedId = null)
{
var id = fixedId ?? NextId();
return new Device
{
Id = id,
Name = name,
Type = type,
Value = value, // valeurs normalisées en string
Unit = unit,
TimestampUtc = now
};
}
//function for elevator
Device Elevator(string name, int? fixedId = null)
{
var id = fixedId ?? NextId();
return new Device
{
Id = id,
Name = name,
Type = "elevator",
Variables =
[
new() { Name = "floor", Path = $"floor", Kind = "numeric", Unit = null, Value = "0", TimestampUtc = now },
new() { Name = "state", Path = $"state", Kind = "enum", Unit = null, Value = "Idle", TimestampUtc = now },
new() { Name = "door", Path = $"door", Kind = "enum", Unit = null, Value = "Closed", TimestampUtc = now },
]
};
}
//function for garage door
Device GarageDoor(string name, int? fixedId = null)
{
var id = fixedId ?? NextId();
return new Device
{
Id = id,
Name = name,
Type = "garageDoor",
Variables =
[
new() { Name = "door", Path = $"door", Kind = "enum", Value = "Closed", TimestampUtc = now },
new() { Name = "obstacle", Path = $"obstacle", Kind = "bool", Value = "false", TimestampUtc = now },
]
};
}
// ---------------------------------------
Devices.AddRange(
[
Single("Temp S1", "sensor", "°C", "27.5"),
Single("Parking Humidity", "humidity", "%", "50"),
Single("Corridor Light Level", "light", "lux", "300"),
Single("Office Presence", "presence", "bool","0"),
Single("Main Electric Counter", "energy", "kWh", "1250"),
Single("Smoke Detector", "smoke", "bool","0"),
Single("Parking Temperature", "temperature","°C", "21"),
]);
// Rooms supplémentaires (temp + humidity)
foreach (var room in new[] {101, 102, 103, 104, 201, 202, 203, 204, 301, 302, 303, 304 })
{
Devices.Add(Single($"Room {room} Temperature", "temperature", "°C", "21"));
Devices.Add(Single($"Room {room} Humidity", "humidity", "%", "50"));
}
// 5 détecteurs de fumée
for (int i = 1; i <= 5; i++)
Devices.Add(Single($"Smoke Detector S{i}", "smoke", "bool", "0"));
//start id farther for complex devices
lastId = 101;
Devices.Add(Elevator("Lift A"));
Devices.Add(Elevator("Lift B"));
Devices.Add(GarageDoor("Garage G1"));
}
Non devi conoscere questo codice per questo tutorial. Ma se vuoi creare un twin digitale di questo esempio di associazione condominiale, è necessario sapere quali oggetti dovranno essere supervisionati. Pertanto, il seguente punto elenca tutti gli attori Immersive da creare, indipendentemente dal fatto che siano:
- Famiglia di attrezzature
- Istanza di Equipaggiamento
- Manico
Famiglie di attrezzature (offerte)
L'esempio di sindacato di co-proprietà stabilisce le seguenti famiglie di oggetti:
- Ascensore (ascensore)
- GarageDoor (porta del garage)
- Sensore di temperatura
- UmiditySensor
- LightSensor
- PresenceSensor
- EnergyCounter
- Rilevatore di fumo
Come promemoria, il Le famiglie possono segnalare i nick (base comune): queste manici sono Eredità per tutte le loro istance, che standardizza scripting e interfaccia utente (stessi nomi, stessi tipi).
Istanze simulate (estratto)
Ascensori e porte del garage
- Ascensore :
Lift A,Lift B - GarageDoor :
Garage G1
Sensori a valore singolo
- Sensore di temperatura :
Temp S1,Parking Temperature,Room 101 Temperature,Room 102 Temperature,Room 103 Temperature,Room 104 Temperature,Room 201 Temperature,Room 202 Temperature,Room 203 Temperature,Room 204 Temperature,Room 301 Temperature,Room 302 Temperature,Room 303 Temperature,Room 304 Temperature - UmiditySensor :
Parking Humidity,Room 101 Humidity,Room 102 Humidity,Room 103 Humidity,Room 104 Humidity,Room 201 Humidity,Room 202 Humidity,Room 203 Humidity,Room 204 Humidity,Room 301 Humidity,Room 302 Humidity,Room 303 Humidity,Room 304 Humidity - LightSensor :
Corridor Light Level - PresenceSensor :
Office Presence - EnergyCounter :
Main Electric Counter - Rilevatore di fumo :
Smoke Detector,Smoke Detector S1…S5
Handle di famiglia (ereditati per ipotenze)
Ascensore
| Percorso | Gentilezza | Unità | Descrizione | |
|---|---|---|---|---|
| Manico | Elevator/Floor |
Numerico | — | Piano attuale (0, 1, 2 ...) |
| Manico | Elevator/State |
enum | — | Stato: Minimo, Trasferimento, Allarme… |
| Manico | Elevator/Door |
enum | — | Porta: Open / Chiuso |
GarageDoor
| Manico | Gentilezza | Unità | Descrizione |
|---|---|---|---|
GarageDoor/Door |
enum | — | Posizione della porta: Open / Chiuso |
GarageDoor/Obstacle |
bool | — | Ostacolo rilevato (sicurezza) |
Sensore di temperatura
| Manico | Gentilezza | Unità | Descrizione |
|---|---|---|---|
Temperature/Value |
Numerico | °C | Temperatura misurata |
UmiditySensor
| Manico | Gentilezza | Unità | Descrizione |
|---|---|---|---|
Humidity/Value |
Numerico | % | Umidità relativa |
LightSensor
| Manico | Gentilezza | Unità | Descrizione |
|---|---|---|---|
Light/Level |
Numerico | lux | Livello di luce |
PresenceSensor
| Manico | Gentilezza | Unità | Descrizione |
|---|---|---|---|
Presence/State |
bool | — | Presenza rilevata (1) / no (0) |
EnergyCounter
| Manico | Gentilezza | Unità | Descrizione |
|---|---|---|---|
Energy/Total |
Numerico | kWh | Indice dei consumi |
Rilevatore di fumo
| Manico | Gentilezza | Unità | Descrizione |
|---|---|---|---|
Smoke/Alarm |
bool | — | Allarme fumo (vero/falso) |
Per ogni oggetto 3D, memorizza un equipmentRef stabile (o una mappatura) verso l'istanza Immersive. Per quanto riguarda la sceneggiatura,
ascolta il Nick di famiglia (legacy) per applicare stili/animazioni/avvisi genericamente a tutte le istanze
della stessa famiglia.
Download delle fonti
- 📦 BuildingSensorSimulator — v1.0 • 1,8 MB • ZIP