Добрый день!
Можно ли наладить опрос регистров Wiren Board 6 посредством modbus RTU, подключив через RS-485 имеющийся на плате?
Спасибо.
Добрый день!
Можно ли наладить опрос регистров Wiren Board 6 посредством modbus RTU, подключив через RS-485 имеющийся на плате?
Спасибо.
Добрый день.
Можно, но писать реализацию придется самому. А какая цель? Если требуется опросить именно по Modbus - то целесообразней выбрать Modbus TCP, настроив по инструкции:
Инструкцию видел, спасибо.
Цель - использовать всё же modbus RTU. Мы работаем с ним, у нас очень много оборудования подключено. И использование modbus TCP крайне не желательно.
Собственно - в самом контроллере регистров как таковых - нет, все хранитсяся в MQTT
Поэтому - для доступа к контроллре в режиме “slave” надо создавать “виртуальные регистры”, делать таблицу сопоставления параметр-номер_регистра. Так в wb-mqtt-mbgate и сделано.
Добрый день!
Присоединяюсь к тому, что написал коллега.
Хочу только дополнить, что хотя готового решения из коробки действительно пока нет, есть вот такой вариант: Siemens<-ModBus->WB - #3 от пользователя Ianni - на ваш страх и риск.
Когда это появится в основном ПО, зависит от того, как часто это требуется клиентам. Может быть, вы подскажете какие-нибудь частые сценарии использования?
Коллеги, н осам по себе WB6 умеет работать, как modbus RTU slave? Или только modbus TCP и никак иначе, а дальше уже конвертация в RTU?
Умеет. Реализуется эта возможность - веткой “rtu_support” проекта
Спасибо, коллеги.
Ветка включена в master.
А скиньте пример пожалуйста пример конфига mbgate modbus rtu с привязкой к порту RS485-2 и к примеру опросом одного холдинг регистра. А также интересует для холдинг регистров режим - только чтение.
Сейчас для установки пакета wb-mqtt-mbgate нужно выполнить:
echo "deb http://releases.contactless.ru/experimental/stretch stretch main" > /etc/apt/sources.list.d/experim.list
apt update
apt install wb-mqtt-mbgate=0.3.0
Через некоторое время мы включим пакет в основной репозиторий, поэтому правильная версия wb-mqtt-mbgate
будет либо уже предустановлена на контроллера, либо устанавливаться через
apt update
apt install wb-mqtt-mbgate
Инструкция по настройке здесь: Шлюз Modbus RTU/TCP — Wiren Board.
Мы следуем спецификации Modbus, поэтому значения в Holding Register можно менять. Для значений, которое нельзя менять, можно создать Input Register.
А какая у вас задача?
root@wirenboard-AK476JRE:~# echo "deb http://releases.contactless.ru/experimental stretch main" > /etc/apt/sources.list.d/experim.list
root@wirenboard-AK476JRE:~# apt update
Ign:1 http://deb.debian.org/debian stretch InRelease
Get:3 http://deb.debian.org/debian stretch-updates InRelease [93.6 kB]
Get:4 http://security.debian.org stretch/updates InRelease [53.0 kB]
Get:2 http://cdn-fastly.deb.debian.org/debian stretch-backports InRelease [91.8 kB]
Hit:5 http://releases.contactless.ru/stable/stretch stretch InRelease
Get:6 http://releases.contactless.ru/experimental stretch InRelease [18.5 kB]
Get:7 http://security.debian.org stretch/updates/main armhf Packages [627 kB]
Hit:8 http://deb.debian.org/debian stretch Release
Get:10 http://security.debian.org stretch/updates/main Translation-en [293 kB]
Get:6 http://releases.contactless.ru/experimental stretch InRelease [18.5 kB]
Fetched 1160 kB in 5min 4s (3805 B/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
19 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@wirenboard-AK476JRE:~# apt install wb-mqtt-mbgate=0.3.0
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Version '0.3.0' for 'wb-mqtt-mbgate' was not found
root@wirenboard-AK476JRE:~# apt install wb-mqtt-mbgate
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
wb-mqtt-mbgate
1 upgraded, 0 newly installed, 0 to remove and 18 not upgraded.
Need to get 41.1 kB of archives.
After this operation, 15.4 kB disk space will be freed.
Get:1 http://releases.contactless.ru/stable/stretch stretch/main armhf wb-mqtt-mbgate armhf 0.2.2 [41.1 kB]
Fetched 41.1 kB in 8s (4684 B/s)
(Reading database ... 28366 files and directories currently installed.)
Preparing to unpack .../wb-mqtt-mbgate_0.2.2_armhf.deb ...
Unpacking wb-mqtt-mbgate (0.2.2) over (0.1.4) ...
Setting up wb-mqtt-mbgate (0.2.2) ...
Created symlink /etc/systemd/system/multi-user.target.wants/wb-mqtt-mbgate.service → /lib/systemd/system/wb-mqtt-mbgate.service.
root@wirenboard-AK476JRE:~#
Отсутствует пакет E: Version ‘0.3.0’ for ‘wb-mqtt-mbgate’ was not found для данного репозитоия
Только что проверил.
Что у вас возвращает
apt policy wb-mqtt-mbgate
root@wirenboard-AK476JRE:~# apt policy wb-mqtt-mbgate
wb-mqtt-mbgate:
Installed: 0.2.2
Candidate: 0.2.2
Version table:
*** 0.2.2 990
990 http://releases.contactless.ru/stable/stretch stretch/main armhf Packages
100 /var/lib/dpkg/status
0.1.4 990
990 http://releases.contactless.ru/stable/stretch stretch/main armhf Packages
0.1.3 990
990 http://releases.contactless.ru/stable/stretch stretch/main armhf Packages
0.1.2 990
990 http://releases.contactless.ru/stable/stretch stretch/main armhf Packages
0.1.1 990
990 http://releases.contactless.ru/stable/stretch stretch/main armhf Packages
root@wirenboard-AK476JRE:~#
Указан источник, но список не читается?
cat /var/lib/apt/lists/releases.contactless.ru_experimental_*_Packages |grep wb-mqtt-mbgate |awk '{print $2}'
Добавьте пожалуйста так:
echo "deb http://releases.contactless.ru/experimental/stretch stretch main" > /etc/apt/sources.list.d/experim.list
Ошибочно опубликовали неверный репозиторий.
Спасибо! Теперь всё работает!
Хотел уточнить еще почему значения переданные через модбас не меняют значения фактически в MQTT топиках. Возможно я где то ошибся в правке конфига.
{
"debug": true,
"modbus": {
"parity": "N",
"stop_bits": 1,
"baud_rate": 9600,
"path": "/dev/ttyRS485-2",
"data_bits": 8,
"type": "rtu"
},
"mqtt": {
"host": "localhost",
"port": 1883
},
"registers": {
"remap_values": false,
"holdings": [
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 0,
"enabled": true,
"topic": "wb-modbus-1-0/pressure",
"meta_type": "value",
"unitId": 1,
"wordswap": false,
"size": 2
},
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 1,
"enabled": true,
"topic": "dev_temp/t1",
"meta_type": "value",
"unitId": 1,
"wordswap": false,
"size": 2
},
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 2,
"enabled": true,
"topic": "wb-gpio/A2_OUT",
"meta_type": "value",
"unitId": 1,
"wordswap": false,
"size": 2
},
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 3,
"enabled": true,
"topic": "wb-gpio/A3_OUT",
"meta_type": "value",
"unitId": 1,
"wordswap": false,
"size": 2
},
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 4,
"enabled": true,
"topic": "vdev/maxP",
"meta_type": "range",
"unitId": 1,
"wordswap": false,
"size": 2
},
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 5,
"enabled": true,
"topic": "vdev/minP",
"meta_type": "range",
"unitId": 1,
"wordswap": false,
"size": 2
},
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 6,
"enabled": true,
"topic": "vdev/maxT",
"meta_type": "range",
"unitId": 1,
"wordswap": false,
"size": 2
},
{
"scale": 1,
"byteswap": false,
"format": "signed",
"max": 0,
"address": 7,
"enabled": true,
"topic": "vdev/minT",
"meta_type": "range",
"unitId": 1,
"wordswap": false,
"size": 2
}
]
}
}
К примеру меняю значение в 7ом регистре modbus holding для топика vdev/minT. По modbus я меняю и считываю что значение поменялось. А вот значение самого топика не меняется в веб консоли не меняется, через протокол MQTT значения меняются. тип данных в структуре топика value(ro) там же в веб консоли. RO это только для чтения?
Так, воспроизведу.
Да.
В этом, скорее всего, и причина проблемы: wb-mqtt-mbgate
успешно получает значение, пытается его писать в топик .../on
, но так как топик readonly, значения из него никто не слушает.