Показать страницуИстория страницыСсылки сюдаНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== RS485 / Modbus ====== Апдейт от 2024-07-08 В связи с тем, что Modbus RTU в OpenHAB работает из рук вон плохо - найдено интересное решение. \\ Ставим локально на малинке программный конвертер Modbus RTU -> Modbus TCP отсюда: https://github.com/3cky/mbusd Далее создаем нужный конфиг для нее и запускаем. <sxh> sudo mcedit /etc/mbusd/mbusd-ttyAMA1.conf sudo systemctl start mbusd@ttyAMA1.service sudo systemctl enable mbusd@ttyAMA1.service </sxh> Далее в OpenHAB создаем нужное нам количество Modbus TCP бриджей направленных на localhost:502 и просто перевешиваем наши поллеры на эти бриджи. --- Отладка протокола Modbus для устройств по RS485 Устанавливаем modbus_client от WirenBoard ([[https://wirenboard.com/wiki/Modbus-client|документация]]): Качаем пакет для ARM <sxh> wget https://github.com/wirenboard/modbus-utils/releases/download/v1.2.8/modbus-utils_1.2.8_armhf.deb </sxh> Переходим в папку со скаченным пакетом и ставим его командой: <sxh> sudo apt install ./modbus-utils_1.2.8_armhf.deb </sxh> В случае если наблюдается проблема в OpenHAB с работой через RS485, попробовать прописать в файл '/etc/default/openhab' в 'EXTRA_JAVA_OPTS' \\ строку инициализации serial порта: '-Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA1:/dev/ttyS0', например так: <sxh> EXTRA_JAVA_OPTS="-XX:+ExitOnOutOfMemoryError -Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA1:/dev/ttyS0" </sxh> ------- :!: Все что ниже данной строки - устарело: Устанавливаем **minimalmodbus**: <sxh>pip3 install -U minimalmodbus</sxh> А дальше уже можно в интерактивном режиме читать/писать регистры:\\ <sxh> >>> import minimalmodbus >>> instr = minimalmodbus.Instrument('/dev/ttyUSB0', 1) </sxh> https://minimalmodbus.readthedocs.io/en/master/advancedusage.html#interactive-usage Основные команды:\\ https://minimalmodbus.readthedocs.io/en/stable/apiminimalmodbus.html Также желательно включить Debug, чтобы видеть, что было отправлено устройству, и что оно прислало в ответ. Для этого при начальной инициализации добавить параметр Debug: <sxh> instr = minimalmodbus.Instrument('/dev/ttyAMA1', 1, debug = True) </sxh> Например, считать 5 регистров **holding registers**, начиная c адреса 0x0000 <sxh> >>> instr.read_registers(0, 5, 3) MinimalModbus debug mode. Will write to instrument (expecting 15 bytes back): 01 03 00 00 00 05 85 C9 (8 bytes) MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyAMA1 MinimalModbus debug mode. No sleep required before write. Time since previous read: 22959.92 ms, minimum silent period: 2.01 ms. MinimalModbus debug mode. Response from instrument: 01 03 0A 03 E6 66 14 00 01 14 00 FF FF DD 5E (15 bytes), roundtrip time: 0.0 ms. Timeout for reading: 50.0 ms. [998, 26132, 1, 5120, 65535] </sxh> === Ссылки === https://www.rapidtables.com/convert/number/binary-to-hex.html [[https://ipc2u.ru/articles/prostye-resheniya/modbus-rtu/|Просто о Modbus RTU с подробным описанием и примерами]] megad/hw/servers/rpi4-rtc-poe/rs485.txt Последнее изменение: 2024/07/08 19:12 — lazygatto