Официальный сайт компании Arduino по адресу arduino.cc
шина RS-485 на несколько устройств без мастера взлетит ?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 27/03/2016 - 11:07
вопрос на преспективу:
хочу объеденить несколько независимых NANO через RS-485, при этом они все должны быть равноправными и уметь обращатся друг к другу напрямую минуя центр (это надо для создания системы "автономных" модулей умеющих работать как независимо, так и "в команде").
Понятно, что RS-485 - это электрический стандарт, на который вешается софтверный протокол, наиболее распространенным является схема с Мастером и Слейвами.
Существуют-ли стандарты (и реализации в ардуине) без мастера?
RS-485 последовательная, помехозащищенная шина не требующая ведущего для обмена данными. Ведущий или мастер может вводится для диспетчерезации обмена, уже на уровне обмена пакетами данных, для разруливания коллизий при одновременном вещании нескольких узлов. Стандартов высокоуровневого обсена на шине RS-485, как и на RS-232 или CAN не существует, по сути это потоки-носители позволяющие организовать взаимодействие. Так что без мастера будет работать передача данных.
Как организован обменс мастером во главе. Он (ведущий) предоставляет в единый момент времени ответить только одному узлу. Слушать могут все, а вот начать передачу, только тот кому разрешит мастер, то есть слейв только отвечает на запросы или разрешения мастера.
ну не изобретать-же велосипет?
самым распространенным протоколом является MODBUS, но на сколько я понимаю ему обязательно нужен один мастер?
Ну не изобретайте. Зачем тогда вопрос задаете ? Модбас можно запустить на любом носителе, было бы желание. Но без мастера - нельзя.
Если и нет сделайте сами. Говорить могут все по очереди, разрешение говорить следующему дает предыдущий, когда сам выскажется.
Ваша хотелка - мультимастер. Если не удастся организоватьциклический обмен - а его как правило можна сделать задействовав пустые сообщения, т.е. если мастеру сказать нечего - он отсылает пустое, типа "я пасс, господа, следующий!!", то прейдется делать механизм разрешения конфликта на шине. Подходов тут несколько 1. Изучите CAN, там интересно 2.Контроль шины при начале вывода - подход проблемный (аналоговые измерения, зависит от конфигурации сети и т.д.), но конфликт выявляется быстро. 3.Выявление конфликта по отсутствию ответе или битой CRC (фактически конфликт приравнивается к просто помехе) 4. Занятие шины до основной передачи на случайное время, отпускание, проверка состояния, если занята - конфликт и надо обождать. 5. Создание искуственного главного, если достаточно долго (но с случайной составляющей в времени) нет обмена, то устройство у которого первого истек интервал говорит всем "я главное! Всем молчать пока я не спрошу и не разрешу!" и т.д.
Обилие методов как бы намекает что они все не идеальные. Чаще используют подходы 3 - контроль ошибок как бы всеравно нужен, так пусть он и рулит.
в принцепе - да, если кто знает готовую библиотеку для ардуино (или на крайняк стандарт) киньте плиз.... а то там заморочки возникают например при включении или при двух одинаковых ID, не хочется на грабли наступать....
ну и уж до кучи может кто знает есть какой стандарт для распиновки RS-485 на разьем RJ-45 ???
встречал в инете такую |+5|+5|_| A|B |_|GRD|GRD| но не уверен, что это гуд...
так не делайте два одинаковых.
так не делайте два одинаковых.
а как делать? и почему не делать по 2 ???
в принцепе - да, если кто знает готовую библиотеку для ардуино (или на крайняк стандарт) киньте плиз....
Библиотека для работы в режиме multimaster: https://drive.google.com/file/d/0Bzb96ijbjcmkcEIzTzBXemZCZ28/view?usp=sh...
Сам не пробовал, скачал на будущее: сделана вроде добротно, судя по коду. Есть встроенный арбитраж. В комплекте - примеры.