Подключение панели оператора

Есть следующая задача.
Нужно подключить панель оператора по modbus tcp.
При этом панель оператора master а wiren board slave
Нужно записывать и читать данные с holding register.
после чего mqtt топики привязанные к адресам holding register будут обрабатываться пайтон скриптом.
Проблема в том что я не понимаю как добавить
Шлюз MQTT - Modbus RTU/TCP slave в Регистры Holding (чтение/запись)
свой топик.

Добрый день.
Не уверен что верно понял задачу, но попробую показать.
Нажимаю “+”:
Screenshot_20230705_111147
Вписываю мой, созданный в соответствии с конвенцией топик:


Указав ID(Modbus address) 1 и адрес регистра 100.
Все. Теперь регистр можно читать и записывать.

Я это делал только вся проблема в том что если я пытаюсь читать данный адрес командой 3 получаю ошибку . Если читаю командой 4 то все в порядке. но в таком случае я не могу записать в этот адрес ничего

Какого типа регистр?

вот такие настройки OPC сервера в Wiren Board тоже holding

holding читается только 03 командой.

Пожалуйста покажите конфиг wb-mqtt-mbgate.conf
Также - запрос к этому регистру, в виде байт. Сделайте его с компьютера для диагностики.
Например

Connecting to 10.0.0.71:502
[00][01][00][00][00][06][37][03][07][D0][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><37><03><02><00><00>
SUCCESS: read 1 of elements:
	Data: 0x0000 

Картинка как настроено в незнакомом ПО - недостаточно…

Я вижу:

   {
    "topic": "test/tesr1",
    "address": 160,
    "unitId": 1,
    "meta_type": "range",
    "enabled": true,
    "format": "signed",
    "size": 1,
    "max": 0,
    "scale": 0,
    "byteswap": false,
    "wordswap": false
   }

настроенный 160 holding регистр c id1

а читаете 208 c id 7
Логично, такого нет.

Просто правильно указал количество байт и проблема ушла.

Теперь вопрос в том что в Каналах MQTT я не могу найти такой топик.test/tesr1

Так, я этот топик в MQTT создавал, используя вот такой скрипт:

function makeNewVirtualPool(vdName, nameControl, typeControls, orderControl){
  //log.info("GetDevice", getDevice("vdName"))
  if (getDevice(vdName) === undefined) {
    log.info("Define new")
    defineVirtualDevice(vdName, {
      title: vdName,
      cells: {

      },
    })
  }
 
    //Тут проверим есть ли уже контрол и если нет - создадим.
    if (!getDevice(vdName).isControlExists(nameControl)) {
      log.info("Контрола нет, создаем.")
      getDevice(vdName).addControl(nameControl, {
        type: typeControls,
         min: 10,
        max: 50,
        value: 1,
        readonly: false,
        order: orderControl
      });
    }

  
  
}


makeNewVirtualPool("pemp1", "tesr1", "range", 1);

Топик создается но как его добавить “Регистры Holding (чтение/запись)”


Но это не работает

Я верно понимаю что топик - есть, но проблема возникает с его добавлением в конфиг wb-mqtt-mbgate?
Нпишите - что делаете, какого результата ожидаете.

Топик есть. Через MQTT я могу как записывать в него данные так и читать.
Но мне нужно передать в этот топик параметр из панели оператора по modbus tcp.
Панель оператор является мастером
Вот тут “Регистры Holding (чтение/запись)” я прописал вот такое название pemp1/tesr1
При попытке записать любое значение оно тут же становится равно “0”

Tx, data:[00 09 00 00 00 09 01 10 05 DC 00 01 02 00 4B ]
Rx data:[00 09 00 00 00 06 01 10 05 DC 00 01 ]

Есть какое то решение этой проблемы? Или надо свой скрипт для этого писать?

Покажите пожалуйста

mosquitto_sub -v -t /devices/pemp1/#

То есть запустите в консоли и запишите згачение по Modbus TCP

root@wirenboard-AQCMCVPH:~# mosquitto_sub -v -t /devices/pemp1/#
/devices/pemp1/meta/name pemp1
/devices/pemp1/meta/driver wb-rules
/devices/pemp1/controls/tesr1 inf
/devices/pemp1/controls/tesr1/meta {“order”:1,“readonly”:false,“type”:“value”}
/devices/pemp1/controls/tesr1/meta/order 1
/devices/pemp1/controls/tesr1/meta/readonly 0
/devices/pemp1/controls/tesr1/meta/type value
/devices/pemp1/controls/tesr2 inf
/devices/pemp1/controls/tesr2/meta {“order”:1,“readonly”:false,“type”:“value”}
/devices/pemp1/controls/tesr2/meta/order 1
/devices/pemp1/controls/tesr2/meta/readonly 0
/devices/pemp1/controls/tesr2/meta/type value
/devices/pemp1/controls/tesr1/on inf

Так, отлично.
То есть при записи по Modbus TCP - в топик ничего не писалось?
Дайте еще конфиг wb-mqtt-mbgate, попробую воспроизвести.

wb-mqtt-mbgate.conf (170,2 КБ)

Вижу два вхождения, причем первое скорнфигурировано неверно:

   {
    "topic": "pemp1/controls/tesr1",
    "address": 1000,
    "unitId": 1,
    "meta_type": "",
    "enabled": true,
    "format": "signed",
    "size": 2,
    "max": 0,
    "scale": 0,
    "byteswap": false,
    "wordswap": false
   },
   {
    "topic": "pemp1/tesr1",
    "address": 1500,
    "unitId": 1,
    "meta_type": "",
    "enabled": true,
    "format": "signed",
    "size": 2,
    "max": 0,
    "scale": 0,
    "byteswap": false,
    "wordswap": false
   }

Со всторым (адрес 1500) - работает.