Я использую Modbus RTU через RS485 для проекта. Я использую RaspberryPI в качестве ведущего устройства и Arduino Pro Mini в качестве ведомого устройства.
Моя проблема заключается в следующем: я подключаю датчики к шине, и они возвращают свое значение. Я подключаю другой датчик, этот возвращает свое значение, но первый датчик больше не возвращает свое значение. Таким образом, очевидно, что-то делает их несовместимыми.
Я попытался диагностировать его с помощью логического анализатора, и результаты следующие: В режиме ожидания линии A и B от ведущего устройства соответственно ВЫСОКИЙ и НИЗКИЙ. В режиме ожидания обе линии A и B от подчиненного устройства имеют ВЫСОКИЙ уровень.
Интересно, не должна ли линия B быть НИЗКОЙ? Посмотрев, почему эта линия была ВЫСОКОЙ, я обнаружил, что линия вытягивается ВЫСОКОЙ из-за библиотеки, которую я использую на Arduino. Эта библиотека устанавливает DE и RE HIGH при передаче данных и LOW в противном случае. (На модуле max485 я связал DE и RE вместе. Я не уверен, что это хорошая практика)
Вот библиотека, которую я использую на arduino: https://platformio.org/lib/show/1727/ModbusSerial
Вот схема ведомого модуля Modbus:
РЕДАКТИРОВАТЬ :
На логическом анализаторе (1 ведомое устройство подключено к ведущему):
Я пробовал с двумя разными трансиверами usb/rs485.
Трансивер 1 - 3 секунды записи
Приемопередатчик 1 - Масштабирование по запросу/ответу
Трансивер 2 - 3 секунды записи
Приемопередатчик 2 - Масштаб по запросу/ответу
Итак, мой вопрос: нормально ли получать HIGH на обеих линиях A и B? И если нет, то что я могу сделать, чтобы исправить это?
Заранее спасибо !!
В состоянии простоя линии A и B от ведущего устройства соответственно ВЫСОКИЙ и НИЗКИЙ.
Это связано с тем, что интерфейс RS485 выдает состояние бездействия, т.е. B является обратным A, потому что передатчик включен.
В режиме ожидания обе линии A и B от подчиненного устройства имеют ВЫСОКИЙ уровень.
Это связано с тем, что ведомое устройство настроено на прием данных, а микросхема RS485 не контролирует линии. Вероятной причиной этого являются внешние подтягивания.
Если бы ведущий и ведомый были подключены, то ведущий (хотя и бездействующий) управлял бы линией вверх и вниз, и вы бы видели высокие и низкие уровни на ведомом.
RS485 (TIA485) может быть тристатирован в режиме ожидания. Если это так, завершения будут определять состояние линий. Возможно, Pi подключает их иначе, чем Arduino.
Ваше подключение к /RE и DE неверно. Если вы посмотрите техническое описание MAX485 и его друзей, вы увидите, что /RE активен на низком уровне, а DE активен на высоком уровне. Если к обоим этим контактам подключить подтягивающее напряжение, один из них сработает. Просто соедините /RE с землей и DE с Vcc.
Лундин
Рафаэль Дейана
Лундин
Рафаэль Дейана
linuxfan говорит Восстановить Монику
Лундин