Интеграция SIMP Light и оборудования WirenBoard

Есть такая инструкция:
https://support.simplight.ru/knowledge-bases/2/articles/347-nastrojka-shlyuza-modbus-tcp-mqtt-na-wirenboard

Захожу по ссылке и вижу, что для моего устройства в полях Unit ID, Start Address стоят числа, сгенерированные случайным образом (да и в остальных столбцах тоже даные не соответствуют действительности). Так и должно быть?

Думаю, что нет. Скорее всего, некорректно работает маппинг адресов.
Если я прав, то укажите, пожалуйста, в каких файлах он настраивается.

Нет никакого желания снова перебивать вручную всю таблицу адресов и проставлять нужные галочки, если я это уже один раз сделал в файле шаблона.

Код шаблона

// Configuration options
{
“device_type” : “FW-CPM712-E10-01-3-2-2”,
“device” : {
“name”: “fw-cpm712”,
“id”: “fw-cpm712”,
“enabled”: true,
“slave_id”: 9,
“channels”:
[
{
“name”: “ECU_Soft_Version”,
“reg_type”: “input”,
“address”: 1,
“type”: “value”,
“format”: “u16”,
“scale”: null,
“round_to”: null,
“word_order”: “”,
“max”: null
},
{
“name”: “E_Head_Temp_Set_Point”,
“reg_type”: “input”,
“address”: 10,
“type”: “temperature”,
“format”: “u16”,
“scale”: 0.015625,
“round_to”: 0.1,
“word_order”: “”,
“max”: null
},
{
“name”: “Battery_DC_Voltage”,
“reg_type”: “input”,
“address”: 37,
“type”: “value”,
“format”: “float”,
“scale”: null,
“round_to”: null,
“word_order”: “”,
“max”: null
},
{
“name”: “E_Remote_Power_SP”,
“reg_type”: “holding”,
“address”: 0,
“type”: “range”,
“format”: “u16”,
“scale”: null,
“round_to”: null,
“word_order”: “”,
“max”: 1000
},
]
}
}

stskr, добрый день! Скорее все го у вас все верно.
Вот фрагмент описания маппинга в Modbus TCP (https://wirenboard.com/wiki/index.php/Шлюз_Modbus_TCP)
Unit ID и Start address - адресные поля Modbus TCP. Определяются хешированием от имени канала; таким образом, одинаковые каналы на разных контроллерах с большой вероятностью будут иметь одинаковые адресные поля. Замечание: Unit ID 1 и 2 зарезервированы за пользователем - никакие каналы не будут автоматически назначены на эти адреса.
Смотрите, вам не надо ничего перенабивать, достаточно выбрать те каналы, которые будут транслироваться в Modbus TCP и, используя адреса, которые сгенерил контроллер, настроить все в Simplight SCADA.

А я думал, что Unit ID - это адрес устройства и Start address - это адрес регистра Modbus TCP. Разве не так?
Я же писал, что в других полях тоже какая-то ерунда. Маппинг работает неправильно совсем!

А почему не сделать прозрачную трансляцию адресов?
Вот, например, есть регистр 10 на устройстве Modbus RTU с адресом 9 и он транслируется как регистр 10 по Modbus TCP с адресом 99. Так нельзя сделать?!

Ну я понимаю, что у вас вообще все топики мапятся в регистры Modbus TCP, поэтому и каша получается! Но так неправильно делать категорически!

Сделайте тогда для Modbus-устройств (да и вообще для любых Slave-устройств со своим адресным пространством) отдельный блок регистров!
И еще я думаю, что у пользователя должна быть возможность как-то управлять этим процессом через веб-интерфейс!

Все топики сортируются только в алфавитном порядке! Это тоже неправильно!
У меня могут быть разные устройства с разными блоками регистров!
А вы все это в кучу смешали! Как в этом потом разбираться!
(Я могу сделать дополнительные префиксы к тегам, чтобы как-то разделить эти группы. Но при этом внутри самой группы будет все равно алфавитная сортировка!)

Станислав, спасибо за замечания! Постараемся учесть в новых версиях.

А я думал, что Unit ID - это адрес устройства и Start address - это адрес регистра Modbus TCP. Разве не так?

Оба поля, Unit ID и Start address — это адресные поля Modbus TCP, не Modbus RTU. В контроллере реализован шлюз, который отображает сообщения из определённых топиков в очереди сообщений MQTT в регистры Modbus TCP, то есть адреса Modbus RTU на этом уровне никак не учитываются.

Вот на картинке из мануала все выглядит красиво: задан один Unit ID = 5 и Start Address меняется в диапазоне от 0 до 8 с шагом 2.
А у меня в этих столбцах какие-то случайные числа. Вот я и хочу понять, почему?!

А это они самим предлагают сделать: “2. Выставить всем единый UNIT ID (в модбасе это называется Slave ID)”

Ну а я о чем спрашиваю?! Вот у меня таблица из 100 регистров, в каждой строчке 10 полей, которые мне нужно отредактировать вручную, т. к. никакого экспорта/импорта в CSV/Excel у вас не предусмотрено!!! Итого, 1000 операций!
А если этих регистров будет, например, 1000 и 10 таких устройств, у каждого из которых своя таблица регистров?! Сколько операций нужно сделать?!
Как вы предлагаете решать эту задачу?!

Если много редактировать, то можно менять значения в файле /etc/wb-mqtt-mbgate.conf
А затем service wb-mqtt-mbgate restart

Kilpio, да, мне это как-то в голову не пришло. Но все равно это какой-то извращенный путь получается: перегнать json в csv, открыть в Excel, отредактировать, сохранить в csv, перегнать обратно в json. Это неправильно! Решайте проблему с некорректным маппингом!