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

 
 
> Как реализовать обмен данными по CAN ?, новичёк я
Phantom_
сообщение Apr 22 2009, 10:30
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 3-03-09
Пользователь №: 45 602



Привет
Есть у меня МК Freescale DSP56F805.
На борту имеется модуль CAN. Я могу его программно включить, и пр.

Однако, не могу себе представить, как написать программу, т.е. принцип обмена данными.
Среда программирования Metrowerks CodeWarrior 5.6

Мне нужно обеспечить хотя бы 3 режима работы:
1) Из этого МК будут читаться данные для отображения на панельки;
2) Возможность отдавать команды для МК;
3) Обмен данными с соседними МК.

Не могу разобраться, как назначить МК ID. Как послать значение другому МК или панельке.
Помогите, тыкните носом куда смотреть, что прочесть. Рад буду увидеть огрызок функции/алгоритма послать/принять.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Чепурнов Алексан...
сообщение Apr 30 2009, 10:06
Сообщение #2





Группа: Новичок
Сообщений: 5
Регистрация: 14-08-08
Пользователь №: 39 606



Здравствуйте !
Зайдите к нам на сайт can.marathon.ru в раздел "Литература" там есть некоторые статьи на русском и в раздел "Протколы СAN" - там есть некоторые описания на русском. Для понимания описаний на английском есть очень хороший толковый словарь англо-русский http://www.can-cia.org/fileadmin/cia/pdfs/...onary-v2_ru.pdf
Если Вы имеете опыт программирования, то Вы можете скачать у нас в разделе "Программы" универсальный CHAI-драйвер для работы с CAN в исходных кодах с GNU-лицензией под Linux и использовать его как пример того как надо правильно программировать CAN-контроллеры и организовывать обмен. Почитайте внимательно описания. В принципе, это очень хорошо проработанный методологически и правктически проверенный на многих платформах подход для организации обменв по шине CAN.
Но, следует заметить, что CAN на уровне стандарта CAN2.0B НЕ РЕГЛАМЕНТИРУЕТ использование поля ID и поля DATA.
Т.е. Вам надо использовать или стандартизованнын протоколы (CANopen, J1939, CANaerospace, MILCan (DeviceNet не предлагаю, но тоже можно)) или придумать свой протокол. Т.е. придумать как данные и/или команды будут упаковываться в поля ID и DATA и как Вы будете идентифицировать узлы в Вашей CAN-сети.
Сразу хочу Вас предупредить :
- не используйте RTR бит (никогда)
- не используйте 29-битные идентификаторы (без сильной необходимости)
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 1 2009, 10:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Чепурнов Александр Сергеевич @ Apr 30 2009, 14:06) *
Сразу хочу Вас предупредить :
- не используйте RTR бит (никогда)
- не используйте 29-битные идентификаторы (без сильной необходимости)

Насчёт RTR бита (в стандартном понимании) пожалуй соглашусь т.к. CAN подразумевает мультимастерность (у кого случилось событие, тот и передаёт). Но для передачи данных этот бит использовать можно (для любителей поизвращатся).
Но вот насчёт 29 битных индентификаторов я имею прямо противоположное мнение т.к.:
1. Никто не запрещает передавать данные через ID. При упаковке туда 2-х байтов общее кол-во данных в пакете будет 10 байт, а не 8. Т.е. например адрес(2 байта)+данные(8 байт).
2. Данные, пересылаемые через ID, будут учавствовать в арбитраже. Т.е. если сделать правильно (в данных 0 важнее 1), то более важные данные передадуться быстрее.
3. Увеличивается кол-во приоритетов у сообщений. Т.е. одно и тоже сообщение (несколько бит в поле ID его тип) может иметь разные приоритеты (доп. биты в ID).
4. Никто не запрещает в одной сети использовать и 11 и 29 бит ID. И если нужны короткие сверхприоритетные сообщения, то можно послать их в формате с 11 бит ID.

А какие недостатки вы видите у 29 бит ID?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 2 2009, 07:50
Сообщение #4


Гуру
******

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



Цитата(galjoen @ May 1 2009, 13:20) *
Насчёт RTR бита (в стандартном понимании) пожалуй соглашусь т.к. CAN подразумевает мультимастерность (у кого случилось событие, тот и передаёт).

И что мультимастерность? Пусть она остается. RTR обеспечивает возможность одного устройства запросить конктретные данные у другого устройства, не гоняя напрасно потоки данных по шине.

Цитата(galjoen @ May 1 2009, 13:20) *
2. Данные, пересылаемые через ID, будут учавствовать в арбитраже. Т.е. если сделать правильно (в данных 0 важнее 1), то более важные данные передадуться быстрее.

А что важнее - ноль или единица?! biggrin.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 3 2009, 14:50
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Dog Pawlowa @ May 2 2009, 11:50) *
И что мультимастерность? Пусть она остается. RTR обеспечивает возможность одного устройства запросить конктретные данные у другого устройства, не гоняя напрасно потоки данных по шине.

CAN предполагает/позволяет, что устойства по СВОЕЙ инициативе будут передавать данные. Случилось к.л. событие у устойства - оно и шлёт сообщение об этом. Как вариант - данные изменились. Как вариант - по таймеру. Как вариант - сообщение "я ещё живой". А использование RTR предполагает протокол типа запрос/ответ. Т.е. фактически это уже не мультимастерность т.к. имеются ведущий (спрашивающий) и ведомый (отвечающий). И шина при этом загружается, наоборот, больше. Что-то типа RS485/модбас получается.
Цитата(Dog Pawlowa @ May 2 2009, 11:50) *
А что важнее - ноль или единица?! biggrin.gif

При использовании CAN следует считать, что ноль больше еденицы biggrin.gif
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 4 2009, 05:06
Сообщение #6


Гуру
******

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



Цитата(galjoen @ May 3 2009, 17:50) *
... И шина при этом загружается, наоборот, больше.

Философский вопрос. Я, например, старый маразматик, и люблю, когда устройство само знает названия переменных, доступных для изменения снаружи. Это текстовая строка до 80 байт. Подключив к шине компьютер, я могу универсальной программой прочитать и записать переменные, сопоставляя значения с информацией на человеческом языке, выводимой на экране, а не лазить по шпаргалкам или исходникам. Для этого компьютер спрашивает названия этих переменный у устройства. Без этой фичи шина была бы просто забита.

Цитата(galjoen @ May 3 2009, 17:50) *
При использовании CAN следует считать, что ноль больше еденицы biggrin.gif

Ну да ну да biggrin.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 5 2009, 11:21
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Dog Pawlowa @ May 4 2009, 09:06) *
Философский вопрос. Я, например, старый маразматик, и люблю, когда устройство само знает названия переменных, доступных для изменения снаружи. Это текстовая строка до 80 байт. Подключив к шине компьютер, я могу универсальной программой прочитать и записать переменные, сопоставляя значения с информацией на человеческом языке, выводимой на экране, а не лазить по шпаргалкам или исходникам. Для этого компьютер спрашивает названия этих переменный у устройства. Без этой фичи шина была бы просто забита.

1. Для этого необязательно использовать RTR.
2. При использовании RTR подразумеваетя, что использующий его, знает о том, что отвечающий находится в сети. А откуда взять эту информацию? Вот вы откуда знаете что вам ответят?
3. Я ввёл у себя такой режим "всем послать свои описатели" (они посылают их с низким приоритетом, конечно, и шина для высокоприоритетных сообщений свободна). При этом запрос только 1 (ко всем девайсам) т.е. шина (этим самым запросом) загружается меньше. И однов-но узнаю кто сейчас есть в сети (без ожидания сообщений "я жив").

Одновременно тут (п.3) вылезают преимущества 29 бит ID. Т.к. N девайса удаётся разместить в ID (у меня до 64 девайсов в сети одновр-нно) и он соотв-но участвует в арбитраже, то фактически данные приходят от всех устройств поочерёдно и "по старшинству". А был бы 11 бит ID - пришлось бы извращатся. Видимо тогда действительно RTR было бы лучше использовать. Не помню участвует RTR в арбитраже или нет.
Кстати, вообще не понимаю какие преимущества у 11 бит ID?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Phantom_   Как реализовать обмен данными по CAN ?   Apr 22 2009, 10:30
|- - Dog Pawlowa   Цитата(Чепурнов Александр Сергеевич @ Apr 30 ...   Apr 30 2009, 10:37
|- - Палыч   Цитата(galjoen @ May 5 2009, 14:21) Кстат...   May 5 2009, 11:37
||- - galjoen   Цитата(Палыч @ May 5 2009, 15:37) Наверно...   May 5 2009, 12:30
||- - Палыч   Цитата(galjoen @ May 5 2009, 15:30) Почем...   May 5 2009, 13:09
|- - Dog Pawlowa   Цитата(galjoen @ May 5 2009, 14:21) Кстат...   May 5 2009, 14:43
|- - galjoen   Цитата(Палыч @ May 5 2009, 17:09) От этог...   May 5 2009, 18:17
- - Phantom_   Очень интересно, вы продолжайте, а я поучусь уму-р...   May 5 2009, 07:45
- - Phantom_   Мужики, пока вы здесь, объясните мне, непонятливом...   May 8 2009, 05:19
|- - Палыч   Цитата(Phantom_ @ May 8 2009, 08:19) В ми...   May 8 2009, 07:14
- - DVF   ЦитатаЯ един в 2х лицах. Поэтому решил одному себе...   May 30 2009, 16:35


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:20
Рейтинг@Mail.ru


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