Выявили следующую проблему.
При связи с панелями управления генератором DeepSea через встроенные порты RS485 периодически (несколько раз в минуту при непрерывном чтении) вылезают ошибки связи (CRC и неверный размер), причем даже на столе при объединении массы и соединении витым кабелем.
Что с терминаторами, что без.
Проверили через modbus_read - тоже случается.
Подключили через два разных USBшных адаптера на FT232 - с ними за сутки ни одной ошибки.
Посмотрели на физику осциллографом - всё вполне прилично, с FT даже похуже будет.
Так что…wb-mqtt-serial не при делах, внешние соединения тоже - я так понимаю, проблема где-то между линуксовым драйвером UART’а и клеммами.
Проблема есть на 52 контроллерах в поле (6.7) и воспроизводится на одном у меня на столе (6.6).
Не-а. В поле вместе с дипсишными железками на одном порту висят WB-MAP’ы - с ними всё отлично. Ну и вообще больше ни с чем такого не наблюдали.
Наверное смогу в понедельник раздобыть счет на оплату тех, что 6.7 - этого хватит? Но воспроизводится и на старом, могу еще на 6.5 попробовать.
В поле 9600@8N1, на столе 19200@8N1 (дипси, который сейчас живет у нас в конторе - он с дохлым экраном, так что менять на нем что-то весьма некузяво).
Карта в аттаче - config-deepsea7-adapted.json (5.7 КБ)
Еще из-за того, что wb-mqtt-serial не умеет (ну либо я не понял как) в write-only-регистры, раз в десять минут оно ругается несколько раз подряд на несуществующий регистр 4104, но если это выпилить из конфига, лучше не становится (да и с чего бы).
Сделать дважды смогу в понедельник - сейчас оставили на выходные железяку работать с USBшным хвостиком. Так что пока вот - так понимаю, что с момента, когда я поменял ttyRS485-1 в конфиге на ttyUSB0, через последовательные порты ничего не передавалось:
не, не нужно. Если на 6.6, и 6.7, и на 52 контроллерах - то точно не в партии дело.
В общем нужно посмотреть на то, растёт ли вот это: fe:607 и совпадает ли рост с числом ошибок.
Если стопбиты настроены одинаково и правильно, то подозреваю, что у deepsee что-то не то может быть с опорным генератором и частота сильно отличается от 9600.
Что ещё нужно:
fe, выше написано
логи wb-mqtt-serial с ошибками
очень желательно полные логи wb-mqtt-serial с включенным debug, чтобы прямо видеть какие именно неправильные байтики получаются
лог c лог. анализатора. Я горячо рекомендую купить копеечный восьмиканальный анализатор, гуглится по словам “saleae”. Есть в Москве, стоит ~700 рублей. По-хорошему его нужно подключать к логическим уровням, но 5В он выдерживает, поэтому можно просто подключить GND и A, например.
Судя по принятому куску “FF FF FF” - постоянно высокий уровень. Вот такое крайне часто бывает если плохая земля или разные БП (для контроллера и для устройства) со связью с фазой через емкости входного фильтра. Тут вариант диагностики прост - отключить питание контроллера, запитать его от АКБ, например. Так чтобы масса была связана только с “панелью”. Если пропадет помеха - то действительно так. А на “панели” точно нету отдельной “земли” для RS-485?
Это известно.
Оба девайса на столе запитаны от одного источника (крутой промышленный питальник ABB), на объектах - вообще от аккумулятора генераторной установки.
Сигнальная масса у панели есть - на стенде пробовали и с ней (на GND контроллера), и без неё - разницы никакой ни в логах, ни на осциллографе.
Заземление в офисе так себе, но в полях идеальное.
Вот только что соединил последовательно два свинцовых аккума и от них всё запитал - фиг, ничего не изменилось.
Порядком удивляет то, что сигнал при использовании USB/Serial выглядит ощутимо хуже (три разных низких уровня, кривые фронты, всё вот это), но стабильно работает.
А этот свисток - самый обычный-типовой без всякой развязки?
Хм, может у устройства не хватает мощности выхода?
При работе от
А пара резисторов (надо попробовать ом 75-150) от линий А и от Б на землю ситуацию ухудшают или наоборот?
Свистки обычные, неизолированные. Один отечественный “типа промышленный” - со встроенными терминатором и подтяжками, другой - DFRobot, совсем примитивный.
Как выше коллега посоветовал - надо лог анаизатор.
Текущая гипотеза - некорректные частоты, точнее сдвиг частоты из-за чего значения битов получаются не в тех местах.
У меня вот такой, например: https://aliexpress.ru/item/4000144266133.html
Их много.
Исключительно в целях поделиться опытом про “ошибка СRС”.
Периодически возникала с некоторыми контроллерами.
Полечилась изменением времянки опроса: строго выдерживать 2мс перед чтением и 1мс между байтами - фактически к стандарту.
Александр, вам спасибо за то, что не поленились описать, чем закончилось дело.
Мы кстати по результатам запланировали в следующий Wiren Board добавить некоторый аппаратный блок, который позволит мгновенно переключать драйвер на приём и работать с такими устройствами, нарушающими стандарт.