Цифровые двойники и граф двойников
В этой статье описывается, какие цифровые двойники находятся в контексте Azure Digital Twins и как связи между ними могут формировать граф двойников. В решении Azure Digital Twins сущности вашей среды представлены цифровыми двойниками. Цифровой двойник — это экземпляр одной из пользовательских моделей. Его можно связать с другими цифровыми двойниками с помощью отношений, чтобы сформировать граф двойника. Этот граф является представлением всей вашей среды.
Совет
Название Azure Digital Twins относится к соответствующей службе Azure в целом. Понятие "цифровые двойники" или просто "двойники" обозначает отдельные узлы двойников в экземпляре службы.
Digital Twins
Прежде чем вы сможете создать цифровой двойник в экземпляре Azure Digital Twins, необходимо загрузить модель в эту службу. Модель описывает набор свойств и связей, которые может иметь конкретный двойник, помимо прочего. Дополнительные сведения о типах данных, определенных в модели, см. в статье Настраиваемые модели.
После создания и отправки модели клиентское приложение может создать экземпляр типа. Это и есть цифровой двойник. Например, после создания модели этажа можно создать один или несколько цифровых двойников, которые будут использовать этот тип (Floor), например двойник типа Floor с именем GroundFloor, еще один двойник с именем Floor2 и т. д.
Примечание.
Цифровые двойники в Azure Digital Twins отличаются от двойников устройств в Центр Интернета вещей. Двойники устройства Центра Интернета вещей часто ориентированы на описание аспектов и возможностей самого устройства, а двойники в Azure Digital Twins — это более концептуальные представления, в которых можно хранить определенные пользователем аналитические сведения об устройстве или множестве связанных устройств.
Устройства в Центр Интернета вещей могут быть подключены к Azure Digital Twins в рамках комплексного решения, представляющего устройство в разных службах.
Отношения: граф цифровых двойников
Двойники объединяются в граф с помощью отношений. Отношения, которыми может обладать двойник, определяются в соответствующей модели.
Например, модель Floor может определить связь, предназначенную contains
для двойников типа Room. В этом определении Azure Digital Twins позволяет создавать contains
связи от любого двойника Пола к любому двойнику комнаты (включая двойников, которые относятся к подтипам комнаты).
В результате вы получите набор узлов (цифровых двойников), соединенных через ребра (отношения) на графе.
Визуализация
Azure Digital Twins Explorer — это визуальное средство для изучения данных в графе Azure Digital Twins. С помощью этого обозревателя можно просматривать, запрашивать и изменять модели, двойников и отношения.
Сведения о средстве Azure Digital Twins Explorer см. в статье Azure Digital Twins Explorer. Подробные инструкции по использованию его функций см. в статье Использование Azure Digital Twins Explorer.
Вот так выглядят визуализации:
Создание с помощью API
В этом разделе показан процесс создания цифровых двойников и отношений из клиентского приложения. Он содержит примеры пакета SDK для .NET, которые используют API DigitalTwins, чтобы обеспечить больше контекста в каждой из этих концепций.
Создание цифровых двойников
Ниже приведен фрагмент клиентского кода, в котором используются API DigitalTwins для создания экземпляра двойника типа Room с идентификатором twinId
, определяемым во время создания экземпляра.
Свойства двойника можно инициализировать при его создании или задать их позже. Чтобы создать двойника с инициализированными свойствами, создайте документ JSON, предоставляющий необходимые значения инициализации.
// 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("temperature")]
public double Temperature { get; set; }
[JsonPropertyName("humidity")]
public double 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
{
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 value: {response.Value.Temperature}");
}
}
Если вы не хотите использовать словарь, можно применить вспомогательный класс BasicDigitalTwin
, чтобы обеспечить более прямой процесс сохранения полей свойств в объекте "двойник". Дополнительные сведения о вспомогательном классе и примерах его использования см. в разделе "Создание цифрового двойника".
Примечание.
Хотя свойства двойника рассматриваются как необязательные и поэтому не должны быть инициализированы, при создании двойника необходимо задать какие-либо компоненты для двойника. Они могут быть пустыми объектами, но сами компоненты должны существовать.
Создание отношений
Ниже приведен пример клиентского кода, в котором используются API DigitalTwins для создания отношения между исходным и целевым цифровым двойником.
public async Task CreateRelationship(DigitalTwinsClient client)
{
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);
}
Создание двойников и связей в массовом режиме с помощью API импорта заданий
Вы можете передать много двойников и связей в одном вызове API с помощью API импорта заданий. Двойники и связи, созданные с помощью этого API, могут дополнительно включать инициализацию их свойств. Подробные инструкции и примеры, использующие этот API, см . в инструкциях массового импорта для двойников и связей.
Удаление элементов графа
Чтобы удалить определенные двойники и связи, используйте API Delete и DigitalTwins DeleteRelationship (также доступны в виде команд CLI и вызовов пакета SDK).
Чтобы удалить все модели, двойники и связи в экземпляре одновременно, используйте API удаления заданий.
Представления JSON элементов графа
Данные о цифровых двойниках и отношениях хранятся в формате JSON. Это означает, что результатом запроса графа двойника в экземпляре Azure Digital Twins будет представление JSON созданных вами цифровых двойников и отношений.
Формат JSON для цифрового двойника
У цифрового двойника, представленного в виде объекта JSON, имеются следующие поля:
Имя поля | Description |
---|---|
$dtId |
Пользовательская строка-идентификатор цифрового двойника |
$etag |
Стандартное поле HTTP, назначенное веб-сервером |
$metadata.$model |
Идентификатор интерфейса модели, характеризующего этот цифровой двойник |
$metadata.<property-name> |
Другие сведения о свойствах цифрового двойника |
$metadata.<property-name>.lastUpdateTime |
Дата и время обработки сообщения об обновлении свойства Azure Digital Twins |
$metadata.<property-name>.sourceTime |
Необязательное, записываемое свойство, представляющее метку времени при обнаружении обновления свойства в реальном мире. Это свойство можно записать только с помощью версии API и пакетов SDK Azure Digital Twins 2022-05-31, а значение должно соответствовать формату даты и времени ISO 8601. Дополнительные сведения об обновлении этого свойства см. в разделе Update a property's sourceTime. |
<property-name> |
Значение свойства в JSON (string , тип числа или объект) |
$relationships |
URL-адрес пути к коллекции отношений. Это поле отсутствует, если у цифрового двойника нет исходящих ребер отношений. |
<component-name> |
Объект JSON, содержащий значения свойств и метаданные компонента, аналогичные значениям свойств и метаданным корневого объекта. Этот объект существует, даже если у компонента нет свойств. |
<component-name>.$metadata |
Сведения о метаданных для компонента, аналогичные $metadata корневого уровня |
<component-name>.<property-name> |
Значение свойства компонента в JSON (string , тип числа или объект) |
Ниже приведен пример цифрового двойника, отформатированного как объект JSON. Этот двойник имеет два свойства, влажность и температура, а также компонент с именем Thermostat.
{
"$dtId": "myRoomID",
"$etag": "W/\"8e6d3e89-1166-4a1d-9a99-8accd8fef43f\"",
"$metadata": {
"$model": "dtmi:example:Room23;1",
"Humidity": {
"lastUpdateTime": "2021-11-30T18:47:53.7648958Z"
},
"Temperature": {
"lastUpdateTime": "2021-11-30T18:47:53.7648958Z"
}
},
"Humidity": 55,
"Temperature": 35,
"Thermostat": {
"$metadata": {}
}
Формат JSON для отношения
Отношение цифрового двойника, представленное в виде объекта JSON, имеет следующие поля:
Имя поля | Description |
---|---|
$relationshipId |
Пользовательская строка-идентификатор отношения. Эта строка уникальна в контексте исходного цифрового двойника, что также означает уникальность sourceId + relationshipId в контексте экземпляра Azure Digital Twins. |
$etag |
Стандартное поле HTTP, назначенное веб-сервером |
$sourceId |
Идентификатор исходного цифрового двойника |
$targetId |
Идентификатор целевого цифрового двойника |
$relationshipName |
Имя отношения |
<property-name> |
Дополнительно: значение свойства этого отношения в JSON (string , тип числа или объект) |
Ниже приведен пример отношения, отформатированного как объект JSON.
{
"$relationshipId": "relationship-01",
"$etag": "W/\"506e8391-2b21-4ac9-bca3-53e6620f6a90\"",
"$sourceId": "GroundFloor",
"$targetId": "Cafe",
"$relationshipName": "contains",
"startDate": "2020-02-04"
}
Следующие шаги
Узнайте, как управлять элементами графа с помощью API Azure Digital Twins.
Или см. сведения о запросах к графу двойника в Azure Digital Twins: