Построение условий - пример
Цель: синхронизировать реальный объект и его цифрового двойника без потери данных.
В системе мониторинга создан цифровой двойник реального объекта. Реальный объект может быть в одном из двух состояний: включен или выключен. Изменять состояния объекта могут несколько авторизованных операторов. При этом в данные цифрового объекта записывается информация не только о новом состоянии объекта, но и об операторе, который произвел это изменение.
Возможна ситуация, когда связь с реальным объектом потеряна, и в это время его состояние было изменено. Однако при синхронизации не передаётся информация о том, кто изменил состояние объекта.
Пошаговое руководство:
Шаг 1: в секции Мониторинг настроить тип проверки MQTT-сенсор
Проверка возвращает следующие метрики:
-
state
- включен (1) или выключен (0) объект, -
id
- последний оператор, взаимодействовавший с объектом.
Метрика msg
- текстовое сообщение, создаётся с помощью правил
формирования данных.
Шаг 2: настроить смену состояния объекта оператором
Если в объект приходит информация с id, не равным 0, то происходит изменение всех параметров на полученные значения. В сообщении указывается, что состояние изменено авторизованным оператором.
[
{
"conditions": [
{
"_field": {
"name": "new.message.id",
"value": {
"_neq": "0"
}
}
}
],
"actions": [
{
"type": "set",
"field": "message.state",
"value": "{{new.message.state}}"
},
{
"type": "set",
"field": "message.id",
"value": "{{new.message.id}}"
},
{
"type": "set",
"field": "message.msg",
"value": "Оператор поменял состояние объекта"
}
]
},
...
]
Шаг 3: настроить включение объекта после обрыва и восстановления связи
Если в объект приходит информация с id, равным 0, то необходимо сравнить в каком состоянии находится цифровой двойник. В том случае, если оно отличается от состояния, которое пришло в сообщении, происходит изменение всех параметров на полученные значения и в сообщении указывается, что состояние объекта изменено неизвестным оператором. Так как в условиях нет возможности напрямую сравнить текущее значение с вновь полученным, эта проверка выполняется двумя блоками.
Для выполнения первого блока действий состояние объекта должно быть равно 0, и вновь пришедшее состояние должно быть равно 1:
[
...
{
"conditions": [
{
"_field": {
"name": "new.message.id",
"value": {
"_eq": "0"
}
}
},
{
"_field": {
"name": "new.message.state",
"value": {
"_eq": "1"
}
}
},
{
"_field": {
"name": "current.message.state",
"value": {
"_eq": "0"
}
}
}
],
"actions": [
{
"type": "set",
"field": "message.state",
"value": "{{new.message.state}}"
},
{
"type": "set",
"field": "message.id",
"value": "{{new.message.id}}"
},
{
"type": "set",
"field": "message.msg",
"value": "Объект был включен"
}
]
},
...
]
Шаг 4: настроить выключение объекта после обрыва и восстановления связи
Для выполнения второго блока действий состояние объекта должно быть равно 1, и вновь пришедшее состояние должно быть равно 0:
[
...
{
"conditions": [
{
"_field": {
"name": "new.message.id",
"value": {
"_eq": "0"
}
}
},
{
"_field": {
"name": "new.message.state",
"value": {
"_eq": "0"
}
}
},
{
"_field": {
"name": "current.message.state",
"value": {
"_eq": "1"
}
}
}
],
"actions": [
{
"type": "set",
"field": "message.state",
"value": "{{new.message.state}}"
},
{
"type": "set",
"field": "message.id",
"value": "{{new.message.id}}"
},
{
"type": "set",
"field": "message.msg",
"value": "Объект был включен"
}
]
}
]