|
Перечисление устройств на общей шине |
|
|
|
Aug 1 2008, 11:24
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(navy2000 @ Aug 1 2008, 10:31)  С RS485 красиво сделать не получится. RS485 вроде бы допускает одновременное включение на передачу нескольких узлов - ток ограничивается. Драйверы CAN в этом смысле гораздо приятнее. Кроме того, в CAN реализовать искомое по-моему вполне реально. Но дорогой он, поэтому задача - RS485. Цитата(navy2000 @ Aug 1 2008, 10:31)  У меня в качестве серийного номера прибора служит 48-бит его Ethernet MAC-адрес. Были конечно сложности с автоматизацией определения устройств в сети (В CAN идентификатор учавствующий в арбитраже только 29 бит), но они были решены. После определения всех MAC-адресов, по ним можно отправлять служебные команды (когда сетевых адресов еще нету), узнавать тип устройства и просить поморгать светодиодом попищать динамиком, после этого ему уже присваивается сетевой адрес. Типа того. Еще вариант - таки регистрировать устройства на мастере, но в режиме plug&play, а чтобы не было конфликтов, подключать по одному. Цитата(rezident @ Aug 1 2008, 11:17)  Другое дело, что коллизии в RS485 довольно сложно идентифицировать, это да. Придет битый пакет - делов-то.
|
|
|
|
|
Aug 1 2008, 11:51
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 17-07-06
Пользователь №: 18 874

|
Была одна идея, когда строил большие сети на RS485, но, как говорится "тяму не хватило". А именно. Имеем на каждой плате серийник (как правило большой), из него нужно получить сетевой номер (маленький, но уникальный). Например, 48-бит серийник, а в сети 100 устройств. Мастер формирует основание полинома и отдает его в сеть, а слэйвы по этому основанию считают, например, CRC-8 от своего серийника и считают это своим сетевым адресом. Конечно они могут совпасть, тут нужно выбирать функцию. Потом, мастер начинает опрос (256 раз), а слэвы в ответ шлют свои серийники (вот и пошла возможность коллизии), но от устройств с одинаковым сетевым адресом идет гарантированно разный ответ, а от него можно считать CRC (адрес устройства) и если отвечают более одного, то он не должен сходится. А потом уже дело техники. Приборам с такими то адресами пересчитать CRC с другим основанием, но не попадая в уже розданый диапазон. В общем, это только идея, возможно бредовая, сам ее реализовывать не стал. Сначала хватало DIPSWITH на приборах, а потом, пришел CAN и 485-й попросту был забыт. Цитата Кроме того, в CAN реализовать искомое по-моему вполне реально. Но дорогой он, поэтому задача - RS485. Стоимость физического уровня почти одинаковая. ADM485 около $1 http://www.argussoft.ru/search/?area=catal...85&options=PCA82C250 то же самое. http://www.mt-system.ru/index.php?store_se...N4,115&id=5В качестве контроллера можно применять LPC2109 (120 руб в розницу) в него CAN встроен. http://www.mt-system.ru/index.php?store_se...D64/01&id=5Правда, не зная вашей задачи рекомендовать контроллер немного не корректно, но идею я думаю вы поймете.
|
|
|
|
|
Aug 1 2008, 12:16
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(navy2000 @ Aug 1 2008, 11:51)  Мастер формирует основание полинома и отдает его в сеть, а слэйвы по этому основанию считают, например, CRC-8 от своего серийника Отличная мысль! Цитата(navy2000 @ Aug 1 2008, 11:51)  а потом, пришел CAN и 485-й попросту был забыт. Поэтому и нет желания смотреть в сторону XXX-BUS. На то пошло, так это будет уже XXX-BUS over CAN, с соответственно совершенно другой реализацией. Цитата(navy2000 @ Aug 1 2008, 11:51)  Стоимость физического уровня почти одинаковая. ADM485 около $1 75176 - $0.5 и ниже, т.е. в 2 раза. Камень - раз в десять, но он великоват к тому же, почему и писал о грядущем выходе мелких, которые должны больше подходят и гораздо дешевле. Цитата(navy2000 @ Aug 1 2008, 11:51)  В качестве контроллера можно применять LPC2109 (120 руб в розницу) в него CAN встроен. Неплохо!
|
|
|
|
Guest_Цыкетчик_*
|
Sep 23 2008, 18:26
|
Guests

|
Цитата(Огурцов @ Jul 31 2008, 08:19)  По какому принципу сделать сабж ? Шина типа rs485, хочется получить нечто типа plug&play. В моей гоолове крутится только один вариант - после какой-то общей команды устройства выдают на шину свой уникальный идентификатор (чтобы их можно было зарегистрировать) через случайные интервалы (чтобы исключить коллизии). Вот "случайность" при таком способе и не нравится - более подошло бы что-то более определенное. Я тут работаю над подобной проблемой
|
|
|
|
|
Sep 13 2009, 12:16
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 9-12-04
Пользователь №: 1 423

|
Цитата(Цыкетчик @ Sep 23 2008, 22:26)  Я тут работаю над подобной проблемой Такая задача была решена следующим образом: Топология сети разная для раздачи адресов и для работы. Раздача адресов происходит в топологии точка- точка. Работа - традиционная шина Модбас. Физически сеть одна (в смысле пары проводов) При старте системы (например, подача питания на ВСЕ узлы одновременно) раздаем адреса. Для этого размыкаем шину в каждом узле ( НЗ реле ) Первый узел получает номер от Мастера сети. Если есть узел за ним, становиться временным мастером для следующего узла и следующий узел получает номер от него, иначе процесс раздачи считаем законченным. Переключаем все узлы в режим Шина и работаем как обычно. Вполне себе работает. Имеет смысл только в спецпроектах где без такого изврата никак. Из-за повышения сложности софта.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|