Цифровые двойники и граф двойников

В этой статье описывается, какие цифровые двойники находятся в контексте 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.

Вот так выглядят визуализации:

Screenshot of Azure Digital Twins Explorer showing sample models and twins.

Создание с помощью 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: