|
Реализовать CANOpen на CAN МК Freescale DSP56F805, Разобрался с аппартным CAN, надо накрутить поверх CANOpen |
|
|
|
Aug 6 2009, 07:15
|
Группа: Участник
Сообщений: 14
Регистрация: 3-03-09
Пользователь №: 45 602

|
В этом МК есть аппаратный CAN интерфейс. С ним я разобрался, вот только могу пользоваться им лишь для связи с другим таким же МК. А мне требуется интегрироваться в сетку с протоколом CANOpen. Вопрос: Возможно ли такое выполнить ? И как ? Очень нужны базовые примеры и документы. Сам я пока лопачу документацию. Но без вашего опыта буду долго возиться. Уважаемое сообщество, прошу помощи.
|
|
|
|
|
 |
Ответов
|
Aug 12 2009, 08:20
|
Группа: Участник
Сообщений: 14
Регистрация: 3-03-09
Пользователь №: 45 602

|
Спасиб за мнение. На данный момент смотрю в сторону CANFestival.
|
|
|
|
|
Aug 29 2009, 18:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Phantom_ @ Aug 12 2009, 12:20)  На данный момент смотрю в сторону CANFestival. Тогда уж лучше CANopenNode - в нем исходники гораздо внятнее и есть хорошая документация по ним и примеры. Хороший покупной стек стоит очень дорого. На практике не требуются абсолютно все фичи CANopen. Да и не так уж и сложен CANopen. А сложности в нем другого рода: перестраховки на самые "нелепые" случаи работы других узлов и самого мастера сети, исчерпывающий набор методов отправки/приема важных и критичных ко времени данных и т.п. Но в большинстве узлов (девайсов) это все не нужно и хватает основных базовых возможностей CANopen (например, см. стек от Microchip). В моем случае я реализовывал CANopen slave самостоятельно (узлы для работы с ПЛК под CoDeSys). На полное понимание CANopen ушло около двух недель. Вполне достаточно одного документа DS301 и какого-нибудь "профильного" документа, например, DS401. Еще примерно месяц на реализацию (на С++ удалось отказаться от шаблонов). Конечно похвастаю: у меня получилось абсолютно кросплатформенное решение, хотя это - и не цель. Я не все сделал (просто не требуется для текущего проекта), но спроектирован практически весь стек CANopen. На одном кристалле могут абсолютно без ущерба друг другу работать более одного стека, каждый из которых может висеть на своем CAN драйвере (мне это нужно для реализации надежной сети с дублированием шин CAN - девайс далеко не бытового назначения). Вот пример простейшего проекта на моей реализации стека: Код // Экземпляр драйвера для работы с платформой TTargetSTM32 target;
// Экземпляр драйвера для работы с шиной CAN TCANDriverSTM32 driver;
// Экземпляр протокола CANopen TCANopenSlave CANopenSlave;
// Обязательные (mandatory = M) и необязательные (optional = O) объекты устройства TObject0x1000 deviceTypeObject; // Регистр типа устройства (M) TObject0x1001 errorRegisterObject; // Регистр ошибок (M) TObject0x1002 manufacturerStatusRegisterObject; // Регистр состояния от производителя (O) TObject0x1018 identityObject; // Объект идентификации устройства (M) TObject0x1400 receivePDO1_CommunicationParameter;
// ......
static unsigned numberOfRecievedFrames = 0; static TCANFrame recievedFrame;
int main() { CANopenSlave.run();
for (;;) { while (numberOfRecievedFrames > 0) { numberOfRecievedFrames--; CANopenSlave.dispatch(recievedFrame); } } }
// CAN RX0 interrupts requests extern "C" void USB_LP_CAN_RX0_IRQHandler() { numberOfRecievedFrames++; driver.getFrame(recievedFrame); }
void TTargetSTM32::initialize() // Инициализация платформы { setSystemFrequency(SYSTEM_FREQUENCY_72MHz); // .......... }
void TCANDriverSTM32::initialize() // Инициализация драйвера CAN { _configuration.portNumber = 0; _configuration.baudRate = BR_1000Kbps; }
void TCANopenSlave::initialize() { _configuration.deviceNodeId = 2; // TODO ???? _configuration.driverHandle = &driver; _configuration.targetHandle = ⌖ }
void TObject0x1000::initialize() { _deviceType.deviceDS401.digitalInputEnabled = true; _deviceType.deviceDS401.digitalOutputEnabled = true; _deviceType.deviceDS401.analogInputEnabled = false; _deviceType.deviceDS401.analogOutputEnabled = false; _deviceType.deviceDS401.specificFunctionality = 0; // No specific function }
void TObject0x1018::initialize() { _deviceIdentity.productCode = 0; _deviceIdentity.vendorID = 0; _deviceIdentity.revisionNumber.major = 1; _deviceIdentity.revisionNumber.minor = 0; _deviceIdentity.serialNumber = 0; }
// ...... К сожалению, код я не могу выкладывать - меня за это... чи-чи. Но, готов поделиться принципами реализации, если этого кого-то заинтересут. И с радостью выслушаю советы бывалых, да и просто советы, мнения. Кстати, скажу по-секрету, военные и космические заинтересовались CAN-ом. И можно понять почему: в настоящее время в отечественной авиации, космосе и войне для связи девайсов используется старая шина MIL-STD-1553 (успешно "спертая" военными у янков аж в далеком 1973). Так вот, трансивер + контроллер этой шины для одного узла стоит минимум 1000$ !!! Все решение полностью покупается у янок. А в космосе это обходится и того больше. А цена решения CAN шины обойдется в 1000 руб (для военных) или того меньше, если военные/космос догадаются купить исходники CAN-контроллера и запихать их в рад-стойкую ПЛИС.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
May 14 2010, 07:19
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата(Forger @ Aug 29 2009, 20:49)  Но, готов поделиться принципами реализации, если этого кого-то заинтересут. И с радостью выслушаю советы бывалых, да и просто советы, мнения. Привет. В общем я теперь вроде нахожусь на том уровне понимания стека, что как работает - понятно, но теперь вижу ущербность Open-source стеков и даже некоторых не-Opensource. Поэтому есть пара вопросов. 1. Я так понял что у Вас, как и у многих других реализаций, есть функция CANOPen.dispatch, которая должна циклически вызываться из главной программы и выполнять раскидку и создание PDO,SDO сообщений и реакцию на NMT. То есть время выполнения такой функции зависит от загрузки сети и точно не детерминировано - что мне как-то не нравится. Или это нормально? 2. Как у Вас выглядит Object Directory - просто массив данных одинаковой длины? Как вы к нему обращаетесь? Через функции, чтобы избежать порчи данных при чтении и чтобы CANopen знал, когда слать PDO? Или просто? 3. Как насчет NMT master и сервисов LSS. Реализовывали ли их? 4. Что посоветуете для первой попытки связи с CANopen устройством? У меня есть CANanalyzer с IXXATшным USB адаптером. Как я понял, NMT и PDO сообщения я еще смогу сгенерить самостоятельно, но SDO - надо бы что-то получше. Я думал, действительно какой-нибудь ПЛК взять для экспериментов, но не могу понять, какой. 5. Вы брали какой нибудь стек за основу или полностью свой лепили? 6. Отправка сообщений - используете ли Вы какой-нибудь буфер или по одному шлете?
|
|
|
|
Сообщений в этой теме
Phantom_ Реализовать CANOpen на CAN МК Freescale DSP56F805 Aug 6 2009, 07:15 Седой Цитата(Phantom_ @ Aug 6 2009, 13:15) В эт... Aug 9 2009, 18:06 AlexandrY CANopen так с бодуна не делается.
Помимо стека с р... Aug 9 2009, 19:12   Forger ЦитатаПоэтому есть пара вопросов.
1. Я так понял ч... May 15 2010, 05:07    syoma Цитата(Forger @ May 15 2010, 07:07) CANop... May 15 2010, 19:24     Forger ЦитатаЯ не имел ввиду со стороны стека, а как обст... May 16 2010, 07:27      garry_ Цитата(Forger @ May 16 2010, 11:27) ...
О... May 17 2010, 12:45       Forger Цитата(garry_ @ May 17 2010, 16:45) А у к... May 17 2010, 17:20 syoma Так все-таки CANopenNode или CANfestival?
Что лучш... Nov 5 2009, 08:12 Serega По мне так CANopenNode будет попроще в реализации ... Nov 9 2009, 07:58 syoma Я имел ввиду, конечно контроллер. Например STM32F.... Nov 9 2009, 20:00 Serega А что такое CANpie? Nov 16 2009, 15:18 syoma Я вот смотрю, что вы с STM32 работаете. Я тоже соб... May 17 2010, 09:13 syoma Спасибо за ответ
Цитата5 тыр. коробка USB-CAN
15 ... May 18 2010, 06:48 Forger ЦитатаАга, значит Вы еще и CANopen модуль к анализ... May 18 2010, 08:53  Marathon Цитата(Forger @ May 18 2010, 12:53)
Цит... May 18 2010, 13:42   Forger ЦитатаДанная "софтина" является бесплатн... May 18 2010, 18:43    Седой Цитата(Forger @ May 19 2010, 00:43) Что ж... May 19 2010, 14:24     garry_ Цитата(Седой @ May 19 2010, 18:24) C чего... May 19 2010, 14:55     syoma Цитата(Седой @ May 19 2010, 16:24) см. ht... May 20 2010, 07:14      garry_ Цитата(syoma @ May 20 2010, 11:14) IMHO -... May 20 2010, 07:15 repairDV Можно вопрос чуть-чуть в сторону от темы. Я, вообщ... May 18 2010, 22:53 Forger Цитата(repairDV @ May 19 2010, 02:53) Мож... May 19 2010, 04:40 repairDV MC56F8037 Freescale. Насколько я знаю, там к CAN н... May 19 2010, 07:11 Forger ЦитатаMC56F8037 Freescale.
Заходите на сайте Frees... May 19 2010, 07:29 syoma Привет. Если кому интересно.
Короче запустил я эт... Jul 26 2010, 15:45 Forger Цитата(syoma @ Jul 26 2010, 19:45) Короче... Jul 28 2010, 16:25  syoma Цитата(Forger @ Jul 28 2010, 18:25) Было ... Aug 2 2010, 08:05   Forger Цитата(syoma @ Aug 2 2010, 12:05) Вот что... Aug 2 2010, 08:38 DmitryDI Цитата(syoma @ Jul 26 2010, 19:45) Привет... Aug 5 2010, 12:04 Minti Цитата(syoma @ Jul 26 2010, 17:45) Привет... Jun 28 2011, 14:06 EvgeniyR Цитата(syoma @ Jul 26 2010, 18:45) Привет... Feb 5 2014, 12:29 syoma Цитатаобертка вокруг них создана на базе smart poi... Aug 3 2010, 08:08 Forger Цитата(syoma @ Aug 3 2010, 12:08) К сожал... Aug 3 2010, 10:15 syoma ЦитатаЕсли с контролер в мастер шлеца PDO, то как ... Aug 6 2010, 06:56 slimjack Добрый день!
Не хотел плодить новые ветки и ре... Feb 18 2011, 12:37 Ruslan1 вы очень все внятно разложили по полочкам
Мой оп... Feb 18 2011, 14:39 slimjack ЦитатаА Вы уверены что оно Вам надо (SDO)?
В сети ... Feb 18 2011, 15:13 Forger Цитата(slimjack @ Feb 18 2011, 18:13) По ... Feb 19 2011, 15:27 slimjack Все равно не понял на счет PDO.
ЦитатаУ каждого уз... Feb 19 2011, 21:06 Forger Цитата(slimjack @ Feb 20 2011, 00:06) Зна... Feb 20 2011, 06:17 slimjack ЦитатаЕсли вам не нравиться или не понятна логично... Feb 20 2011, 08:39 syoma ЦитатаCANopen изначально проектировался для ОДНОГО... Feb 21 2011, 08:17 Forger Цитата(syoma @ Feb 21 2011, 11:17) Откуда... Feb 21 2011, 19:55 slimjack Спасибо!
Похоже, что уже для меня все стало яс... Feb 21 2011, 09:51 syoma ЦитатаНо четыре PDO железно зафиксированы за одним... Feb 21 2011, 21:29 Forger ЦитатаНе железно, а назначены ему по умолчанию. Их... Feb 22 2011, 06:32 syoma ЦитатаВ них из 11 бит cobID 7 отводятся под номер ... Feb 22 2011, 07:55 Forger ЦитатаИз этих параметорв только SDO и NMT сообщени... Feb 22 2011, 08:40 slimjack А что если узел с одним nodeID будет использовать ... Feb 22 2011, 10:29 syoma ЦитатаА что если узел с одним nodeID будет использ... Feb 22 2011, 10:44 slimjack Т.е. 512 PDO одного направления - это чисто такая ... Feb 22 2011, 11:41 Forger Цитата(slimjack @ Feb 22 2011, 14:41) у о... Feb 22 2011, 11:54 slimjack Цитата1 бит - направление PDO (RPDO или TPDO)
Не п... Feb 22 2011, 12:41 Forger Цитата(slimjack @ Feb 22 2011, 15:41) Не ... Feb 22 2011, 14:15 syoma ЦитатаТ.е. 512 PDO одного направления - это чисто ... Feb 22 2011, 14:28 slimjack Ну теперь все ясно!
Спасибо за разъяснения все... Feb 22 2011, 15:18 syoma Смотрите это сообщение: http://electronix.ru/forum... Feb 23 2011, 07:51 GreyM Цитата(syoma @ Feb 22 2011, 14:44) Беспла... Apr 7 2011, 09:25 Minti E-MAIL не правильно написал и кнопку корректироват... Jun 28 2011, 16:59 yanvasiij Раз уж здесь собрались все знатоки CANopen, то спр... Jan 20 2012, 15:42 Forger Цитата(yanvasiij @ Jan 20 2012, 19:42) Кт... Jan 20 2012, 18:06  yanvasiij Цитата(Forger @ Jan 20 2012, 23:06) Да, з... Jan 21 2012, 17:53   Forger Цитата(yanvasiij @ Jan 21 2012, 21:53) Ск... Jan 21 2012, 19:14    yanvasiij Цитата(Forger @ Jan 22 2012, 00:14) Стран... Jan 21 2012, 19:40 yanvasiij Блин, да че такое?! Уже все весь мануал изрыл.... Jan 23 2012, 11:59 Forger Цитата(yanvasiij @ Jan 23 2012, 15:59) Бл... Jan 23 2012, 14:39 yanvasiij Могут ли ошибки в проекте быть причиной не сохнран... Jan 24 2012, 06:53 Forger Цитата(yanvasiij @ Jan 24 2012, 10:53) Мо... Jan 24 2012, 07:10 yanvasiij Проверил уже на трех машинах, нигде сохранить не п... Jan 24 2012, 07:12 Forger Цитата(yanvasiij @ Jan 24 2012, 11:12) Пр... Jan 24 2012, 10:12 yanvasiij выкладываю xdd файл, иначе никак )
Jan 24 2012, 11:36 Forger Цитата(yanvasiij @ Jan 24 2012, 15:36) вы... Jan 24 2012, 13:10 yanvasiij Проблема решена! Собака порылась в названиях д... Jan 25 2012, 04:27 yanvasiij Теперь у меня вопрос по самому протоколу. PDO, кот... Jan 25 2012, 09:59 Forger Цитата(yanvasiij @ Jan 25 2012, 13:59) Те... Jan 25 2012, 11:48 yanvasiij Проблема как раз таки в непонимании TFMа. Просто с... Jan 25 2012, 12:38 Forger Цитата(yanvasiij @ Jan 25 2012, 16:38) Пр... Jan 25 2012, 12:51 spectral1989 здравствуйте! ковыряю CanFestival. подскажите ... Aug 28 2012, 03:57 spectral1989 с gnosis.xml.pickle разобрался, установил либу. но... Aug 28 2012, 05:43 spectral1989 продвинулся еще чуток. файл objdictgen.py преобраз... Aug 29 2012, 11:15 Maks455 Здравствуйте.
2 недели назад начал изучать CANopen... Nov 7 2012, 18:40 syoma Если устройство реагирует на NMT и шлет Heartbeat,... Nov 8 2012, 07:33 Maks455 В том то и дело, что есть только CAN анализатор, и... Nov 8 2012, 10:58 syoma Какой CAN анализатор? Nov 8 2012, 11:21 Maks455 Microchip CAN BUS Analyzer. Nov 8 2012, 12:20 syoma Цитата(Maks455 @ Nov 8 2012, 14:20) Micro... Nov 8 2012, 13:52 spectral1989 ЦитатаПечально отлаживать протокол, не имея хотя б... Nov 9 2012, 01:27 syoma Я исходники вроде ж здесь выкладывал. Mar 5 2014, 09:47 VAlex999 Добрый вечер.
Тема прошлая, но всё же может у кого... Aug 24 2018, 21:26
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|