Не работает связь с РТМ-2000

Здравствуйте! На одном из объектов почему-то не работает РТМ-2000. Через modbus_client читается норм, добавил в конфиг- какое-то время регистры чёрные, попытался изменить уставку, все покраснели, и всё. В логах почему-то не вижу сообщений про это устройство в принципе. Какое-то время назад всё работало.

Кстати в логах есть куча ошибок по другим девайсам, но в UI “краснота” редко.

В чём может быть дело?

Конфиг: wb-mqtt-serial.conf (25.3 КБ)

Здравствуйте! Перенес сообщение в новую тему. Пожалуйста, задавайте вопросы каждый раз в новой теме.

У вас уже ведь есть опыт подключения данных устройств. Можно сравнить конфигурации с другими контроллерами.

Покажите содержимое логов (в виде отдельного файла во вложении):

journalctl --since "10 minutes ago"

Также нужен скриншот окна System со страницы Devices, и список установленных пакетов, полученный командой

dpkg -l | grep wb-

Проверьте статус работы сервиса опроса serial-устройств:

systemctl status wb-mqtt-serial

Покажите полностью вывод опроса регистра с помощью команды modbus_client.
Предлагаю оставить в шаблоне один канал и на его примере попытаться установить связь с устройством.

Конфиги один в один с отлично работающих объектов. Но там РТМ-2000 один единственный, а тут совместно с другим оборудованием. Так что цель заставить работать как есть, тем более, что раньше очень даже работало.

А как мне журнал весь скачать и в файл запихать? По частям неудобно(

image

Спойлер
root@wirenboard-A7JQRDI7:~# dpkg -l | grep wb-
ii  python-wb-common                1.3.3                             all          Wiren Board Python common library and helpers
ii  python-wb-io                    1.2.3                             armhf        A module to control WB IO channels.
ii  u-boot-tools                    2:2017.03+wb-2                    all          transitional package - use u-boot-tools-wb instead
ii  u-boot-tools-wb                 2:2017.03+wb-2                    armhf        companion tools for Das U-Boot bootloader
ii  wb-configs                      2.0~~transitional                 all          Default common config files for Wiren Board
ii  wb-configs-stretch              2.0~~transitional                 all          Default stretch-specific config files for Wiren Board
ii  wb-daemon-watchdogs             1.1                               all          Wiren Board services watchdog scripts
ii  wb-dt-overlays                  1.3                               all          Device tree overlays for Wiren Board devices
ii  wb-homa-adc                     2.0.10                            armhf        transitional dummy package
ii  wb-homa-gpio                    2.1.0                             armhf        transitional dummy package
ii  wb-homa-ism-radio               1.17.3                            all          MQTT driver for WB HomA for RFM69 ISM radio
ii  wb-homa-w1                      1.10.1                            armhf        Wiren Board Smart Home MQTT generic 1-wire (w1) driver compatible with HomA conventions
ii  wb-hwconf-manager               1.38.3                            all          Provides infrastructure for hardware re-configuration via Device Tree overlays
ii  wb-mqtt-adc                     2.0.10                            armhf        Wiren Board Smart Home MQTT ADC driver (WB-specific) compatible with HomA conventions
ii  wb-mqtt-confed                  1.2.5                             armhf        Configuration Editor Backend
ii  wb-mqtt-dac                     1.1.1                             all          wb-rules-based IIO DAC driver for WB MQTT
ii  wb-mqtt-db                      1.7.3                             armhf        Wiren Board database logger
ii  wb-mqtt-db-cli                  1.2.1                             all          CLI for wb-mqtt-db
ii  wb-mqtt-gpio                    2.1.0                             armhf        Wiren Board Smart Home MQTT generic sysfs GPIO driver compatible with HomA conventions
ii  wb-mqtt-homeui                  2.3.3                             all          Wiren Board Web UI web interface
ii  wb-mqtt-mbgate                  1.0.1                             armhf        Wiren Board MQTT to Modbus gateway
ii  wb-mqtt-serial                  2.7.1                             armhf        Wiren Board Smart Home MQTT serial protocol driver.
ii  wb-rules                        2.6.3                             armhf        Wiren Board Rule Engine
ii  wb-rules-system                 1.6.9                             all          Default system rules for Wiren Board
ii  wb-test-suite                   1.20                              all          Wiren Board functional testing suite
ii  wb-utils                        2.1.5                             all          Wiren Board command-line utils
Статус
root@wirenboard-A7JQRDI7:~# systemctl status wb-mqtt-serial
● wb-mqtt-serial.service - MQTT Driver for serial devices
   Loaded: loaded (/lib/systemd/system/wb-mqtt-serial.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-12-15 17:00:12 UTC; 6min ago
 Main PID: 1939 (wb-mqtt-serial)
   CGroup: /system.slice/wb-mqtt-serial.service
           └─1939 /usr/bin/wb-mqtt-serial

Dec 15 17:06:12 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] Sleep 20000 us
Dec 15 17:06:12 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [modbus] read 1 holding(s) @ 0 of device modbus:59
Dec 15 17:06:12 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] Sleep 0 us
Dec 15 17:06:12 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] Write: 3b 03 00 00 00 01 81 50
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] Sleep 17000 us
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] ReadFrame: 3b 03 02 00 01 a1 81
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [serial port driver] channel 'OnOff' of device 'IntDR' <-- 1
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [modbus] read 1 input(s) @ 5 of device modbus:59
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] Sleep 0 us
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] Write: 3b 04 00 05 00 01 24 91
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] Sleep 17000 us
Dec 15 17:06:13 wirenboard-A7JQRDI7 wb-mqtt-serial[1939]: DEBUG: [port] ReadFrame: 3b 04 02 00 14 61 3a
root@wirenboard-A7JQRDI7:~#

Помимо RTM-2000, на этом порту висит ещё два устройства, они вполне себе работают.

За последние 10 минут так:

journalctl --since "10 minutes ago" > ./log.txt

Если оставить RTM-2000 один на шине (остальные устройства отсоединить), как и в других работающих конфигурациях, то он опрашивается корректно?

log.txt (2.5 МБ)

Думаю, проблем возникнуть не должно, раз на других объектах работает. Попробовать возможности нет, объект удалённый.

Забыл, вот:

root@wirenboard-A7JQRDI7:~# service wb-mqtt-serial stop
root@wirenboard-A7JQRDI7:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-2 -b9600 -a201 -t0x03 -r0x0137
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 1)
[C9][03][01][37][00][01][24][70]
Waiting for a confirmation...
<C9><03><02><00><1E><D9><9C>
SUCCESS: read 1 of elements:
        Data: 0x001e 
root@wirenboard-A7JQRDI7:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-2 -b9600 -a201 -t0x03 -r0x0137
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 1)
[C9][03][01][37][00][01][24][70]
Waiting for a confirmation...
<C9><03><02><00><1E><D9><9C>
SUCCESS: read 1 of elements:
        Data: 0x001e 
root@wirenboard-A7JQRDI7:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-2 -b9600 -a201 -t0x03 -r0x0137
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 1)
[C9][03][01][37][00][01][24][70]
Waiting for a confirmation...
<C9><03><02><00><1E><D9><9C>
SUCCESS: read 1 of elements:
        Data: 0x001e 
root@wirenboard-A7JQRDI7:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-2 -b9600 -a201 -t0x03 -r0x0137
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 1)
[C9][03][01][37][00][01][24][70]
Waiting for a confirmation...
<C9><03><02><00><1E><D9><9C>
SUCCESS: read 1 of elements:
        Data: 0x001e 
root@wirenboard-A7JQRDI7:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-2 -b9600 -a201 -t0x03 -r0x0137
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 1)
[C9][03][01][37][00][01][24][70]
Waiting for a confirmation...
<C9><03><02><00><1E><D9><9C>
SUCCESS: read 1 of elements:
        Data: 0x001e 
root@wirenboard-A7JQRDI7:~# service wb-mqtt-serial start

Здесь вы опрашиваете регистр 0x0137. А я просил прочитать по отдельности регистры 13, 14, 15.

Чтобы понять причину нужно пробовать. У нас есть рекомендации по подключению сторонних устройств. Попробуйте сделать все по пунктам.

Вы темы перепутали)

Да, извините, запутался уже.

То есть с помощью утилиты modbus_client опрашивается нормально, а при конфигурировании через веб-интерфейс совместно с другими устройствами не работает. При этом другие устройства опрашиваются нормально. Все так?

Если да, то попробуйте отключить опрос остальных устройств (удалить из конфигурации), оставить только РТМ и проверить, будет ли устройство опрашиваться. При необходимости выполнить указанные выше рекомендации.

Всего на порту три устройства: увлажнитель Buhler, ПВУ SystemAir и, собственно говоря, РТМ-2000.

Если отключить Buhler и SystemAir, РТМ-2000 опрашивается и управляется, хоть порой и краснеет, но не отваливается окончательно. Сейчас добавил к нему SystemAir, сначала был чёрный, после попытки записи в регистр весь покраснел. (Поведение идентичное тому, когда всё включено было) Выключил SystemAir, включил Buhler, то же самое. Выходит, РТМ-2000 сейчас работает только, если включен только он один. Его смущают чужие опросы?)

Вот полный конфиг порта:

Конфиг
{
  "path": "/dev/ttyRS485-2",
  "devices": [
    {
      "slave_id": "2",
      "name": "Buhler",
      "id": "buhler",
      "protocol": "modbus",
      "enabled": true,
      "poll_interval": 1000,
      "channels": [
        {
          "name": "DrawingSW",
          "type": "switch",
          "reg_type": "coil",
          "address": "0",
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Drawing",
          "type": "value",
          "reg_type": "input",
          "address": "0",
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "Drawing_setpoint",
          "type": "range",
          "reg_type": "holding",
          "address": "0",
          "format": "s16",
          "scale": 1,
          "offset": 0,
          "max": "100"
        },
        {
          "name": "MasterBedroomSW",
          "type": "switch",
          "reg_type": "coil",
          "address": "1",
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "MasterBedroom",
          "type": "value",
          "reg_type": "input",
          "address": "1",
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "MasterBedroom_setpoint",
          "type": "range",
          "reg_type": "holding",
          "address": "1",
          "format": "s16",
          "scale": 1,
          "offset": 0,
          "max": "100"
        },
        {
          "name": "BedroomGuestSW",
          "type": "switch",
          "reg_type": "coil",
          "address": "2",
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "BedroomGuest",
          "type": "value",
          "reg_type": "input",
          "address": "2",
          "format": "s16",
          "scale": 1,
          "offset": 0
        },
        {
          "name": "BedroomGuest_setpoint",
          "type": "range",
          "reg_type": "holding",
          "address": "2",
          "format": "s16",
          "scale": 1,
          "offset": 0,
          "max": "100"
        }
      ],
      "device_max_fail_cycles": 0,
      "device_timeout_ms": 3000,
      "frame_timeout_ms": 2500
    },
    {
      "slave_id": "1",
      "name": "SystemAir",
      "id": "SystemAir",
      "enabled": true,
      "protocol": "modbus",
      "poll_interval": 2000,
      "channels": [
        {
          "name": "Supply_air_sensor",
          "type": "value",
          "reg_type": "holding",
          "address": "213",
          "format": "s16",
          "poll_interval": 1000,
          "channel_readonly": false
        },
        {
          "name": "FanSpeed",
          "type": "range",
          "reg_type": "holding",
          "address": "100",
          "max": "4",
          "poll_interval": 1000
        },
        {
          "name": "Fan_SF_RPM",
          "type": "value",
          "reg_type": "holding",
          "address": "110",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "Fan_EF_RPM",
          "type": "value",
          "reg_type": "holding",
          "address": "111",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_WH_SIGNAL",
          "type": "value",
          "reg_type": "holding",
          "address": "204",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_IN1",
          "type": "temperature",
          "reg_type": "holding",
          "address": "213",
          "scale": 0.1,
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_IN2",
          "type": "temperature",
          "reg_type": "holding",
          "address": "214",
          "scale": 0.1,
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_IN3",
          "type": "temperature",
          "reg_type": "holding",
          "address": "215",
          "scale": 0.1,
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_IN4",
          "type": "temperature",
          "reg_type": "holding",
          "address": "216",
          "scale": 0.1,
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_IN5",
          "type": "temperature",
          "reg_type": "holding",
          "address": "217",
          "scale": 0.1,
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_LVL",
          "type": "range",
          "reg_type": "holding",
          "address": "206",
          "max": "5",
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_SP",
          "type": "range",
          "reg_type": "holding",
          "address": "207",
          "max": "40",
          "poll_interval": 1000
        },
        {
          "name": "REG_HC_TEMP_SP_DEG",
          "type": "range",
          "reg_type": "holding",
          "address": "221",
          "scale": 0.1,
          "max": "40",
          "poll_interval": 1000
        },
        {
          "name": "REG_PREHEATER_SETPOINT",
          "type": "value",
          "reg_type": "holding",
          "address": "230",
          "scale": 0.1,
          "max": "40",
          "poll_interval": 1000
        },
        {
          "name": "REG_PREHEATER_P_BAND",
          "type": "range",
          "reg_type": "holding",
          "address": "231",
          "scale": 0.1,
          "max": "60",
          "poll_interval": 1000
        },
        {
          "name": "REG_ROTOR_STATE",
          "type": "text",
          "reg_type": "holding",
          "address": "350",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_RH_SENSOR_VALUE",
          "type": "rel_humidity",
          "reg_type": "holding",
          "address": "380",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_RH_SENSOR_DATA_VALID",
          "type": "value",
          "reg_type": "holding",
          "address": "381",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_FILTER_PER",
          "type": "value",
          "reg_type": "holding",
          "address": "600",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_FILTER_DAYS",
          "type": "value",
          "reg_type": "holding",
          "address": "601",
          "channel_readonly": true,
          "poll_interval": 1000
        },
        {
          "name": "REG_CLK_S",
          "type": "range",
          "reg_type": "holding",
          "address": "550",
          "poll_interval": 1000,
          "max": "59"
        },
        {
          "name": "REG_CLK_M",
          "type": "range",
          "reg_type": "holding",
          "address": "551",
          "poll_interval": 1000,
          "max": "59"
        },
        {
          "name": "REG_CLK_H",
          "type": "range",
          "reg_type": "holding",
          "address": "552",
          "poll_interval": 1000,
          "max": "23"
        },
        {
          "name": "REG_CLK_D",
          "type": "range",
          "reg_type": "holding",
          "address": "553",
          "poll_interval": 1000,
          "max": "31"
        },
        {
          "name": "REG_CLK_MNTH",
          "type": "range",
          "reg_type": "holding",
          "address": "554",
          "poll_interval": 1000,
          "max": "12"
        },
        {
          "name": "REG_CLK_Y",
          "type": "range",
          "reg_type": "holding",
          "address": "555",
          "poll_interval": 1000,
          "max": "2030"
        },
        {
          "name": "Filter Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12800",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Fan Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12801",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Rotor Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12803",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Frost Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12804",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "PCU-PB Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12805",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Temperature sensor Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12806",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Emergency Thermostat Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12807",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Damper Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12808",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Low SS Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12809",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Defrost Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12810",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "RH Sensor Alarm",
          "type": "switch",
          "reg_type": "coil",
          "address": "12811",
          "poll_interval": 1000,
          "channel_readonly": true
        }
      ],
      "device_max_fail_cycles": 0,
      "device_timeout_ms": 3000,
      "frame_timeout_ms": 2500
    },
    {
      "slave_id": "201",
      "name": "RTM2021",
      "id": "RTM2021",
      "enabled": true,
      "protocol": "modbus",
      "poll_interval": 2000,
      "channels": [
        {
          "name": "OsadCh1",
          "type": "value",
          "reg_type": "holding",
          "address": "90",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "WaterCh1",
          "type": "value",
          "reg_type": "holding",
          "address": "0x5C",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "TST01_1",
          "type": "temperature",
          "reg_type": "holding",
          "address": "0x0",
          "format": "s16",
          "scale": 0.1,
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "TST01_1_10",
          "type": "value",
          "reg_type": "holding",
          "address": "0x01",
          "format": "s16",
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "TST01_1_mult",
          "type": "value",
          "reg_type": "holding",
          "address": "0x02",
          "format": "s16",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "TST01_1_check",
          "type": "value",
          "reg_type": "holding",
          "address": "0x03",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true
        },
        {
          "name": "Relay0State",
          "type": "switch",
          "reg_type": "holding",
          "address": "176",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true,
          "readonly": true
        },
        {
          "name": "Relay1State",
          "type": "switch",
          "reg_type": "holding",
          "address": "177",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true,
          "readonly": true
        },
        {
          "name": "Relay2State",
          "type": "switch",
          "reg_type": "holding",
          "address": "178",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true,
          "readonly": true
        },
        {
          "name": "Relay3State",
          "type": "switch",
          "reg_type": "holding",
          "address": "179",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true,
          "readonly": true
        },
        {
          "name": "Relay4State",
          "type": "switch",
          "reg_type": "holding",
          "address": "180",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true,
          "readonly": true
        },
        {
          "name": "Relay5State",
          "type": "switch",
          "reg_type": "holding",
          "address": "181",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": true,
          "readonly": true
        },
        {
          "name": "Addres_Teploskat_Air_Min",
          "type": "value",
          "reg_type": "holding_multi",
          "address": "0x012F",
          "format": "s16",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": false
        },
        {
          "name": "Addres_Teploskat_Air_Max",
          "type": "value",
          "reg_type": "holding_multi",
          "address": "0x0130",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": false
        },
        {
          "name": "Addres_Teploskat_Time_Delay_Ch1",
          "type": "value",
          "reg_type": "holding_multi",
          "address": "0x0137",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": false,
          "max": "180"
        },
        {
          "name": "Manual_Auto_Teploskat",
          "type": "switch",
          "reg_type": "holding_multi",
          "address": "0x153",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": false,
          "max": "1"
        },
        {
          "name": "Manual_Auto_Relay_1",
          "type": "switch",
          "reg_type": "holding_multi",
          "address": "0x014F",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": false,
          "max": "1"
        },
        {
          "name": "Manual_Control_Relay_1",
          "type": "switch",
          "reg_type": "holding_multi",
          "address": "0xAC",
          "scale": 1,
          "poll_interval": 1000,
          "channel_readonly": false,
          "max": "1"
        }
      ],
      "device_max_fail_cycles": 0
    }
  ],
  "baud_rate": 9600,
  "parity": "N",
  "data_bits": 8,
  "stop_bits": 1,
  "poll_interval": 2001,
  "enabled": true
}

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

Если есть возможность, то лучше его подключить на другой порт контроллера.

Спустя какое-то время и один единственный включенный РТМ опять покраснел. Жаль, придётся покупать доп. модуль, спасибо!

Но почему оно работало раньше- до сих пор непонятно))

Попробуйте настроить параметры согласно указанным рекомендациям. Например, задать параметр guard_interval_us для порта:

Установите сначала 5000 мкс, затем увеличивайте до 100000 мкс. Посмотрите, будет ли результат.

Проверьте, правильно ли подключены терминирующие резисторы (их должно быть два, по одному на каждом конце линии). Еще проверьте, соединены ли клеммы GND модуля и контроллера.

1 лайк

Увеличил до 100000 мкс, довольно долго работало, но ща опять всё красное. Будем ставить доп. модуль RS-485.

Там вообще звезда, насколько помню, на лучах по 62 Ом резисторы, но могу уже ошибаться. Вопрос в том, что оно до этого год исправно работало.

Должно быть два терминирующих резистора 120 Ом, по одному на каждом конце линии. Если они неверных (меньших) номиналов или их больше чем нужно или они установлены не на концах линии, то это может приводить к неустойчивой работе.

Два 120 Ом может быть на последовательной схеме)

В звезде - не вариант. Если на всех лучах по 120Ом, ничего работать не будет. На одном из объектов, где 4-5 лучей звезды, стоят резисторы по 62 Ома и всё работает.

Подключение звездой для сети RS-485 не рекомендуется. Установка на 5 лучах звезды резисторов по 62 Ом приведет к их общему (параллельному) сопротивлению в 12,5 Ом. Это очень мало.

Я знаю, это была вынужденная мера

Ну, возможно, там чуть по-другому, но ща врать не буду, это тоже было уже фиг пойми когда(