Bindung: Einführung
- Erste Schritte
Training
Die Bindung ist der Schritt, der die verbindet. 3D-Ansicht (grafische Objekte auf der Karte) an die DOM der Ausrüstung (beaufsichtigte Geschäftseinheiten). Konkret schaffen wir stabile Verbindungen zwischen einem visuellen Objekt und einem immersiven Gerät, sodass jede Aktion oder jede Daten (Zustand, Variable, Alarm) die gute visuelle Darstellung beeinflusst – und umgekehrt (Auswahl, Fokus, Ausrüstungsblätter).
Immersives Objektmodell: realitätsgetreue Darstellung der Realität
Die Immersives Objektmodell zielt darauf ab, die betriebliche Realität eines Standorts ohne Verzerrung in der System. Immersives basiert auf einer MCD (konzeptionelles Datenmodell) zur Sicherstellung eines Repräsentation Genau und benutzbare Akteure Berufe (Aufzüge, Sonden, Fahrzeuge, Kameras usw.) und Schauspieler Techniken (Protokolle, Variablen, Zustände, Ereignisse), die überwacht werden. Das Verständnis dieser Akteure stromaufwärts ist unerlässlich: Diese Analyse macht es möglich, Transformation Geschäftsquellen und Übersetzen korrekt im Immersiven Objektmodell.
Warum diese Modellierung unerlässlich ist
- Treue zum Terrain: Ein digitales Objekt entspricht einem realen Objekt (oder einem definierten Aggregat) ohne Mehrdeutigkeit.
- Interoperabilität: heterogene Daten (CMMS, BMS, IoT, Dateien) sind in einer einzigen Struktur vereint.
- Rückverfolgbarkeit und Aufsicht: Jedes Datenstück, Ereignis oder jede Warnung ist dem "richtigen" Objekt zugeordnet.
- Skalierbarkeit: ein klares MCD erleichtert Erweiterungen (neue Familien, neue Immobilien, neue Standorte).
Modellübersicht
Immersive organisiert Entitäten um vier Schlüsselkonzepte: Gerätefamilie, Ausrüstungsinstanz, Eigenschaften/Handles und Umfang.
Gerätefamilie
A Familie beschreibt einen homogenen Objekttyp (z. B.:Aufzug, Temperatursensor, Fahrzeug). Es definiert das Struktur (Standardeigenschaften, Variablen, Semantik) und dient als Vorlage für seine Instanzen.
Ausrüstungsinstanz
A Instanz ist ein Betongerät, das zu einer einzigen Familie gehört. Beispiel: Aufzug "ATR5910" vom Bau B der Bidule-Fabrik. Die Instanzen tragen Identität, Standort, und Überwachungslinks.
Eigenschaften / Handles
Ein Körper entblößt Eigenschaften (konfigurierte Werte) und Griffe (dynamische Datenpunkte veröffentlicht vom Hub). Die Griffe stellen den Status, die Mess- oder Alarmdaten der Ausrüstung dar (z. B.: Defekt der Landungstür, Aktueller Boden, Tür offen/geschlossen).
Eine Familie kann auch declare Handles. Diese Familien-Handles sind Vermächtnis von allen Körpern dieser Familie, was eine gemeinsame Basis garantiert (Namen, Typen, Semantik) und vereinfacht das Skripten und die Integration erheblich.
Umfang
A Umfang Gruppiert Körper nach einer Logik Beruf (Einsatzteam, Art der Aktivität) oder Geografie (Standort, Gebäude, Etage, Bereich). Die gleiche Ausrüstung kann zu mehreren Zielfernrohren gehören, um zu reflektieren verschiedene Betriebsperspektiven (z. B. "Aufzugswartung", "Gebäude B").
Vererbung der Handles (Familie → Instanz)
- Gemeinsamer Datenvertrag: Das Setzen von Handles auf Familienebene schafft eine stabile API für alle Instanzen.
- Verringerung von Lücken: Weniger Namens- und Typvariationen, weniger Mapping und Testaufwand.
- Skalierbarkeit: Jede Instanz kann bei Bedarf spezielle Handles hinzufügen (ohne den Basisvertrag zu brechen).
- Vereinfachtes Skripting: Skripte können Familien-Handles anvisieren, indem sie deren Präsenz in allen Instanzen annehmen.
Strukturelle Beziehungen und Regeln
- Familie → Fälle : 1 Familie umfasst N Instanzen (Kardinalität 1..*).
- → Verwaltet Familie : Familien-Handles sind Vermächtnis von allen Körpern.
- Instanz-→-Handles : Eine Instanz kann zusätzlich zur Vererbung eigene (spezifische) Handles hinzufügen.
- Scopes-Instanzen ↔ : N N-Beziehung,↔die flexible und mehrere Gruppierungen ermöglicht.
Sicherheit und Perimeter
Die Ausrüstungsfamilien und die Teleskope sind Sicherstellend : Wir können kontrollieren, wer sieht, wer konfiguriert Oder wer einen Perimeter/Familie betreibt. Diese Granularität des Zugangs ist entscheidend, um die Nutzung zu trennen (z. B. Bediener, Wartung, Sicherheit, Management) und Verantwortungen respektieren.
Umwandlung von Geschäftswissen in ein immersives Modell
- Identifizieren Sie die Akteure (reale Objekte, die überwacht werden sollen) und ihre Eigenschaften nützlich.
- Familiendefinition entsprechend den tatsächlich beobachteten Typen; Listen Sie erwartete Immobilien und Handles auf.
- Instanziiert jede konkrete Ausrüstung (Identität, Ort, Zugehörigkeit zu Scopes).
- Kartendaten (Protokolle, APIs, Dateien) an die Instanz-Handles an.
- Rückverfolgbarkeit validieren (ein Ereignis = ein exaktes Objekt) und bei Bedarf die MCD anpassen.
Zusammengefastes Beispiel
Familie : Aufzug → Verlauf : "ATR5910" (Gebäude B) → Griffe : DoorFault, DoorState, Boden → Umfang : "Aufzugswartung", "Gebäude B".
Best Practices
- Stallbenennung (Ausweise, Familien, Griffe) um Pausen während der Evolution zu vermeiden.
- Gemeinsame Repositorien (Standorte, Gebäude, Bereiche), um eine funktionsübergreifende Kohärenz zu gewährleisten.
- Explizite Handles (Typ, Einheit, Semantik), um Skriptregeln und UI zu erleichtern.
- Relevante Anwendungsbereiche um reale Anwendungen (Betrieb, Sicherheit, Wartung, Management) widerzuspiegeln.
- Regelmäßige Kontrollen (Umschlag, Waisen, Duplikate), um die Qualität des Modells zu erhalten.
Binding — Beispielmodell (BuildingSensorSimulator)
Zur Veranschaulichung der Bindende 3D-DOM ↔, stützen wir uns auf das Beispielprojekt BuildingSensorSimulator. Stellen wir uns vor, wir arbeiten für eine Eigentumsverwaltungsgesellschaft : Es ist notwendig Importausrüstung in Immersive und daher Liste Die Familien, die Fälle und die Griffe Das dient als verbindlicher Datenvertrag.
Erinnerung
Das BuildingSensorSimulator-Projekt, dessen Quellcode wie folgt ist:
- 📦 BuildingSensorSimulator — v1.0 • 1,8 MB • ZIP
simuliert einen Satz von Sensoren und Geräten, die die verschiedenen Tutorials auf unseren Seiten unterstützen, die den Entwicklern der Immersive Lösung gewidmet sind.
Dieses Projekt instanziiert und erstellt nach Analyse eine Reihe von Geräten, die nach Analyse des Quellcodes für diejenigen, die die C#-Sprache beherrschen, bestimmt werden können:
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"));
}
Für dieses Tutorial musst du mit diesem Code nicht vertraut sein. Wenn Sie jedoch einen digitalen Zwilling dieses Beispiels einer Eigentumswohnung erstellen möchten, ist es notwendig zu wissen, welche Objekte beaufsichtigt werden müssen. Daher listet der folgende Punkt alle zu erschaffenden Immersiv-Akteure auf, unabhängig davon, ob sie:
- Gerätefamilie
- Ausrüstungsinstanz'
- Handle
Ausrüstungsfamilien (angeboten)
Das Beispielsyndikat des Miteigentums stellt folgende Familien von Objekten dar:
- Aufzug (Aufzug)
- GarageDoor (Garagentor)
- TemperatureSensor
- Feuchtigkeitssensor
- LightSensor
- PresenceSensor
- EnergyCounter
- Rauchmelder
Zur Erinnerung: Die Familien können Aufträge melden (Gemeinsamer Basis): Diese Griffe sind Vermächtnis durch all ihre Instanzen, die Skripting und UI standardisiert (gleiche Namen, gleiche Typen).
Simulierte Instanzen (Extrakt)
Aufzüge & Garagentore
- Aufzug :
Lift A,Lift B - GarageDoor :
Garage G1
Einwertsensoren
- TemperatureSensor :
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 - Feuchtigkeitssensor :
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 - Rauchmelder :
Smoke Detector,Smoke Detector S1…S5
Familien-Handles (von Instanzen übernommen)
Aufzug
| Verlauf | Freundlich | Einheit | Beschreibung | |
|---|---|---|---|---|
| Handle | Elevator/Floor |
Numerisch | — | Aktueller Untergrund (0, 1, 2 ...) |
| Handle | Elevator/State |
ENUM | — | Status: Leerlauf, Verschieben, Alarm… |
| Handle | Elevator/Door |
ENUM | — | Tür: Offen / Geschlossen |
GarageDoor
| Handle | Freundlich | Einheit | Beschreibung |
|---|---|---|---|
GarageDoor/Door |
ENUM | — | Türposition: Offen / Geschlossen |
GarageDoor/Obstacle |
Bool | — | Erkanntes Hindernis (Sicherheit) |
TemperatureSensor
| Handle | Freundlich | Einheit | Beschreibung |
|---|---|---|---|
Temperature/Value |
Numerisch | °C | Gemessene Temperatur |
Feuchtigkeitssensor
| Handle | Freundlich | Einheit | Beschreibung |
|---|---|---|---|
Humidity/Value |
Numerisch | % | Relative Luftfeuchtigkeit |
LightSensor
| Handle | Freundlich | Einheit | Beschreibung |
|---|---|---|---|
Light/Level |
Numerisch | lux | Lichtpegel |
PresenceSensor
| Handle | Freundlich | Einheit | Beschreibung |
|---|---|---|---|
Presence/State |
Bool | — | Anwesenheit erkannt (1) / nein (0) |
EnergyCounter
| Handle | Freundlich | Einheit | Beschreibung |
|---|---|---|---|
Energy/Total |
Numerisch | kWh | Konsumindex |
Rauchmelder
| Handle | Freundlich | Einheit | Beschreibung |
|---|---|---|---|
Smoke/Alarm |
Bool | — | Rauchmelder (wahr/falsch) |
Für jedes 3D-Objekt speichere ein equipmentRef stabil (oder als Mapping) zur immersiveren Instanz. Auf der Skriptseite,
Hören Sie auf die Familien-Griffe (legacy), um Stile/Animationen/Alerts generisch auf alle Instanzen anzuwenden
aus derselben Familie.
Quellen herunterladen
- 📦 BuildingSensorSimulator — v1.0 • 1,8 MB • ZIP