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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Ошибки при обмене по протоколу CAN 2.0B в многопроцессорной системе
spf
сообщение Sep 30 2008, 16:06
Сообщение #16


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

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



Цитата(Vokchap @ Sep 30 2008, 21:57) *
Если соотношение тактовой частоты контроллера и шины большое, возможна ситуация, когда при последовательной отправке двух и более сообщений один канал начнет передачу первого сообщения, а флаг занятости передатчика (либо канала) будет выставлен позднее, чем будет выполнена его проверка для возможности передачи второго сообщения. В итоге пойдет запись второго пакета в тот-же канал, он будет частично переписан, т.е. комбинация двух сообщений (CRC будет верна).

Если контроллер так криво работает, то как вообще тогда можно работать с ним?


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


Участник
*

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



Цитата(spf @ Sep 30 2008, 21:45) *
Перегрузка легко считается.
1) Какая скорость используется?
2) Сколько байт данных в сообщении?
3) Какие драйвера применены?
4) Какие расстояния?
5) Терминаторы на месте?
6) Контролируете ошибки в контроллере CAN?


1) Максимальная - 1 Мбит/сек
2) 4 слова - 8 байт
3) ? Что имеется в виду под драйвером? Для регистрации данных на ПК используется устройство IXXAT CAN II с драйвером третьей версии (с поддержкой .NET).
4) Расстояния между процессорами на плате - меньше 10 см, расстояние от контроллера, осуществляющего передачу "вовне" (на ПК) - меньше 2 м.
5) на месте
6) нет, ошибки не контролируются в связи с тем что автор чайник и не знает как это делать)))


Цитата
уберите это - будет передаваться все, но появится другая гадость - если контроллер "отвалится" от сети, а потом снова подключится, то он "старые" данные выдаст на шину, т.е. нужно ловить Tx прерывания и их таймаут, чтоб сбросить выходное фифо

Имеется в виду, выставлять один и тот же кадр на выдачу несколько раз за цикл? Но по какому алгоритму это делать?

Цитата
Вообще причину легко будет понять, если проанализировать статусные регистры can-контроллера после каждой отправки/получения.

Какие имено поля CSR (CAN Status/Control Register) анализировать? LEC?

Цитата
В CAN сообщение считается переданным только тогда, когда все "сказали" что все до них дошло без ошибок.

Как это можно определить?
Выставляется ли контроллером какой нибудь флаг в CSR или Message Control Register, сообщающий о том, что именно все адресаты получили сообщение?

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

Да, мне тоже так казалосьsmile.gif
Но после цати тестов моего бага я уже ни в чем не уверен))
Go to the top of the page
 
+Quote Post
spf
сообщение Sep 30 2008, 16:17
Сообщение #18


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

Группа: Свой
Сообщений: 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
Vokchap
сообщение Sep 30 2008, 16:23
Сообщение #19


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

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



Цитата(spf @ Sep 30 2008, 19:06) *
Если контроллер так криво работает, то как вообще тогда можно работать с ним?

Учитывать это. Уже наступал на эти грабли.
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Sep 30 2008, 16:24
Сообщение #20


Местный
***

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



Цитата(spf @ Sep 30 2008, 20:17) *
Приплыли...

Ну так и формулируйте яснее: " когда все "сказали" " - вот "все" Вас и поняли... smile.gif

Под однократной передачей я имел ввиду вот что. У Infineon-a (прочитав в посте-вопросе про message objects я подумал, что CAN-контроллер тот-же) в CAN-контроллере можно задать однократный режим передачи, когда контроллер будет только один раз пытаться передать телеграмму не обращая внимание на ощибки и отсутствие подтверждения приема удаленной стороной.
Если выключить однократную передачу - будет ждать подтверждение (точнее пытаться передать "до посинения").
Go to the top of the page
 
+Quote Post
spf
сообщение Sep 30 2008, 16:27
Сообщение #21


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

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



Цитата(Fledgling @ Sep 30 2008, 22:09) *
Имеется в виду, выставлять один и тот же кадр на выдачу несколько раз за цикл? Но по какому алгоритму это делать?

Не надо ничего выставлять несколько раз.
Контроллер должен сам повторять сообщения, если на шине возникают ошибки. В некоторых контроллерах можно отключать автоматический повтор передачи сообщений (делать только одну попытку отправки). Видимо про это была речь.


Цитата(Vokchap @ Sep 30 2008, 22:23) *
Учитывать это. Уже наступал на эти грабли.

Это где такие грабли?


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


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

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



Цитата(Andrew2000 @ Sep 30 2008, 19:24) *
У Infineon-a (прочитав в посте-вопросе про message objects я подумал, что CAN-контроллер тот-же) в CAN-контроллере можно задать однократный режим передачи, когда контроллер будет только один раз пытаться передать телеграмму не обращая внимание на ощибки и отсутствие подтверждения приема удаленной стороной.

Тоже самое будет в любом другом, если используется TTC.

Цитата(spf @ Sep 30 2008, 19:27) *
Это где такие грабли?

У Атмэла. На сабжевом не проверял.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 30 2008, 16:32
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 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:33
Сообщение #24


Участник
*

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



Цитата(Andrew2000 @ Sep 30 2008, 22:24) *
Под однократной передачей я имел ввиду вот что. У Infineon-a (прочитав в посте-вопросе про message objects я подумал, что CAN-контроллер тот-же) в CAN-контроллере можно задать однократный режим передачи, когда контроллер будет только один раз пытаться передать телеграмму не обращая внимание на ощибки и отсутствие подтверждения приема удаленной стороной.
Если выключить однократную передачу - будет ждать подтверждение (точнее пытаться передать "до посинения").


Если не трудно подскажите, в каком месте это выставлялось у Infineon-a?
В описании CAN-контроллера своего процессора вообще такого не видел.
Go to the top of the page
 
+Quote Post
spf
сообщение Sep 30 2008, 16:37
Сообщение #25


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

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



Цитата(Dog Pawlowa @ Sep 30 2008, 22:32) *
Ага, так похоже и происходит :
"Для регистрации данных на ПК используется устройство IXXAT CAN II с драйвером третьей версии (с поддержкой .NET)."
Типичная реакция у Windows - 10 мс. Один передатчик тянет, а два уже нет.
"Приплыли"?

Нет, тут должно быть все достаточно чисто. Работает же USB и т.п. ;-)
В устройстве свои буфера должны быть достаточного размера.
Мы пользовали древний USB-CAN, все пахало на 1Мбит под виндами без потерь и напрягов.


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


Местный
***

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



Цитата(Dog Pawlowa @ Sep 30 2008, 20:32) *
"Для регистрации данных на ПК используется устройство IXXAT CAN II с драйвером третьей версии (с поддержкой .NET)."
Типичная реакция у Windows - 10 мс.

В дивайсе (IXXAT CAN II) стоит Freescale MCF5235, 150 MHz + SJA1000
а если это PCI-плата, то SAB XC16x
до виндов, думаю, далеко.

У Infineon-a было так:
Single Transmission Try
0 Single transmission try is disabled.
1 Single transmission try is enabled. The
corresponding TXRQ bit is reset immediately
after the transmission has started.
Go to the top of the page
 
+Quote Post
Fledgling
сообщение Sep 30 2008, 16:39
Сообщение #27


Участник
*

Группа: Новичок
Сообщений: 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
spf
сообщение Sep 30 2008, 16:46
Сообщение #28


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

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



Цитата(Fledgling @ Sep 30 2008, 22:39) *
У устройства есть внутренняя шина (для обмена данными между МК). Третий МК является своеобразным "шлюзом" - он транслирует все принятые внутренней шине кадры через контроллер CAN №2 на внешнюю шину - где приемник - ПК.

Такие пояснения добавляют неопределенности smile.gif
Вы бы нарисовали что же у вас там и как, что и хотите, что получается...
А так какие-то метания.

1) надо бы изучить матчасть поплотнее - протокол и используемый контроллер.
2) четко и ясно описать задачи каждого устройства и системы в целом.

PS:
В хорошем вопросе содержится большая доля ответа. Так уже начните задавать вопрос с чувством, с толком, с расстановкой. Когда будете все по местам расставлять, ответ должен сам и найтись. smile.gif


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


Гуру
******

Группа: Свой
Сообщений: 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, 16:56
Сообщение #30


Участник
*

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



Цитата(spf @ Sep 30 2008, 22:46) *
Такие пояснения добавляют неопределенности smile.gif
Вы бы нарисовали что же у вас там и как, что и хотите, что получается...
А так какие-то метания.

1) надо бы изучить матчасть поплотнее - протокол и используемый контроллер.
2) четко и ясно описать задачи каждого устройства и системы в целом.


Задача устройства - регулирование исполнительного механизма в соответствии с показаниями датчиков.
Например, обьясню на одном из регулируемых параметров:
МК1 читает данные с датчика температуры, получает значение Т1 и выставляет его на шину CAN.
МК2 читает данные со второго датчика температуры, получает значение Т2, выставляет на шину.

Процессор МК3 получает по шине оба значения, расчитывает результирующее Трез = (Т1+Т2)/2 с частотой 100Гц.
Каждый кадр имеет так называемый "счетчик обновляемости".
в 100Гц-м цикле счетчик обновляемости каждого кадра уменьшается на 1, если кадр пришел - устанавливается в первоначальное значение. Для Т1 и Т2 счетчик равен 10. Если счетчик кадра = 0 (значит кадр "не приходил" 10 стогерцовых циклов подряд) - устройство генерирует отказ по контролю температуры.
Так в принципе и отловили баг - периодически генерировался данный отказ (редко достаточно).
Потом уже стали процерять по инкрементирующимся счетчикам.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:05
Рейтинг@Mail.ru


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