syoma 1 26 августа, 2007 Опубликовано 26 августа, 2007 · Жалоба Привет. Сразу вторая тема. На шине есть до 30 полностью одинаковых устройств с одинаковым ПО. Естественно все они будут вначале генерить сообщения с одинаковыми идентификаторами и это приведет к коллизии на шине. Плюс если попытаться их конфигурировать то все устройства будут реагировать на один и тот же идентификатор, то есть пообщаться с каждым устройством индивидуально невозможно. Как это разрешить без программирования каждого устройства вручную? Пока я вижу только один выход - это забить в программаторе цикл, чтобы он в каждой следующей прошивке увеличивал какие-то байты, которые отвечали бы за идентификатор. Таким образом получится 2^10 вариантов ПО и вероятность того что 2 устройства с одинаковым идентификатором попадут в одну шину - низкая. Если перейти на 2.0B то вероятность будет еще меньше. Недостаток в том, что при запуске системы или замене такого устройства придется обучать контроллеры на шине, чтобы они понимали чему соответствует новый идентификатор или перепрошивали его. Но хорошо то что это можно сделать по CANу, потому что простым перебором идентификаторов обнаружить присутствие устройства и определить его идентификатор возможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 27 августа, 2007 Опубликовано 27 августа, 2007 · Жалоба Привет. Сразу вторая тема. На шине есть до 30 полностью одинаковых устройств с одинаковым ПО. Естественно все они будут вначале генерить сообщения с одинаковыми идентификаторами и это приведет к коллизии на шине. Плюс если попытаться их конфигурировать то все устройства будут реагировать на один и тот же идентификатор, то есть пообщаться с каждым устройством индивидуально невозможно. Как это разрешить без программирования каждого устройства вручную? Существует несколько банальных способов: - ДИП-переключатель - EEPROM, которая записывается по одному общему идентификатору (устройства подключаются по одному) - уникальный физический адрес, который можно прочитать (но не идентификатор!). Количество используемых идентификаторов не должно быть 2 в степени 19, их может быть всего 30+ (1..2). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spf 0 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Как вариант (уже рабочий): В каждое устройство на этапе производства зашивается тип и порядковый номер. Эти данные выступают в качестве идентификатора при включении (начальный ID). Рабочие идентификаторы не должны пересекаться с начальными. Должна быть широковещательная команда в поле начальных ID "ответить всем" - получаем список подключенного оборудования. Затем центральный контроллер раздает рабочие (динамические) идентификаторы каждому устройству, далее обращение идут по динамическим адресам, причем возможно сохранение работы по статическим адресам (начальный ID). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Как вариант (уже рабочий): В каждое устройство на этапе производства зашивается тип и порядковый номер. Эти данные выступают в качестве идентификатора при включении (начальный ID). Ну так это я и думал сделать. Затем центральный контроллер раздает рабочие (динамические) идентификаторы каждому устройству, далее обращение идут по динамическим адресам, причем возможно сохранение работы по статическим адресам (начальный ID). Вот тут то и проблема - откуда контроллер знает, что такому-то начальному ID соответствует такое-то устройство - т.е. придется на этапе запуска проводить операцию обучения контроллера. - уникальный физический адрес, который можно прочитать (но не идентификатор!). Количество используемых идентификаторов не должно быть 2 в степени 19, их может быть всего 30+ (1..2). Да, только если вдруг попадется в одной сети хотя бы 2 устройства с одинаковыми идентификаторами - как к ним обратиться, если они реагируют на один и тот-же идентификатор? Будет коллизия. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spf 0 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Вот тут то и проблема - откуда контроллер знает, что такому-то начальному ID соответствует такое-то устройство - т.е. придется на этапе запуска проводить операцию обучения контроллера. Динамический адрес можно записать во flash, при монтировании или замене подключаем пульт и программим все что надо... Да, только если вдруг попадется в одной сети хотя бы 2 устройства с одинаковыми идентификаторами - как к ним обратиться, если они реагируют на один и тот-же идентификатор? Будет коллизия. Надо определиться с количеством серии, а не пытаться объять необъятное. Сразу закладывайте длинный идентификатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Да, только если вдруг попадется в одной сети хотя бы 2 устройства с одинаковыми идентификаторами - как к ним обратиться, если они реагируют на один и тот-же идентификатор? Будет коллизия. Коллизия - это несколько иное, в этом случае не будет коллизии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrew2000 0 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Коллизия - это несколько иное, в этом случае не будет коллизии. Может и быть. Если я правильно помню, Кановский арбитраж работает только во время передачи идентификатора. Если два узла умудрятся выдать одинаковый ID одновременно, то данные они будут выдавать, и данные могут быть разными. Дальше они должны поймать ошибку на шине и выдать Error frame. Вроде так (поправьте если нет). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Может и быть. Если я правильно помню, Кановский арбитраж работает только во время передачи идентификатора. Если два узла умудрятся выдать одинаковый ID одновременно, то данные они будут выдавать, и данные могут быть разными. Дальше они должны поймать ошибку на шине и выдать Error frame. Вроде так (поправьте если нет). Автор писал несколько иное: " 2 устройства с одинаковыми идентификаторами - как к ним обратиться " У узла нет идентификаторов, так как идентификатор - это свойство сообщения. Два узла синхронно примут одно и то же сообщение. В Вашем примере происходит другой процесс - два сообщения с одинаковыми идентификаторами, но разными данными, синхронно начинают передаваться с разных передатчиков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrew2000 0 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Автор писал несколько иное: Да, я немного перескочил. Лучше, говоря про устройство, говорить - серийный номер (или адрес). А для телеграммы - CAN-ID или как-то еще, чтоб не было путаницы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 28 августа, 2007 Опубликовано 28 августа, 2007 · Жалоба Ладно, все понятно. Во флэш при запуске никто залазить не будет. Скорее всего даже EEPROMa у этих устройств не будет вообще. Я именно подразумевал передачу сообщений с одинаковыми CAN-ID из разных источников. Серия получается ну не меньше 10000-20000, при этом до 30-ти устройств будут работать в одной сети. Поэтому наверное придется на расширенной идентификации все делать, так как при 10-ти битной для удобства маскирования(будет еще насколько других устройств) для серийного номера останется 7 а то и 6 бит , т.е верятность, что два устройства с одинаковым серийным номером попадут в одну сеть становится ощутимой. Естественно с расширенной идентификацией, я даже не думаю что мы выпустим столько устройств, чтоб начать нумерацию сначала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Codavr 0 4 октября, 2007 Опубликовано 4 октября, 2007 · Жалоба Address Claim http://www.kvaser.com/can/hlps/index.htm Если коллизия, то случайная задержка и другой Address Claim. Рано или позно поделят адреса :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться