реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Полный Ликбез: RS485 - двухпроводная шина., Как искать устройства.
nameless
сообщение Mar 2 2007, 08:48
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 9-07-04
Пользователь №: 305



Что-то не может RS485 как CAN давать коллизии при одновременной передаче двумя устройствами. А как тогда инициализацию делать? Неожиданно, конечно, но при 6-байтном идентификаторе кроме как отлавливать коллизии - других способов не придумаю.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Mar 2 2007, 10:05
Сообщение #2


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(nameless @ Mar 2 2007, 07:48) *
Что-то не может RS485 как CAN давать коллизии при одновременной передаче двумя устройствами. А как тогда инициализацию делать? Неожиданно, конечно, но при 6-байтном идентификаторе кроме как отлавливать коллизии - других способов не придумаю.

причем тут колизии?
это же 485й(по сути тотже 232й)
для поиска - перебираете адреса, с контрольной посылкой в нужном Вам порядке и ожидаете ответа:
если ответа нет - девайса нет(или не отвечает)
если ответ есть - следовательно железка есть.
такой же алгоритм при поиске на какой скорости работают железки - и все по ходу...
может быть, есть и более умные алгоритмы для 485го - но мне они не известны...


--------------------
Go to the top of the page
 
+Quote Post
alogvinov
сообщение Mar 2 2007, 10:20
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 17-01-05
Пользователь №: 1 995



Цитата(PrSt @ Mar 2 2007, 10:05) *
Цитата(nameless @ Mar 2 2007, 07:48) *
Что-то не может RS485 как CAN давать коллизии при одновременной передаче двумя устройствами. А как тогда инициализацию делать? Неожиданно, конечно, но при 6-байтном идентификаторе кроме как отлавливать коллизии - других способов не придумаю.

причем тут колизии?
это же 485й(по сути тотже 232й)
для поиска - перебираете адреса, с контрольной посылкой в нужном Вам порядке и ожидаете ответа:
если ответа нет - девайса нет(или не отвечает)
если ответ есть - следовательно железка есть.
такой же алгоритм при поиске на какой скорости работают железки - и все по ходу...
может быть, есть и более умные алгоритмы для 485го - но мне они не известны...


Этот вариант пригоден лишь для архитектуры "клиент-сервер".
Если же необходимо сделать мультимастерную систему, то лучше почитать о сетях с передачей маркёра. Описывается этот метод доступа практически в любой книге, посвященной сетям передачи данных.
Go to the top of the page
 
+Quote Post
nameless
сообщение Mar 2 2007, 11:06
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 9-07-04
Пользователь №: 305



А разве в сетях с передачей маркера нет алгоритма обнаружения коллизий??? CSMA/CD без обнаружения коллизий не работает.....А в RS485 - коллизию кроме как по току не представляю обнаружения..
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 2 2007, 11:27
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
CSMA/CD без обнаружения коллизий не работает.....

CD это ж есть collision detection. А маркер предполагает, что только одно устройство мастерит в данный момент. И пока оно маркер не отдало, все остальные не смеют гавкать.

Вобщем по сути:
Навскидку вспоминается три способа:
1. Один мастер поочередно поллит все слэйвы.
2. Мультимастер с передачей маркера - отослал свои данные, передал права мастера следующему и заткнулся.
3. Разбивка на тайм-слоты. Каждый слэйв имеет право вякнуть только в определенный интервал времени.

Кто-то дополнит?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
nameless
сообщение Mar 2 2007, 11:44
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 9-07-04
Пользователь №: 305



Я наверное не правильно объяснил. До пола мне все устройства найти надо. По уникальным идентификаторам (грубо говоря MAC-адресам). Уже потом использовать приведенные выше режимы общения. Так вот именно поиск надо придумать. С учетом очень малых ресурсов ведомых устройств.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 2 2007, 11:54
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Так вот именно поиск надо придумать.

Т.е. адресов в сети слишком много, чтобы опросить их все последовательно?
Трудно чем-то помочь.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Mar 2 2007, 15:04
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Я делал такую штуку. Алгоритм там не особо сложный. Может даже найду, контроллерный варинат не могу дать, а компьютерный наверное получится.
Надо использовать определённое включение драйвера rs485. Об этом на форуме неоднократно писалось. Например здесь
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 2 2007, 15:12
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Тут получается противоречивый сценарий взаимодействия.
Ну допустим главный в сети дивайс получил информацию об адресах каких-то дивайсов.
Но он все равно не знает, что это за дивайсы и что с ними делать.
Даже если давайсы сообщат о себе всю информацию они все равно не сообщат где они стоят в общей системе управления. Этой информацией распологает только главный.
Т.е по любому вам надо что-то делать руками: либо забивать таблицу адресов слэйвов в главном дивайсе заранее, либо ее формировать динамически в процессе инсталяции, но с участием человека который бы указывал функции каждому конкретному дивайсу.
А MAC адреса нужны для сред где могут существовать абсолютно независимые сети, как радиосети, Ethernet и т.д.
В сетях RS485 я не слыхал чтобы делались независимые сети на одной физической паре, т.е. и глобально уникальные MAC адреса там не имеют смысла.
Насколько имел опыт с CAN и CANOpen там всегда каждому дивайсу руками назначают адрес перемычками или дистанционно, и этапа поиска физических адресов там нет, мастеру всегда дают таблицу с уже записанными адресами.
Другой пример, в ZigBee есть поиск адресов дивайсов в сети, но с точки зрения инсталятора все опять сводится к ручному назначению хоть формально и не адресов, но идетрифицируемых числами функций или профилей.

Цитата(nameless @ Mar 2 2007, 13:14) *
Я наверное не правильно объяснил. До пола мне все устройства найти надо. По уникальным идентификаторам (грубо говоря MAC-адресам). Уже потом использовать приведенные выше режимы общения. Так вот именно поиск надо придумать. С учетом очень малых ресурсов ведомых устройств.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 2 2007, 15:54
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(nameless @ Mar 2 2007, 11:44) *
Я наверное не правильно объяснил. До пола мне все устройства найти надо. По уникальным идентификаторам (грубо говоря MAC-адресам). Уже потом использовать приведенные выше режимы общения. Так вот именно поиск надо придумать. С учетом очень малых ресурсов ведомых устройств.

Выделить специальный адрес для первоначального опроса. Ответ разбиваем на некоторое количество окон-таймслотов. Абонент отвечает в окне, выбранном по псевдослучайному принципу (затравкой ГСЧ будет его уникальный номер). Моделирование этого метода дает неплохой результат - для нахождения 250 абонентов при 256 тайм-слотах достаточно типично пяти циклов.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 2 2007, 18:50
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(rx3apf @ Mar 2 2007, 14:54) *
Выделить специальный адрес для первоначального опроса. Ответ разбиваем на некоторое количество окон-таймслотов. Абонент отвечает в окне, выбранном по псевдослучайному принципу (затравкой ГСЧ будет его уникальный номер). Моделирование этого метода дает неплохой результат - для нахождения 250 абонентов при 256 тайм-слотах достаточно типично пяти циклов.
Не понял - а как быть с коллизиями?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 2 2007, 18:58
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Сергей Борщ @ Mar 2 2007, 20:50) *
Цитата(rx3apf @ Mar 2 2007, 14:54) *

Выделить специальный адрес для первоначального опроса. Ответ разбиваем на некоторое количество окон-таймслотов. Абонент отвечает в окне, выбранном по псевдослучайному принципу (затравкой ГСЧ будет его уникальный номер). Моделирование этого метода дает неплохой результат - для нахождения 250 абонентов при 256 тайм-слотах достаточно типично пяти циклов.
Не понял - а как быть с коллизиями?

Видимо они "усредняются" повторными запросами.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 2 2007, 19:06
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(rezident @ Mar 2 2007, 18:58) *
Цитата(Сергей Борщ @ Mar 2 2007, 20:50) *

Цитата(rx3apf @ Mar 2 2007, 14:54) *

Выделить специальный адрес для первоначального опроса. Ответ разбиваем на некоторое количество окон-таймслотов. Абонент отвечает в окне, выбранном по псевдослучайному принципу (затравкой ГСЧ будет его уникальный номер). Моделирование этого метода дает неплохой результат - для нахождения 250 абонентов при 256 тайм-слотах достаточно типично пяти циклов.
Не понял - а как быть с коллизиями?

Видимо они "усредняются" повторными запросами.

Виноват, я "недосказал". Обнаруженные ответы обрабатываются - абонентам отсылается уведомление, что они обнаружены (как вариант, при ограниченном общем количестве - отсылкой им адреса, по которому они будут в дальнейшем выбираться), и тем самым они исключаются из последующих циклов опроса. Если абонентов мало, то, может быть, это и не требуется. В моем случае я исключал абонентов до тех пор, пока при двух опросах подряд отклики вообще не исчезнут - значит, "расправились" со всеми. Но у меня специфика - радиоканал с непредсказуемым взаиморасположением объектов. Примерно так же работают RFID с UHF-накачкой, однако детального описания реализации мне найти не удалось, поэтому начал творить отсебятину...

Коллизия в моем случае не обнаруживается вообще (в худшем случае), в соответствующем тайм-слоте ничего не принято (в лучшем - услышу того, кто мощнее, в случае проводной связи, может быть, можно засечь факт какой-то активности достаточно надежно).

Да, если отказаться от байт-ориентированного протокола на этапе "разруливания" - можно изобразить что-нибудь типа механизма детектирования устройств на шине 1-wire или механизма антиколлизий в ISO14443.

Сообщение отредактировал rx3apf - Mar 2 2007, 19:17
Go to the top of the page
 
+Quote Post
Alex03
сообщение Mar 2 2007, 19:39
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



А такой вариант:

Мастер посылает запрос "Кто есть на шине в таком-то диапазоне адресов?"
Слейвы отвечают на это переводом шины в активное состояние (передача 0) на некоторое время.
Т.е. мастер принимает break, как ответ что в этом диапазоне есть как минимум 1 слейв.
Ну а опрос можно свести к подобию половинного деления.
Т.е. для N разрядного адреса девайса:
- и 1-ом слейве его адрес найдётся за N итераций.
- и 2-х слейвах их адрес найдётся за от N+1 до 2N-1 итераций.
и т.д.

Время передачи брейка слеймами должно быть больше чем один символ при выбранной скорости передачи плюс разброс времени реакции всех возможных слейвов на такой запрос.

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

ЗЫ немного похож на этот метод опрос всех девайсов в микролане от далласа, где идентификаторы слейвов унакальные 64-х разрядные прошитые при изготовлении.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 2 2007, 19:42
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(rx3apf @ Mar 2 2007, 18:06) *
Виноват, я "недосказал".
Ага, то есть коллизии есть. А на 485 их теоретически быть не должно sad.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 20:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016