Добрый день, стоит следующая задача: из существующего устройства с 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 для передачи тегов виртуальных устройств контроллера и при сканировании были видны и группы и теги.)
Исходя из этого возникает несколько вопросов:
Возможно ли реализовать такую прямую перекладку значений (Modbus RTU >>> Теги MQTT >>> OPC UA/
Если такая возможность присутствует, то кажется, что проблема кроется в доступе на чтение или передачу. Подскажите где произвести настройку.
Ниже скрины настройки протокола в 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”
};
Также при попытке все-таки перекладки из RTU в TCP столкнулся с проблемой, что значение тегов из регистра Coils может только быть прочитано, но запись недоступна.
В общем, проблему по сути решил. Исходная проблемная точка была в том, что параметры OPC UA каналов не обновлялись автоматически при изменении настроек устройств Modbus RTU устройств. Только при ручном обновлении страницы с настройкой OPC UA начинали автоматически подтягиваться группы с изменениями. В итоге все перекладывается и без кода - как изначально планировалось (Modbus RTU Slave >>> MQTT топики контроллера с регистрами в Wiren Board >>> OPC UA).
Также все стало ясно в ходе тестов с записью значений в соответствующие регистры. Изначально в MS4D состояние связи у канала с записью не идеальное, и только после записи значения оно автоматически изменяется и ставится метка времени.
С промежуточной перекладкой в виртуальное устройство также все получилось, но в итоге есть прямой рабочий путь.