|
|
  |
30 одинаковых устройств на CAN шине. Как сделать автоматическую идентификацию. |
|
|
|
Aug 27 2007, 20:51
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(syoma @ Aug 26 2007, 12:25)  Привет. Сразу вторая тема. На шине есть до 30 полностью одинаковых устройств с одинаковым ПО. Естественно все они будут вначале генерить сообщения с одинаковыми идентификаторами и это приведет к коллизии на шине. Плюс если попытаться их конфигурировать то все устройства будут реагировать на один и тот же идентификатор, то есть пообщаться с каждым устройством индивидуально невозможно. Как это разрешить без программирования каждого устройства вручную? Существует несколько банальных способов: - ДИП-переключатель - EEPROM, которая записывается по одному общему идентификатору (устройства подключаются по одному) - уникальный физический адрес, который можно прочитать (но не идентификатор!). Количество используемых идентификаторов не должно быть 2 в степени 19, их может быть всего 30+ (1..2).
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 28 2007, 09:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата(spf @ Aug 28 2007, 08:02)  Как вариант (уже рабочий): В каждое устройство на этапе производства зашивается тип и порядковый номер. Эти данные выступают в качестве идентификатора при включении (начальный ID). Ну так это я и думал сделать. Цитата Затем центральный контроллер раздает рабочие (динамические) идентификаторы каждому устройству, далее обращение идут по динамическим адресам, причем возможно сохранение работы по статическим адресам (начальный ID). Вот тут то и проблема - откуда контроллер знает, что такому-то начальному ID соответствует такое-то устройство - т.е. придется на этапе запуска проводить операцию обучения контроллера. Цитата - уникальный физический адрес, который можно прочитать (но не идентификатор!). Количество используемых идентификаторов не должно быть 2 в степени 19, их может быть всего 30+ (1..2). Да, только если вдруг попадется в одной сети хотя бы 2 устройства с одинаковыми идентификаторами - как к ним обратиться, если они реагируют на один и тот-же идентификатор? Будет коллизия.
|
|
|
|
|
Aug 28 2007, 10:11
|

Странник
   
Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051

|
Цитата(syoma @ Aug 28 2007, 15:46)  Вот тут то и проблема - откуда контроллер знает, что такому-то начальному ID соответствует такое-то устройство - т.е. придется на этапе запуска проводить операцию обучения контроллера. Динамический адрес можно записать во flash, при монтировании или замене подключаем пульт и программим все что надо... Цитата Да, только если вдруг попадется в одной сети хотя бы 2 устройства с одинаковыми идентификаторами - как к ним обратиться, если они реагируют на один и тот-же идентификатор? Будет коллизия. Надо определиться с количеством серии, а не пытаться объять необъятное. Сразу закладывайте длинный идентификатор.
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Aug 28 2007, 14:17
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(Dog Pawlowa @ Aug 28 2007, 16:04)  Коллизия - это несколько иное, в этом случае не будет коллизии. Может и быть. Если я правильно помню, Кановский арбитраж работает только во время передачи идентификатора. Если два узла умудрятся выдать одинаковый ID одновременно, то данные они будут выдавать, и данные могут быть разными. Дальше они должны поймать ошибку на шине и выдать Error frame. Вроде так (поправьте если нет).
|
|
|
|
|
Aug 28 2007, 15:11
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Andrew2000 @ Aug 28 2007, 17:17)  Может и быть. Если я правильно помню, Кановский арбитраж работает только во время передачи идентификатора. Если два узла умудрятся выдать одинаковый ID одновременно, то данные они будут выдавать, и данные могут быть разными. Дальше они должны поймать ошибку на шине и выдать Error frame. Вроде так (поправьте если нет). Автор писал несколько иное: " 2 устройства с одинаковыми идентификаторами - как к ним обратиться " У узла нет идентификаторов, так как идентификатор - это свойство сообщения. Два узла синхронно примут одно и то же сообщение. В Вашем примере происходит другой процесс - два сообщения с одинаковыми идентификаторами, но разными данными, синхронно начинают передаваться с разных передатчиков.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 28 2007, 16:54
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(Dog Pawlowa @ Aug 28 2007, 19:11)  Автор писал несколько иное: Да, я немного перескочил. Лучше, говоря про устройство, говорить - серийный номер (или адрес). А для телеграммы - CAN-ID или как-то еще, чтоб не было путаницы.
|
|
|
|
|
Oct 4 2007, 22:49
|
Участник

Группа: Новичок
Сообщений: 18
Регистрация: 10-09-04
Пользователь №: 631

|
Address Claim http://www.kvaser.com/can/hlps/index.htmЕсли коллизия, то случайная задержка и другой Address Claim. Рано или позно поделят адреса
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|