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

 
 
> Ошибки при обмене по протоколу CAN 2.0B в многопроцессорной системе
Fledgling
сообщение Sep 27 2008, 19:01
Сообщение #1


Участник
*

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



Здравствуйте!
На этом форуме я новичок, поэтому прошу прощения, если разместил вопрос не в том топике.

Ситуация следующая - есть многопроцессорная система (на базе процессоров семейства ST10), обмен данными между ними ведется по протоколу CAN 2.0B.

Каждый процессор выдает через КАН информаци, необходимую для расчетов другому. Выдача настроена на частоту 100Гц (выставление данных на шину КАН производится по прерыванию от таймера).

Другие процессора сравнивают принятые значения с измеренными ими самими и производят вычисления.

Проблема в том, что наблюдается потеря кадров при выдаче по шине при работе нескольких микропроцессоров одновременно. Второй процессор ведет счетчик обновления данных от первого (к примеру) и наблюдает потери (для теста МК1 выдает инкрементирующийся каждые 100Гц счетчик циклов, второй обрабатывает его прием с частотой 800Гц - второй процессор наблюдает в итоге "разрывы" по пришедшему счетчику - приходят значения 1000, 1001, 1002, 1003, 1005, 1006 - пропущено 1004).

Если включен только один передатчик(передача вдется только с одного из МК - потерь фактически не наблюдается). Если на шину выдает два передатчика - идут потери.

Обьясните пожалуйста чайнику, вследствие чего могут возникать потери при приеме\передаче по CAN 2.0B?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vokchap
сообщение Sep 30 2008, 15:16
Сообщение #2


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

Группа: Админы
Сообщений: 1 884
Регистрация: 15-07-06
Из: Новосибирск, Россия
Пользователь №: 18 835



У вас восемь каналов у каждого узла сконфигурированы как передатчики, используется ли реально более одного для отправки сообщений?
Go to the top of the page
 
+Quote Post
Fledgling
сообщение Sep 30 2008, 15:31
Сообщение #3


Участник
*

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



Цитата(Vokchap @ Sep 30 2008, 21:16) *
У вас восемь каналов у каждого узла сконфигурированы как передатчики, используется ли реально более одного для отправки сообщений?

Практически не проверялось.
При срабатывании в основном канале функции (моей) SendFrame кадр ставится в очередь (стек FIFO).
Очередь орбрабатывается при каждом вызове SendFrame, процедура обработки циклически проверяет CAN обьекты 0-7, являются ли они свободными, если да - кадр из очереди ставится на передачу в этот обьект.
Теоретически вероятна ситуация когда в очереди всегда 1 кадр (при малой нагрузке) и для передачи используется только обьект 0. В данном случае он просто справляется со всем потоком.
Однако даже в таком случае упомянутые в первом сообщении ошибки остаются.

P.S.: Нагрузка на контроллер CAN может менятся в процессе разработки ПО устройства, поэтому количество CAN обьектов-передатчиков возможно взято "с запасом". Чтобы люди, занимающиеся разработкой функциональных алгоритмов, не заморачивали себя вопросами обмена по CAN.
Go to the top of the page
 
+Quote Post
Vokchap
сообщение Sep 30 2008, 15:57
Сообщение #4


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

Группа: Админы
Сообщений: 1 884
Регистрация: 15-07-06
Из: Новосибирск, Россия
Пользователь №: 18 835



Цитата(Fledgling @ Sep 30 2008, 18:31) *
Очередь орбрабатывается при каждом вызове SendFrame, процедура обработки циклически проверяет CAN обьекты 0-7, являются ли они свободными, если да - кадр из очереди ставится на передачу в этот обьект.

Если соотношение тактовой частоты контроллера и шины большое, возможна ситуация, когда при последовательной отправке двух и более сообщений один канал начнет передачу первого сообщения, а флаг занятости передатчика (либо канала) будет выставлен позднее, чем будет выполнена его проверка для возможности передачи второго сообщения. В итоге пойдет запись второго пакета в тот-же канал, он будет частично переписан, т.е. комбинация двух сообщений (CRC будет верна). Сообщение м.б. отфильтровано приемником (если это выполняется по каким-либо признакам), т.е. получится пропуск.
Вообще причину легко будет понять, если проанализировать статусные регистры can-контроллера после каждой отправки/получения.
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Sep 30 2008, 16:04
Сообщение #5


Местный
***

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



Цитата(Vokchap @ Sep 30 2008, 19:57) *
...а флаг занятости передатчика (либо канала) будет выставлен позднее, ...

Здесь говорилось про "проверяет CAN обьекты 0-7" - до передатчика еще далеко, не то.


Цитата(spf @ Sep 30 2008, 19:58) *
В CAN сообщение считается переданным только тогда, когда все "сказали" что все до них дошло без ошибок.

!!!!!!!!!!!!!! Не _все_, а _хоть один_ кто-то !!!!
Go to the top of the page
 
+Quote Post
spf
сообщение Sep 30 2008, 16:17
Сообщение #6


Странник
****

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



Цитата(Andrew2000 @ Sep 30 2008, 22:04) *
!!!!!!!!!!!!!! Не _все_, а _хоть один_ кто-то !!!!

Приплыли...
Я поставил слово в кавычки именно потому, что хоть кто-то должен сказать "ок" в нужный момент, а все остальные с этим должны согласиться или сказать что в канале ошибка. Если ошибка, то все должны это сообщение выкинуть.



Цитата(Fledgling @ Sep 30 2008, 22:09) *
Как это можно определить?
Выставляется ли контроллером какой нибудь флаг в CSR или Message Control Register, сообщающий о том, что именно все адресаты получили сообщение?

Почитайте стандарт, там все доходчиво сказано, даже с картинками и в переводе smile.gif


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 30 2008, 16:32
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(spf @ Sep 30 2008, 19:17) *
Приплыли...
Я поставил слово в кавычки именно потому, что хоть кто-то должен сказать "ок" в нужный момент, а все остальные с этим должны согласиться или сказать что в канале ошибка. Если ошибка, то все должны это сообщение выкинуть.
Почитайте стандарт, там все доходчиво сказано, даже с картинками и в переводе smile.gif

Ничего не понял, кто приплыл. Надеюсь, что проблемы с русским языком больше, чем с техникой smile.gif

Если передача потерянного пакета производилась один раз, значит подтверждение на него дал не основной получатель. Значит, не то что-то с этим основным получателем, которое вроде бы на шине, а на самом деле непонятно чем занимается. Может, чтение буферов редко происходит. Скорость передачи и загрузка шины должна соотноситься с быстродействием устройства. Можно сделать 1 Мб/с, а проверять буфер(ы) раз в 10 мс, и ффсе.
Ага, так похоже и происходит :
"Для регистрации данных на ПК используется устройство IXXAT CAN II с драйвером третьей версии (с поддержкой .NET)."
Типичная реакция у Windows - 10 мс. Один передатчик тянет, а два уже нет.
"Приплыли"?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Fledgling
сообщение Sep 30 2008, 16:39
Сообщение #8


Участник
*

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



Цитата(Dog Pawlowa @ Sep 30 2008, 22:32) *
Ничего не понял, кто приплыл. Надеюсь, что проблемы с русским языком больше, чем с техникой smile.gif

Если передача потерянного пакета производилась один раз, значит подтверждение на него дал не основной получатель. Значит, не то что-то с этим основным получателем, которое вроде бы на шине, а на самом деле непонятно чем занимается. Может, чтение буферов редко происходит. Скорость передачи и загрузка шины должна соотноситься с быстродействием устройства. Можно сделать 1 Мб/с, а проверять буфер(ы) раз в 10 мс, и ффсе.
Ага, так похоже и происходит :
"Для регистрации данных на ПК используется устройство IXXAT CAN II с драйвером третьей версии (с поддержкой .NET)."
Типичная реакция у Windows - 10 мс. Один передатчик тянет, а два уже нет.
"Приплыли"?

Нет, пока "плаваем"))
немного поясню.
У устройства есть внутренняя шина (для обмена данными между МК). Третий МК является своеобразным "шлюзом" - он транслирует все принятые внутренней шине кадры через контроллер CAN №2 на внешнюю шину - где приемник - ПК.

Но ошибки ловятся именно на внутренней шине (счетчики процессоров анализируются в 800 Гц цикле МК3, процедурка просто смотрит сколько пропусков по счетчикам МК1 и МК2, инкрементирует какой то свой внутренний счетчик ошибок ErrorCounter и выдает его на внешнюю шину, где мы его видим на ПК - в данном случае скорость работы ПК на винде не критична ИМХО).

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

Получение данных через обьект №15 в процессоре производится через прерывание на обьекте CAN.
Опять таки замечу что при снижении потока до 1 кадра каждые 100 Гц с трех процессоров ошибки не исчезли, ошибки сводятся почти к нулю при оставлении на шине 1 передатчика (МК1) и одного приемника (МК3)

Сообщение отредактировал Fledgling - Sep 30 2008, 16:45
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 30 2008, 16:48
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Fledgling @ Sep 30 2008, 19:39) *
Кстати драйвер IXXAT сам накапливает данные в буфер, считывать их программно можно хоть с частотой 10Гц - выдаст все накопленные сообщения программе за милую душуsmile.gif

Жаль smile.gif
Тем не менее ничего не меняется. В шлюзе то не фрискэйл?
Мы тут ничего не выясним сейчас. Все можно проверить осциллографом - нужно передавать одинаковое сообщение, синхронизироваться от него и убедиться, что шлюз выдает подтверждение. Если да, то значит данные теряются внутри. А если нет... Тогда думать.
А так это гадания.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Fledgling
сообщение Sep 30 2008, 17:30
Сообщение #10


Участник
*

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



Цитата(Dog Pawlowa @ Sep 30 2008, 22:48) *
Жаль smile.gif
Тем не менее ничего не меняется. В шлюзе то не фрискэйл?
Мы тут ничего не выясним сейчас. Все можно проверить осциллографом - нужно передавать одинаковое сообщение, синхронизироваться от него и убедиться, что шлюз выдает подтверждение. Если да, то значит данные теряются внутри. А если нет... Тогда думать.
А так это гадания.


Данные теряются именно внутриsmile.gif
Отказы считают сами процессора, через шлюз выдают при тесте ТОЛЬКО счетчик ошибок (то есть сколько сам процессор насчитал пропусков). при передаче данных через шлюз эффект ошибок "удваивается" - так как в итоге две шины. Но на ошибки на шлюзе плевать - критичными являются ошибки на внутренней шине


Цитата(spf @ Sep 30 2008, 23:00) *
Вы меня не поняли, я прошу отделить "мух от котлет". Вы же продолжаете все сваливать в кучу.
У меня подозрения что трудности не в CAN, а в общих алгоритмах.
Отделите CAN, у него простая функция - передать то, что ему положили в регистры.(ему же все равно что в него положили, температуру или давление, не про это речь)
Обязательно надо выполнять проверки всевозможных ошибок и регистров состояний.
Диагностику CAN надо отделить от диагностики остальной программы. Иначе ошибку можно искать без конца, потому что сложно выяснить что же все таки работает так, как должно. Надо постепенно отсекать те вещи из рассмотрения, которые полностью проверены и в которых вы полностью уверены.

Прошу прощения. Попробую конкретизировать на CAN'e.
Мы пришли к выводу, что ошибка при передаче через CAN (неизвестно в каком месте, при передаче, при приеме или ошибка на шине) следующим образом - выключили все остальные функции процессоров, оставив одну - передавать с частотой 100Гц инкрементирующийся счетчик с МК1 и МК2 и принимать их в МК3.
МК3 регистрирует пропуски по счетчикам.

Проверили алгоритм приема и передачи, логически они верны (в своей программе конечно можно искать ошибки год и не найти явнуюsmile.gif).
Теперь теряемся в догадках. Что это - не успевает выдать передатчик или приемник (на 1 раз за 100Гц можно успеть я думаю), коллизии на шине вроде бы исключены. На этом и завязли - какие еще причины могут быть? Конечно, просить на форуме "в каком месте в коде исправить" было бы глупо, поэтому здесь я хочу найти только направления, по которым нужно дальше двигаться в поисках причины
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Fledgling   Ошибки при обмене по протоколу CAN 2.0B в многопроцессорной системе   Sep 27 2008, 19:01
- - Fledgling   UP!   Sep 29 2008, 16:47
|- - spf   Цитата(Fledgling @ Sep 29 2008, 22:47) UP...   Sep 29 2008, 17:17
|- - Fledgling   Цитата(spf @ Sep 29 2008, 23:17) можно до...   Sep 29 2008, 18:19
|- - 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
|- - spf   Цитата(Fledgling @ Sep 30 2008, 00:19) Пр...   Sep 30 2008, 17:42
|- - Fledgling   Цитата(spf @ Sep 30 2008, 23:42) И снова ...   Sep 30 2008, 17:50
|- - spf   Цитата(Fledgling @ Sep 30 2008, 23:50) Тр...   Oct 1 2008, 12:34
|- - spf   Еще раз перечитал первые ваши посты. Сообщалось чт...   Oct 1 2008, 13:36
|- - 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
||- - 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
||- - 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
||- - spf   Цитата(Fledgling @ Sep 30 2008, 22:39) У ...   Sep 30 2008, 16:46
|||- - Fledgling   Цитата(spf @ Sep 30 2008, 22:46) Такие по...   Sep 30 2008, 16:56
||- - spf   Цитата(Dog Pawlowa @ Sep 30 2008, 22:48) ...   Sep 30 2008, 17:00
|- - 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


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:16
Рейтинг@Mail.ru


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