|
Ошибки при обмене по протоколу CAN 2.0B в многопроцессорной системе |
|
|
|
Sep 27 2008, 19:01
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 27-09-08
Пользователь №: 40 529

|
Здравствуйте! На этом форуме я новичок, поэтому прошу прощения, если разместил вопрос не в том топике.
Ситуация следующая - есть многопроцессорная система (на базе процессоров семейства ST10), обмен данными между ними ведется по протоколу CAN 2.0B.
Каждый процессор выдает через КАН информаци, необходимую для расчетов другому. Выдача настроена на частоту 100Гц (выставление данных на шину КАН производится по прерыванию от таймера).
Другие процессора сравнивают принятые значения с измеренными ими самими и производят вычисления.
Проблема в том, что наблюдается потеря кадров при выдаче по шине при работе нескольких микропроцессоров одновременно. Второй процессор ведет счетчик обновления данных от первого (к примеру) и наблюдает потери (для теста МК1 выдает инкрементирующийся каждые 100Гц счетчик циклов, второй обрабатывает его прием с частотой 800Гц - второй процессор наблюдает в итоге "разрывы" по пришедшему счетчику - приходят значения 1000, 1001, 1002, 1003, 1005, 1006 - пропущено 1004).
Если включен только один передатчик(передача вдется только с одного из МК - потерь фактически не наблюдается). Если на шину выдает два передатчика - идут потери.
Обьясните пожалуйста чайнику, вследствие чего могут возникать потери при приеме\передаче по CAN 2.0B?
|
|
|
|
|
 |
Ответов
|
Sep 29 2008, 16:47
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 27-09-08
Пользователь №: 40 529

|
UP!
|
|
|
|
|
Sep 29 2008, 17:17
|

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

|
Цитата(Fledgling @ Sep 29 2008, 22:47)  UP! можно долго апать, но это дело не сдвинет с места. Ваш вариант описания ситуации мало что говорит. По всей видимости дело в программе или в протоколе, который вы пытаетесь огранизовать. Каким образом распределены ID CAN-сообщений по устройствам?
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Sep 29 2008, 18:19
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 27-09-08
Пользователь №: 40 529

|
Цитата(spf @ Sep 29 2008, 23:17)  можно долго апать, но это дело не сдвинет с места. Ваш вариант описания ситуации мало что говорит. По всей видимости дело в программе или в протоколе, который вы пытаетесь огранизовать. Каким образом распределены ID CAN-сообщений по устройствам? Прошу прощения, апнул исключительно от безысходности  . Описывать весь алгоритм слишком долго, возможно кто либо еще сталкивался с ошибками в CAN'e иил есть причины для наиболее часто встречаемых багов (в этой теме я новичок - но тема то как раз для новичков  ). Используется расширенный формат кадров (29 бит). В ОЗУ каждого процесора содержатся одинаковые таблицы с описанием кадров (номер кадра, что заполняется в поля данных кадра и прочее). 11 бит идентификатора определяют номер строки в этой таблице (определяют уникальность идентификатора кадра), распределение по процессорам ведется по этому номеру - т.е. МК1 выдает кадры например от 0 до 50, МК2 - от 51 до 100 и тп. Остальные биты могут быть не уникальными, но в целом ситуация, когда 2 процессора пытаются выдать кадр с одним идентификаторам невозможна (проверял, хотя учитывая, что я чайник может быть что то прозевал) Процедуры чтения/записи написаны по алгоритму, указанному в документации на процессор (блок схема), так что логически в этом ошибки быть не должно. Из 15 обьектов CAN контроллера CAN процессора обьект №15 используется для приема (он буферизированный), обьекты 0-7 - для передачи. Процессоры могут стартовать асинхронно, выдачу кадров осуществляют (всех, которые предназначены к выдаче с этого МК) с частотой 100 Гц. Тесты показали, что контроллер успевает выставить все данные на шину до наступления следующего цикла. Перегрузки на шине тоже не наблюдается, сокращали поток выдачи до 1 кадра с частотой 100Гц - количество пропусков снизилось, но осталось на высоком и неприемлимом уровне. С удовольствием отвечу на любые интересующие вопросы по алгоритму и специфике обмена, но к сожалению описать его весь не вижу возможности.
Сообщение отредактировал Fledgling - Sep 29 2008, 18:27
|
|
|
|
|
Sep 30 2008, 17:42
|

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

|
Цитата(Fledgling @ Sep 30 2008, 00:19)  Процессоры могут стартовать асинхронно, выдачу кадров осуществляют (всех, которые предназначены к выдаче с этого МК) с частотой 100 Гц. Тесты показали, что контроллер успевает выставить все данные на шину до наступления следующего цикла. Цитата А частота у генераторов достаточно одинаковая ? Частота по идее абсолютно одинаковая Частота только по идее у них одинаковая  . Плавали, знаю. Все процессоры будут плыть с разной скоростью в разные направления. Так что уповать на то, что все будут всегда попадать в нужные 100мс не стоит. На шине должен быть один синхронизатор, эталон общесистемных часов, который должен управлять временем в системе, на него должны все модули равняться. Цитата(Fledgling @ Sep 30 2008, 23:30)  МК3 регистрирует пропуски по счетчикам. И снова не договариваете Сколько пропусков на каком количестве посылок, стабильно ли это возникает? Как регистрирует, N1 != N2 или анализируется линейность изменения каждого счётчика по-отдельности? Вам надо подключить снифер на внутреннюю шину, который бы на экран ПК выводил все что было на шине, тогда будет проще разбираться. Может оказаться что вся бяда именно в том, что все синхронно только "по идее", а на деле все плывет.
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Sep 30 2008, 17:50
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 27-09-08
Пользователь №: 40 529

|
Цитата(spf @ Sep 30 2008, 23:42)  И снова не договариваете Сколько пропусков на каком количестве посылок, стабильно ли это возникает? Как регистрирует, N1 != N2 или анализируется линейность изменения каждого счётчика по-отдельности? Вам надо подключить снифер на внутреннюю шину, который бы на экран ПК выводил все что было на шине, тогда будет проще разбираться. Может оказаться что вся бяда именно в том, что все синхронно только "по идее", а на деле все плывет. Третий процессор проверяет так: if (cnt1 - cnt1_old > 1) {errorMK1++;} if (cnt2 - cnt2_old > 1) {errorMK2++;} cnt1_old = cnt1; cnt2_old = cnt2; cnt1 и cnt2 - счетчики, принимаемые от МК1 и МК2. И все это проверяется в 800 Гц (для верности воткнули на макс. частоту) цикле (в 8 раз чаще чем выдается). Если новое значение счетчика еще не пришло - errorMK не изменится. errorMK1 и errorMK2 даже приблизительно не равны друг другу. на значение счетчика 10000 (т.е. выдалось от 0 до 10000) errorMK1 может насчитать 10, а errorMK2 - 500. И наоборот. Тенденция - счетчики растут лавинообразно - то есть могут не изменятся достаточно долго, потом резко растут, и снова "затыкаются".
Сообщение отредактировал Fledgling - Sep 30 2008, 17:53
|
|
|
|
|
Oct 1 2008, 12:34
|

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

|
Цитата(Fledgling @ Sep 30 2008, 23:50)  Третий процессор проверяет так:
if (cnt1 - cnt1_old > 1) {errorMK1++;} if (cnt2 - cnt2_old > 1) {errorMK2++;}
cnt1_old = cnt1; cnt2_old = cnt2;
cnt1 и cnt2 - счетчики, принимаемые от МК1 и МК2. Хм, это странно, что счетчики изменяются нелинейно. Надо проверять успешно ли завершается отправка из МК1 и МК2. Но скорее всего ошибка в другом: Цитата И все это проверяется в 800 Гц (для верности воткнули на макс. частоту) цикле (в 8 раз чаще чем выдается). Если новое значение счетчика еще не пришло - errorMK не изменится. Если ваш контроллер не использует режим FIFO то следует работать по прерыванию. Все сообщения принимается в один приемный слот? Фильтры каким-то образом используются? Если вы работаете через один приемный слот, то данные у вас будут теряться. Теряться они будут когда два контроллера синхронно выдадут ответы друг за другом. Придет один пакет, придет второй, второй затрет первый, считать получиться только последний. Нельзя полингом работать при таких скоростях, даже если вы сделаете 1600 или 3200 Гц опроса.
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
Сообщений в этой теме
Fledgling Ошибки при обмене по протоколу CAN 2.0B в многопроцессорной системе Sep 27 2008, 19:01   Dog Pawlowa Цитата(Fledgling @ Sep 29 2008, 21:19) С ... Sep 30 2008, 09:12    Fledgling Цитата(Dog Pawlowa @ Sep 30 2008, 15:12) ... Sep 30 2008, 14:51     Andrew2000 Цитата(Fledgling @ Sep 30 2008, 18:51) ..... Sep 30 2008, 15:53     spf Цитата(Fledgling @ Sep 30 2008, 20:51) Во... Sep 30 2008, 15:58      Vokchap Цитата(spf @ Sep 30 2008, 18:58) В CAN со... Sep 30 2008, 16:04   spf Цитата(Fledgling @ Sep 30 2008, 00:19) Пе... Sep 30 2008, 15:45    Fledgling Цитата(spf @ Sep 30 2008, 21:45) Перегруз... Sep 30 2008, 16:09     spf Цитата(Fledgling @ Sep 30 2008, 22:09) Им... Sep 30 2008, 16:27      Dog Pawlowa Цитата(spf @ Oct 1 2008, 15:34) Теряться ... Oct 1 2008, 14:35       Fledgling Цитата(Dog Pawlowa @ Oct 1 2008, 20:35) К... Oct 2 2008, 04:08        spf Цитата(Fledgling @ Oct 2 2008, 10:08) Чте... Oct 2 2008, 07:35         Fledgling Цитата(spf @ Oct 2 2008, 13:35) Вектора т... Oct 2 2008, 08:13        Dog Pawlowa Цитата(Fledgling @ Oct 2 2008, 07:08) Чте... Oct 2 2008, 07:41         Fledgling Цитата(Dog Pawlowa @ Oct 2 2008, 13:41) К... Oct 2 2008, 09:20         Fledgling Цитата(Dog Pawlowa @ Oct 2 2008, 13:41) Б... Oct 2 2008, 11:17          spf Цитата(Fledgling @ Oct 2 2008, 17:17) Как... Oct 2 2008, 12:35          Dog Pawlowa Цитата(Fledgling @ Oct 2 2008, 14:17) Как... Oct 2 2008, 12:40           spf Цитата(Dog Pawlowa @ Oct 2 2008, 18:40) Н... Oct 2 2008, 13:16            Dog Pawlowa Цитата(spf @ Oct 2 2008, 16:16) Не вводит... Oct 3 2008, 06:29             spf Цитата(Dog Pawlowa @ Oct 3 2008, 12:29) У... Oct 3 2008, 07:24              Dog Pawlowa Цитата(spf @ Oct 3 2008, 10:24) Операция ... Oct 3 2008, 08:34 Огурцов Цитата(Fledgling @ Sep 27 2008, 19:01) вс... Sep 30 2008, 05:33 Vokchap У вас восемь каналов у каждого узла сконфигурирова... Sep 30 2008, 15:16 Fledgling Цитата(Vokchap @ Sep 30 2008, 21:16) У ва... Sep 30 2008, 15:31  Vokchap Цитата(Fledgling @ Sep 30 2008, 18:31) Оч... Sep 30 2008, 15:57   Andrew2000 Цитата(Vokchap @ Sep 30 2008, 19:57) ...а... Sep 30 2008, 16:04    spf Цитата(Andrew2000 @ Sep 30 2008, 22:04) ... Sep 30 2008, 16:17     Andrew2000 Цитата(spf @ Sep 30 2008, 20:17) Приплыли... Sep 30 2008, 16:24      Vokchap Цитата(Andrew2000 @ Sep 30 2008, 19:24) У... Sep 30 2008, 16:30      Fledgling Цитата(Andrew2000 @ Sep 30 2008, 22:24) П... Sep 30 2008, 16:33     Dog Pawlowa Цитата(spf @ Sep 30 2008, 19:17) Приплыли... Sep 30 2008, 16:32      spf Цитата(Dog Pawlowa @ Sep 30 2008, 22:32) ... Sep 30 2008, 16:37      Andrew2000 Цитата(Dog Pawlowa @ Sep 30 2008, 20:32) ... Sep 30 2008, 16:38      Fledgling Цитата(Dog Pawlowa @ Sep 30 2008, 22:32) ... Sep 30 2008, 16:39       spf Цитата(Fledgling @ Sep 30 2008, 22:39) У ... Sep 30 2008, 16:46        Fledgling Цитата(spf @ Sep 30 2008, 22:46) Такие по... Sep 30 2008, 16:56       Dog Pawlowa Цитата(Fledgling @ Sep 30 2008, 19:39) Кс... Sep 30 2008, 16:48        spf Цитата(Dog Pawlowa @ Sep 30 2008, 22:48) ... Sep 30 2008, 17:00        Fledgling Цитата(Dog Pawlowa @ Sep 30 2008, 22:48) ... Sep 30 2008, 17:30   spf Цитата(Vokchap @ Sep 30 2008, 21:57) Если... Sep 30 2008, 16:06    Vokchap Цитата(spf @ Sep 30 2008, 19:06) Если кон... Sep 30 2008, 16:23 TookeR Введение большего кол-ва приемников приведет к дру... Oct 2 2008, 06:41
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|