Перекладка Modbus RTU в OPC UA

Добрый день, стоит следующая задача: из существующего устройства с Modbus RTU (не поддерживаемое) необходимо взять необходимые регистры и переложить с помощью Wiren Board 8.5 в протокол OPC UA для дальнейшей обработки этого протокола в Master Scada 4D.
Для имитации устройства используется Moxa Uport 1150 и Modbus Slave. Связь с имитацией и контроллером успешно настроена, видны изменения в отслеживаемых регистрах.
Далее в голову пришла идея прямой перекладки значения MQTT-тега регистра из устройства Modbus в протокол OPC UA без создания промежуточных переменных и скриптов. Тут возникла проблемка: в мастерскаде есть функция сканирования протокола OPC UA, с помощью которой можно автоматически получить необходимые теги. И вот по какой то причине в протоколе обнаруживается только название группы, которое создается при настройке протокола в веб-интерфейсе Wiren Board. (Ранее тестировалось использование OPC UA для передачи тегов виртуальных устройств контроллера и при сканировании были видны и группы и теги.)
Исходя из этого возникает несколько вопросов:

  1. Возможно ли реализовать такую прямую перекладку значений (Modbus RTU >>> Теги MQTT >>> OPC UA/
  2. Если такая возможность присутствует, то кажется, что проблема кроется в доступе на чтение или передачу. Подскажите где произвести настройку.
    Ниже скрины настройки протокола в Wiren Board и MS4D.

Для пояснения: Теги из группы Time_control принадлежат виртуальным устройствам, сканируются и полностью экспортируются в протокол. Теги из группы pop как раз таки перекладываются напрямую, сканируются, но при экспорте не видны

Здравствуйте!

Думаю, можно попробовать обернуть Modbus-каналы в виртуальное устройство и проверить будет ли читаться в OPC UA. Взять значение из устройства VENT_test/TEST_venTT (полученное по Modbus) и сделать его доступным в OPC UA через виртуальное устройство opc_virtual_mirror.

И так, попробовал следующий код, теперь виден виртуальный девайс с сигналами при сканировании, но перекладка из Modbus RTU в ячейки виртуального устройства не происходит. Подскажите в чем может быть проблема?
Код:
defineVirtualDevice(“opc_virtual_mirror_test”, {
title: “OPC UA Mirror”,
cells: {
temp: { type: “value”, value: 0, readonly: true },
hum: { type: “value”, value: 0, readonly: true },
setpoint: { type: “value”, value: 0, readonly: false },
fan_speed: { type: “value”, value: 0, readonly: false }
}
});

// Modbus → OPC UA (чтение)
var readMap = {
“/devices/VENT/controls/Состояние_установки”: “temp”,
“/devices/VENT/controls/Сигнал_внешней_тревоги”: “hum”
};

for (var reg in readMap) {
defineRule(“read_” + reg.replace(///g, ‘_’), {
whenChanged: reg,
then: function(newValue) {
dev[“opc_virtual_mirror_test/” + readMap[this.topic]] = newValue;
log("Updated " + readMap[this.topic] + " with " + newValue);
}
});
}

Также еще не понятно какой тип регистра мне выбрать в Wiren Board для “Input Registers”, тк в выпадающем списке нет подобного имени.

Также при попытке все-таки перекладки из RTU в TCP столкнулся с проблемой, что значение тегов из регистра Coils может только быть прочитано, но запись недоступна.


Значение “1” подано из Modbus Slave.

Значение “0” подано из Modbus Slave.
В обоих случаях недоступна запись со стороны протокола OPC UA.

Добрый день!

Попробую повторить на своем контроллере, если будет положительный результат сообщу.

У нас данный процесс в документации не описан, поэтому нет уверенности что должно все заработать без ошибок.

Спасибо, буду ожидать.

В общем, проблему по сути решил. Исходная проблемная точка была в том, что параметры OPC UA каналов не обновлялись автоматически при изменении настроек устройств Modbus RTU устройств. Только при ручном обновлении страницы с настройкой OPC UA начинали автоматически подтягиваться группы с изменениями. В итоге все перекладывается и без кода - как изначально планировалось (Modbus RTU Slave >>> MQTT топики контроллера с регистрами в Wiren Board >>> OPC UA).
Также все стало ясно в ходе тестов с записью значений в соответствующие регистры. Изначально в MS4D состояние связи у канала с записью не идеальное, и только после записи значения оно автоматически изменяется и ставится метка времени.
С промежуточной перекладкой в виртуальное устройство также все получилось, но в итоге есть прямой рабочий путь.

Благодарю, за информацию.

P.S. У меня так и не получилось настроить OPC UA с автоматическим сканированием каналов. Попробую ваш способ.

Добрый день,
Удалось ли решить вопрос?