WB 8.5, подключен на первый порт RS-485 датчик температуры/влажности, на второй порт WB-LED и такой же датчик температуры/влажности. В обоих линиях не более 2-х метров
На втором порту постоянно возникают ошибки
WARNING: [modbus] failed to read 1 input(s) @ 0 of device modbus:23: Serial protocol error: request timed out
Oct 13 08:09:16 wirenboard-ASR7M6FG wb-mqtt-serial[1574406]: WARNING: [modbus] failed to read 1 input(s) @ 1 of device modbus:23: Serial protocol error: request timed out
Oct 13 08:09:16 wirenboard-ASR7M6FG wb-mqtt-serial[1574406]: WARNING: [modbus] failed to read 1 input(s) @ 0 of device modbus:23: Serial protocol error: request timed out
Oct 13 08:09:17 wirenboard-ASR7M6FG wb-mqtt-serial[1574406]: WARNING: [modbus] failed to read 1 input(s) @ 1 of device modbus:23: Serial protocol error: request timed out
Oct 13 08:09:18 wirenboard-ASR7M6FG wb-mqtt-serial[1574406]: WARNING: [modbus] failed to read 1 input(s) @ 0 of device modbus:23: Serial protocol error: request timed out
Oct 13 08:09:18 wirenboard-ASR7M6FG wb-mqtt-serial[1574406]: WARNING: [serial device] device modbus:23 is disconnected
Oct 13 08:09:18 wirenboard-ASR7M6FG wb-mqtt-serial[1574406]: INFO: [serial device] device modbus:23 is connected
modbus 23 - это датчик, при этом данные получаются, только не каждую итерацию.
Иногда в логах начинает спамить modbus 43 - это WB-LED, пока не понял когда это начинает происходить, но это происходит реже
Как только я физически или логически выключаю одно из устройств - предупреждения исчезают и данные начинают поступать ровно.
С настройками я игрался, линию переделывал, менял порядок устройств, единственно что не пробовал - это менять скорость - она у меня 115200, хотелось бы на ней и остаться.
Вручную устройства опрашиваются без проблем и ошибок.
Что делать?
Здравствуйте!
Сообщения в логах указывают на отсутствие физической связи или несоответствие настроек порта между контроллером и устройством.
Рекомендую временно отключить модуль WB-LED и проверить связь, считав сетевой адрес датчика.
Убедитесь, что считываете корректный адрес регистра.
Поскольку это стороннее устройство, для него потребуется составить шаблон драйвера контроллера.
Вся необходимая информация приведена по ссылкам ниже.
По результатам проверки, пожалуйста, дайте обратную связь.
Для стороннего устройства я сделал шаблон и добавляю его по шаблону.
Если я временно отключаю WB-LED - всё работает нормально, ошибок нет и пропусков в запросах данных нет.
При запросе температурного датчика через CLI
modbus_client -mrtu /dev/ttyRS485-1 --debug -b115200 -pnone -s1 -a25 -t0x3 -r0 -c1
(при выключенной службе wb-mqtt-serial) выдаются результаты 100%
адрес датчика я менял, сначала был 27 сейчас 23 - без изменений.
Есть еще датчик другого производителя - с ним проблем нет, проблемы возникают только когда WB-LED и указанный датчик в одной сети.
То есть датчик температуры не конфликтует с другими устройствами и WB-LED не конфликтует, но вместе они не живут на одной шине. Почему?
Могу порекомендовать в шаблоне для датчика прописать “guard_interval_us”
Если при работе с устройством теряются пакеты — попробуйте увеличить значение этого параметра.
Для соответствия протоколу Modbus RTU, установите этот параметр в значение не менее 3.5 символа при выбранной скорости — это не нужно для устройств Wiren Board, но может потребоваться для устройств сторонних производителей. Нужное значение рассчитывается по формуле: guard_interval_us = (3.51110^6)/(скорость в бит/с). Например, для скорости 9600 бит/с guard_interval_us = (3.51110^6)/9600 ≈ 4000 мкс.
У вас из оборудования Wiren Board только диммер WB-LED? Есть другие устройства WB чтобы проверить с ними на одной шине?
Да, к сожалению, есть только WB-LED.
Делал это ранее, сейчас повторил - без изменений.
к сожалению не помогло, делал это ранее и сделал сейчас. Ну как бы это логично - ведь без WB-LED работает исключительно хорошо.
Очень удивительная ситуация, если учесть, что они на разных портах.
Включите режим отладки ( Включение отладки), дождитесь появления ошибок и вышлите диагностический архив.
Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.
не так. Датчика 2 штуки, по одному на порт. Ошибки по порту 2, там где установлен WB-LED.
датчики: 23 и 25
WB-LED: 43
Шаблон делал впервые
{
"device_type": "RS485_T_H_Acquisition",
"group": "temp_sensor",
"title": "Температурный сенсор",
"device": {
"name": "RS485 Т и Влажность",
"id": "rs485_th_acq",
"max_read_registers": 2,
"channels": [
{
"name": "Температура",
"reg_type": "input",
"address": 0,
"type": "value",
"format": "s16",
"scale": 0.1,
"offset": -3,
"readonly": true,
"guard_interval_us": 30
},
{
"name": "Влажность",
"reg_type": "input",
"address": 1,
"type": "value",
"format": "s16",
"scale": 0.1,
"readonly": true,
"guard_interval_us": 30
}
]
}
}
Благодарю за уточнение.
Думаю, что для WB-LED следует отключить Быстрый Modbus.
Вот его шаблон: /usr/share/wb-mqtt-serial/templates/config-wb-led.json
Процесс описан в статье:
Помогло. Количество ошибок существенно сократилось, на датчике вообще нет ошибок.
На WB-LED наоборот начали проскакивать:
Oct 15 13:05:43 wirenboard-ASR7M6FG wb-mqtt-serial[3350546]: WARNING: [modbus] failed to read 4 input(s) @ 32 of device modbus:43: Serial protocol error: request timed out
Oct 15 13:09:43 wirenboard-ASR7M6FG wb-mqtt-serial[3350546]: WARNING: [modbus] failed to read 4 coil(s) @ 0 of device modbus:43: Serial protocol error: request timed out
Oct 15 13:15:43 wirenboard-ASR7M6FG wb-mqtt-serial[3350546]: WARNING: [modbus] failed to read 1 input(s) @ 121 of device modbus:43: Serial protocol error: request timed out
Oct 15 13:21:03 wirenboard-ASR7M6FG wb-mqtt-serial[3350546]: WARNING: [modbus] failed to read 4 input(s) @ 32 of device modbus:43: Serial protocol error: malformed response: invalid crc
Oct 15 13:23:43 wirenboard-ASR7M6FG wb-mqtt-serial[3350546]: WARNING: [modbus] failed to read 4 holding(s) @ 2000 of device modbus:43: Serial protocol error: request timed out
Oct 15 13:27:43 wirenboard-ASR7M6FG wb-mqtt-serial[3350546]: WARNING: [modbus] failed to read 4 holding(s) @ 2000 of device modbus:43: Serial protocol error: request timed out
Ошибки нечастые.
- Проверьте шину. При необходимости используйте терминирующие резисторы.
- Увеличте таймаут опроса
И всё же в чём причина? В низком качестве датчика или это какой-то программный глюк?
Думаю, что дело в настройках порта.
В вашем шаблоне для скорости 115200 “guard_interval_us”: 30 мкс.
По мим расчетам получается, что значение нужно выставить не менее чем 334.2 мкс.
Это экспериментировал, посчитал по формуле, но где-то нолик потерял. В итоге пробовал со значением 400 и 30 - одинаково.
Сейчас специально поставил вашу цифру - ошибки
К сожалению, не знаю чем еще могу вам помочь, остается подбирать значения экспериментально для совместной работы устройств на одной шине или разделить их на разные.
Например в конфиге:
“read_period_ms” : 1000 может быть мал. Я бы попробовал увеличить. Например 5000 мс.
“min_request_interval” : 60 тоже увеличить.
Это может помочь избавиться от ошибок request timed out.
Описание возможных параметров для драйвера wb-mqtt-serial у нас отображено здесь:
Не исключено, что в используемом вами датчике есть особенность, которая мешает их совместной работе.
Здравствуйте!
Получилось ли решить вопрос?
Да, пометил ваш ответ. )