Digitala tvillingar och deras tvillingdiagram
Den här artikeln beskriver vad digitala tvillingar är i kontexten för Azure Digital Twins och hur relationer mellan dem kan bilda en tvillinggraf. I en Azure Digital Twins lösning representeras entiteterna i din miljö av digital twins. En digital tvilling är en instans av en av dina anpassade modeller. Den kan anslutas till andra digitala tvillingar via relationer för att bilda en tvillinggraf: den här tvillinggrafen är representationen av hela miljön.
Tips
"Azure Digital Twins" refererar till den här Azure-tjänsten som helhet. "Digital twin(s)" eller bara "twin(s)" refererar till enskilda tvillingnoder i din instans av tjänsten.
Digitala tvillingenheter
Innan du kan skapa en digital tvilling i din Azure Digital Twins-instans måste du ha en modell överförd till tjänsten. En modell beskriver bland annat uppsättningen egenskaper, telemetrimeddelanden och relationer som en viss tvilling kan ha. Informationstyper som definieras i en modell finns i Anpassade modeller.
När du har skapat och laddat upp en modell kan klientappen skapa en instans av typen . Den här instansen är en digital tvilling. När du till exempel har skapat en modell av Floor (Golv) kan du skapa en eller flera digitala tvillingar som använder den här typen (t.ex. en floor-type-tvilling med namnet Ground En annan som kallas Floor2 och så vidare).
Anteckning
Digitala tvillingar i Azure Digital Twins skiljer sig från enhetstvillingarna i IoT Hub. IoT Hub fokuserar ofta på att beskriva aspekter och funktioner i själva enheten, medan tvillingar i Azure Digital Twins är mer konceptuella representationer som kan lagra användardefinierade insikter om en enhet eller många relaterade enheter.
IoT Hub enhetstvillingarna kan anslutas till Azure Digital Twins som en del av en lösning från end-to-end som representerar enheter mellan tjänster.
Relationer: ett diagram över digitala tvillingar
Tvillingar ansluts till en tvillinggraf genom sina relationer. De relationer som en tvilling kan ha definieras som en del av modellen.
Modellen Floor kan till exempel definiera en contains-relation som riktar sig mot tvillingar av typen Room. Med den här definitionen Azure Digital Twins du skapa innehåller relationer från vilken golvtvilling som helst till valfri rumstvilling (inklusive tvillingar som är av rumsundertyper).
Resultatet av den här processen är en uppsättning noder (de digitala tvillingarna) som är anslutna via kanter (deras relationer) i en graf.
Visualisering
Azure Digital Twins Explorer är ett visuellt verktyg för att utforska data i Azure Digital Twins diagrammet. Du kan använda utforskaren för att visa, fråga och redigera modeller, tvillingar och relationer.
Mer information om Azure Digital Twins Explorer finns i Azure Digital Twins Explorer. Detaljerade anvisningar om hur du använder dess funktioner finns i Använda Azure Digital Twins Explorer.
Så här ser visualiseringen ut:
Skapa med API:erna
Det här avsnittet visar hur det ser ut att skapa digitala tvillingar och relationer från ett klientprogram. Den innehåller .NET-kodexempel som använder DigitalTwins-API:erför att ge mer kontext om vad som händer i vart och ett av dessa begrepp.
Skapa digitala tvillingar
Nedan visas ett kodfragment med klientkod som använder DigitalTwins-API:erna för att instansiera en tvilling av typen Room med en som definieras twinId under instansiering.
Du kan initiera egenskaperna för en tvilling när den skapas eller ange dem senare. Om du vill skapa en tvilling med initierade egenskaper skapar du ett JSON-dokument som innehåller nödvändiga initieringsvärden.
// Define a custom model type for the twin to be created
internal class CustomDigitalTwin
{
[JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinId)]
public string Id { get; set; }
[JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinETag)]
public string ETag { get; set; }
[JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinMetadata)]
public MyCustomDigitalTwinMetadata Metadata { get; set; } = new MyCustomDigitalTwinMetadata();
[JsonPropertyName("temperature")]
public double Temperature { get; set; }
[JsonPropertyName("humidity")]
public double Humidity{ get; set; }
}
internal class MyCustomDigitalTwinMetadata
{
[JsonPropertyName(DigitalTwinsJsonPropertyNames.MetadataModel)]
public string ModelId { get; set; }
[JsonPropertyName("temperature")]
public DigitalTwinPropertyMetadata Temperature { get; set; }
[JsonPropertyName("humidity")]
public DigitalTwinPropertyMetadata Humidity { get; set; }
}
// Initialize properties and create the twin
public class TwinOperationsCreateTwin
{
public async Task CreateTwinAsync(DigitalTwinsClient client)
{
// Initialize the twin properties
var myTwin = new CustomDigitalTwin
{
Metadata = { ModelId = "dtmi:example:Room;1" },
Temperature = 25.0,
Humidity = 50.0,
};
// Create the twin
const string twinId = "<twin-ID>";
Response<CustomDigitalTwin> response = await client.CreateOrReplaceDigitalTwinAsync(twinId, myTwin);
Console.WriteLine($"Temperature last updated on {response.Value.Metadata.Temperature.LastUpdatedOn}");
}
}
Du kan också använda en hjälpklass som heter för att lagra egenskapsfält i ett "tvillingobjekt" mer direkt, som ett alternativ till BasicDigitalTwin att använda en ordlista. Mer information om hjälpklassen och exempel på hur den används finns i avsnittet Skapa en digital tvilling i How-to: Manage digital twins(Så här hanterar du digitala tvillingar).
Anteckning
Tvillingegenskaper behandlas som valfria och behöver därför inte initieras, men alla komponenter i tvillingen måste anges när tvillingen skapas. De kan vara tomma objekt, men själva komponenterna måste finnas.
Skapa relationer
Här är lite exempel på klientkod som använder DigitalTwins-API:er för att skapa en relation från en digital tvilling (källtvillingen) till en annan digital tvilling (måltvillingen).
var rel = new BasicRelationship
{
TargetId = "myTargetTwin",
Name = "contains", // a relationship with this name must be defined in the model
// Initialize properties
Properties =
{
{ "active", true },
},
};
await client.CreateOrReplaceRelationshipAsync("mySourceTwin", "rel001", rel);
JSON-representationer av grafelement
Digitala tvillingdata och relationsdata lagras båda i JSON-format, vilket innebär att när du frågar tvillingdiagrammet i din Azure Digital Twins-instans blir resultatet en JSON-representation av digitala tvillingar och relationer som du har skapat.
JSON-format för digital tvilling
När den representeras som ett JSON-objekt visar en digital tvilling följande fält:
| Fältnamn | Beskrivning |
|---|---|
$dtId |
En sträng som tillhandahålls av användaren och som representerar ID:t för den digitala tvillingen |
$etag |
Standard-HTTP-fält som tilldelats av webbservern |
$conformance |
En uppräkning som innehåller överensstämmande status för den här digitala tvillingen (överensstämmande, icke-överensstämmande, okänd) |
<property-name> |
Värdet för en egenskap i JSON ( string , nummertyp eller objekt) |
$relationships |
URL:en för sökvägen till relationssamlingen. Det här fältet saknas om den digitala tvillingen inte har några utgående relationskanter. |
$metadata.$model |
[Valfritt] ID:t för modellgränssnittet som kännetecknar den här digitala tvillingen |
$metadata.<property-name>.desiredValue |
[Endast för skrivbara egenskaper] Önskat värde för den angivna egenskapen |
$metadata.<property-name>.desiredVersion |
[Endast för skrivbara egenskaper] Versionen av det önskade värdet |
$metadata.<property-name>.ackVersion |
Versionen som bekräftas av enhetsappen som implementerar den digitala tvillingen |
$metadata.<property-name>.ackCode |
[Endast för skrivbara egenskaper] Koden ack som returneras av enhetsappen som implementerar den digitala tvillingen |
$metadata.<property-name>.ackDescription |
[Endast för skrivbara egenskaper] Beskrivningen ack som returneras av enhetsappen som implementerar den digitala tvillingen |
<component-name> |
Ett JSON-objekt som innehåller komponentens egenskapsvärden och metadata, liknande dem för rotobjektet. Det här objektet finns även om komponenten inte har några egenskaper. |
<component-name>.<property-name> |
Värdet för komponentens -egenskap i JSON ( string , nummertyp eller -objekt) |
<component-name>.$metadata |
Metadatainformationen för komponenten liknar rotnivån $metadata |
Här är ett exempel på en digital tvilling formaterad som ett JSON-objekt:
{
"$dtId": "Cafe",
"$etag": "W/\"e59ce8f5-03c0-4356-aea9-249ecbdc07f9\"",
"Temperature": 72,
"Location": {
"x": 101,
"y": 33
},
"component": {
"TableOccupancy": 1,
"$metadata": {
"TableOccupancy": {
"desiredValue": 1,
"desiredVersion": 3,
"ackVersion": 2,
"ackCode": 200,
"ackDescription": "OK"
}
}
},
"$metadata": {
"$model": "dtmi:com:contoso:Room;1",
"Temperature": {
"desiredValue": 72,
"desiredVersion": 5,
"ackVersion": 4,
"ackCode": 200,
"ackDescription": "OK"
},
"Location": {
"desiredValue": {
"x": 101,
"y": 33,
},
"desiredVersion": 8,
"ackVersion": 8,
"ackCode": 200,
"ackDescription": "OK"
}
}
}
JSON-format för relation
När en relation från en digital tvilling representeras som ett JSON-objekt visas följande fält:
| Fältnamn | Beskrivning |
|---|---|
$relationshipId |
En sträng som tillhandahålls av användaren och som representerar ID:t för den här relationen. Den här strängen är unik i kontexten för den digitala källtvillingen, vilket också innebär att den är unik i sourceId + relationshipId kontexten för Azure Digital Twins instansen. |
$etag |
Standard-HTTP-fält som tilldelats av webbservern |
$sourceId |
ID för den digitala källtvillingen |
$targetId |
ID för den digitala måltvillingen |
$relationshipName |
Namnet på relationen |
<property-name> |
[Valfritt] Värdet för en egenskap för den här relationen i JSON ( string , nummertyp eller objekt) |
Här är ett exempel på en relation formaterad som ett JSON-objekt:
{
"$relationshipId": "relationship-01",
"$etag": "W/\"506e8391-2b21-4ac9-bca3-53e6620f6a90\"",
"$sourceId": "GroundFloor",
"$targetId": "Cafe",
"$relationshipName": "contains",
"startDate": "2020-02-04"
}
Nästa steg
Se hur du hanterar grafelement med Azure Digital Twin-API:er:
Du kan också lära dig mer om Azure Digital Twins för att få mer information: