Jump to content

    
Sign in to follow this  
Phantom_

Реализовать CANOpen на CAN МК Freescale DSP56F805

Recommended Posts

А у кого вы купили за такую цену? На сайте марафона он 6 тысяч рублей стоит.

5 тыр. коробка USB-CAN

15 тыр. софт: CANWize+CANopen (DLL-ка)

Год назад покупали

 

Я вот смотрю, что вы с STM32 работаете. Я тоже собираюсь на нем реализовывать.

Вопрос - у вас, я так понял, реализация с использованем ООП?

 

Ну, типа того ;)

 

На CANopenNode - есть вариант обычной реализации и ООП - правда он еще полностью не протестеный, но доступный. Вот я и не понимаю, чего тот чел тоже перелез на объекты, если и без них все прекрасно работало. Зачем для микроконтроллера объектная реализация?

 

1. Простота реализации и отладки. Дешевле выходит, но требуются хороший навыки использования C++ и соотв. абстактное мышление. Мне последного слегка недостает ;)

2. Простота применения в новом очередном проекте. Это факт. Проект выходит предельно прозрачным.

3. Б'ольшая безопасность применения, из-за преимуществ C++.

4. Меньший объем кода (на С будет тяжелее из-за больших проблем с правильным проектированием). Проверял.

Но данных (ОЗУ) нужно больше. Хотя и это решаемо.

 

 

Или может есть весомые преемущества ООП реализации CANopen стека, по сравнению с обычной реализацией, с точки зрения понимаемости программы в будущем и расширяемости, если основное приложение будет оставаться обычным - без объектной реализации?

В том-то все и дело, что если основное приложение тоже - ООП, то применения CANopen стека, RTOS (у меня C++ обертка для TNKernel, так намного удобнее), других стеков (TCP/IP, например) становиться намного удобнее и меньше ошибок.

 

Что-то типа этого:

class TApplication
{
public:
//    TApplication(void);
    void initialize(void);
    void run(void);
    inline void synchronize(void) { _rtos.synchronize(); } 

private:
    class TThreadCANopen : public TThread<THREAD_CAN_OPEN_STACK_SIZE>
    {
        virtual void initialize(void * bodyArgument);
        virtual void body(void);
        THardwareSTM32 *    _hardware;
        TCANopenSlave        _CANopenSlave;
        TEventSemaphore        _isRecievedCANFrame;
    };
    
    class TThreadLeds : public TThread<THREAD_LEDS_STACK_SIZE>
    {
        virtual void initialize(void * bodyArgument);
        virtual void body(void);
        TTargetSTM32 * _target;
    };

    class TThreadWatchDog : public TThread<THREAD_WATCH_DOG_STACK_SIZE>
    {
        virtual void initialize(void * bodyArgument);
        virtual void body(void);
        TTargetSTM32 * _target;
    };

private:
    TKernel            _rtos;
    TTargetSTM32        _target;
    TThreadCANopen        _threadCANopen;
    TThreadLeds        _threadLeds;
    TThreadWatchDog        _threadWatchDog;
};

void TApplication::initialize(void)
{
    _rtos.initialize();
    _target.initializeSystem(SYSTEM_FREQUENCY_72MHz);
    _target.initializeMainTimer(1); // Период 1 мс
    _target.initializePorts();
}


void TApplication::run(void)
{
//    _threadCANopen.run("CANopen", THREAD_CAN_OPEN_PRIORITY, &_target);
    _threadLeds.run(THREAD_LEDS_PRIORITY, &_target);
    _threadWatchDog.run(THREAD_WATCH_DOG_PRIORITY, &_target);
    _rtos.run(); // Never returns here
}




TApplication application;

int main()
{
   application.initialize();
   application.run();
}

extern "C" void SysTickHandler() 
{ 
   application.synchronize();
}

void TApplication::TThreadLeds::initialize(void * bodyArgument) 
{ 
   _target = (TTargetSTM32*)bodyArgument; 
}

void TApplication::TThreadLeds::body(void)
{
   _target->setPinToLOW(PORT_LED_GREEN, PIN_LED_GREEN);    // Включить зеленый светодиод
   sleep(50);
   _target->setPinToHIGH(PORT_LED_GREEN, PIN_LED_GREEN);    // Выключить зеленый светодиод
   sleep(50);
}

void TApplication::TThreadWatchDog::initialize(void * bodyArgument) 
{ 
   _target = (TTargetSTM32*)bodyArgument; 
   _target->initializeWatchDogTimer(12); // Период сторожевого таймер 12 мс
}

void TApplication::TThreadWatchDog::body(void)
{
   _target->updateWatchDogTimer(); // Сбрасывать сторожевой таймер каждые 10 мс
   sleep(10);
}

 

ПС. Я это спрашиваю еще потому, что посмотрел документацию на основные коммерческие CANopen стеки от IXXAT, Vector и т.д - там все без ООП. Но это наверное в угоду портируемости.

 

Пожалуй,...

К тому же далеко не для всех процов есть C++ компилер.

Share this post


Link to post
Share on other sites

Спасибо за ответ

 

5 тыр. коробка USB-CAN

15 тыр. софт: CANWize+CANopen (DLL-ка)

Ага, значит Вы еще и CANopen модуль к анализатору докупали.

Блин, а он дороже чем сам анализатор будет.

Share this post


Link to post
Share on other sites
Ага, значит Вы еще и CANopen модуль к анализатору докупали.

Блин, а он дороже чем сам анализатор будет.

А как иначе?

По опыту работы с этим набором скажу, что CANopen DLL-ка от Марафон не особо нужна -

она там весьма упрощенная, поэтому все можно сделать без нее.

Достаточно купить софтину CANwize, впрочем, даже эта софтина не блещет удобствами.

Вполне можно написать софтину своими силами. Благо марафоновцы дают исчерпывающий

набор примеров и документации на USB-CAN коробку.

Однако, есть у этой коробки одна серьезная беда.

При очень интенсивном обмене по шине (1 МБит скорость, кадрый сыпяться без перерыва) -

эта коробка теряет кадры и получает некоторые битыми.

Буфер в ней забивается настоко, что драйвер не успевает выбирать все кадры.

Явные софтовые проблемы.

Я бы все-таки не советовал покупать этот вариант, несмотря на его очень низкую цену.

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

Или вовсе убедил бы боссов купить этот набор.

А делать свою коробку USB-CAN не советую - на первых порах лучше, чем у марафон не выйдет, а обойдется намного дороже. Да и времени на это тоже нужно немало - много заморочек и косяков с софтовой частью: прошивка контроллера, драйвер под винду, софт для пользователя.

Share this post


Link to post
Share on other sites

 

По опыту работы с этим набором скажу, что CANopen DLL-ка от Марафон не особо нужна -

она там весьма упрощенная, поэтому все можно сделать без нее.

Вполне можно написать софтину своими силами. Благо марафоновцы дают исчерпывающий

набор примеров и документации на USB-CAN коробку.

По-видимому, Вы имеете ввиду CANopen анализатор. Это лишь один из модулей набора, который и должен быть достаточно простым. Ведь большинство CANopen протоколов являются "однокадровыми" т.е. поддерживаются одним CAN кадром канального уровня. Анализатор лишь интерпретирует такие кадры в терминах стандарта CANopen DS301.

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

 

Достаточно купить софтину CANwize, впрочем, даже эта софтина не блещет удобствами.

Данная "софтина" является бесплатным приложением к любому CAN контроллеру Марафон и может быть загружена с сайта компании. Стоимость CAN-USB интерфейса - 5000 рублей без НДС, CANopen анализатора - 9500 рублей без НДС.

 

Однако, есть у этой коробки одна серьезная беда.

При очень интенсивном обмене по шине (1 МБит скорость, кадрый сыпяться без перерыва) -

эта коробка теряет кадры и получает некоторые битыми.

Буфер в ней забивается настоко, что драйвер не успевает выбирать все кадры.

Явные софтовые проблемы.

Я бы все-таки не советовал покупать этот вариант, несмотря на его очень низкую цену.

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

Или вовсе убедил бы боссов купить этот набор.

Есть такая беда-проблема. Она связана с использованием устаревшего FTDI USB контроллера, а также с некоторыми ограничениями используемого USB протокола. У IXAAT контроллеров таких проблем нет - сказывается почти 15 летняя фора по CAN разработкам, да и возможность привлечь к ним заметно бОльшие ресурсы. Вместе с тем, отметим, что такая ситуация (минимум проблем) наблюдается лишь у CAN разработчиков первого эшелона (Vector, IXXAT). Нам доводилось сталкиваться с CAN-USB интерфейсом, также разработанным в Германии, который при переполнении буферов на максимальном CAN трафике просто и тихо зависал. Марафоновский контроллер, теряя кадры, не виснет, но ругается, сообщая о различных оверранах и прочих неприятностях.

В настоящее время Марафон выпускает новый вариант CAN-USB контроллера. Он является двухканальным и свободен от недостатка производительности, в том числе на максимальной скорости CAN сети 1 Мбит.

Share this post


Link to post
Share on other sites
Данная "софтина" является бесплатным приложением к любому CAN контроллеру Марафон и может быть загружена с сайта компании.

Что ж, выходит, что набор от Марафон вообще самый дешевый! :disco:

 

Есть такая беда-проблема. Она связана с использованием устаревшего FTDI USB контроллера, а также с некоторыми ограничениями используемого USB протокола.

В настоящее время Марафон выпускает новый вариант CAN-USB контроллера. Он является двухканальным и свободен от недостатка производительности, в том числе на максимальной скорости CAN сети 1 Мбит.

Тоже за 5 тыр? :08:

 

 

А не планируете CAN-ETHERNET коробку?

Очень была бы удобна.

Share this post


Link to post
Share on other sites

Можно вопрос чуть-чуть в сторону от темы. Я, вообще-то, пользуюсь CodeWarrior 8.2. В нём вроде CAN не программируется. Вы как его программируете?

Share this post


Link to post
Share on other sites
Можно вопрос чуть-чуть в сторону от темы. Я, вообще-то, пользуюсь CodeWarrior 8.2. В нём вроде CAN не программируется. Вы как его программируете?

Компилятор и среда тут не имеют значения.

Какой контроллер?

Share this post


Link to post
Share on other sites
Что ж, выходит, что набор от Марафон вообще самый дешевый!

 

C чего бы это.

 

см. http://projects.caxapa.ru/?ID=23

 

Двухканальные на Cortex-M3 будут в районе 3000 - 3500 http://www.mcutool.ru/products/connectivit...ser/us-can.aspx

 

Одноканальные, недорогие ( но без пропуска пакетов) - 1500-2000 http://www.mcutool.ru/products/connectivit...n/uccanlhs.aspx

 

В начале июня начнем.

Share this post


Link to post
Share on other sites
C чего бы это.

 

см. http://projects.caxapa.ru/?ID=23

 

Двухканальные на Cortex-M3 будут в районе 3000 - 3500 http://www.mcutool.ru/products/connectivit...ser/us-can.aspx

 

Одноканальные, недорогие ( но без пропуска пакетов) - 1500-2000 http://www.mcutool.ru/products/connectivit...n/uccanlhs.aspx

 

В начале июня начнем.

 

А софт какой ? Чето по ссылке не нашел, так железку можно за пару дней сделать, прицепить SJA1000 к FT2232HL (апноут даже есть)

Share this post


Link to post
Share on other sites
см. http://projects.caxapa.ru/?ID=23

 

Двухканальные на Cortex-M3 будут в районе 3000 - 3500 http://www.mcutool.ru/products/connectivit...ser/us-can.aspx

 

Одноканальные, недорогие ( но без пропуска пакетов) - 1500-2000 http://www.mcutool.ru/products/connectivit...n/uccanlhs.aspx

 

В начале июня начнем.

 

IMHO - Это все игрушки для наколенных проектов. Сам в свое время такой CAN-анализатор купил - поигрался и на полку положил. Потому, что смысл не в железе а в софте.

Во первых драйвера - тот же адаптер от IXXAT имеет драйвера и под LabView и под MATLAB и библиотеки под C - куда хочешь его прилепить можно. А тот, что за 70$ - с каким софтом его можно будет использовать?

Тот же CANanalyzer - жалко, что нет взломаного, намного круче любого монитора, который идет в комплекте со всеми этими игрушками. Про более навороченые вещи типа CANopen модуля я вообще молчу - их просто для таких девайсов нет и не будет.

Так что, если на фирму брать - это 100% выкинутые на ветер деньги. Купите IXXAT CAN-to-USB - за 300$ и этот адаптер 10 лет будет работать и дрова на него всегда будут, а разработчики спасибо скажут. Эта инвестиция намного лучше.

Share this post


Link to post
Share on other sites
IMHO - Это все игрушки для наколенных проектов. Сам в свое время такой CAN-анализатор купил - поигрался и на полку положил. Потому, что смысл не в железе а в софте.

Во первых драйвера - тот же адаптер от IXXAT имеет драйвера и под LabView и под MATLAB и библиотеки под C - куда хочешь его прилепить можно. А тот, что за 70$ - с каким софтом его можно будет использовать?

Тот же CANanalyzer - жалко, что нет взломаного, намного круче любого монитора, который идет в комплекте со всеми этими игрушками. Про более навороченые вещи типа CANopen модуля я вообще молчу - их просто для таких девайсов нет и не будет.

Так что, если на фирму брать - это 100% выкинутые на ветер деньги. Купите IXXAT CAN-to-USB - за 300$ и этот адаптер 10 лет будет работать и дрова на него всегда будут, а разработчики спасибо скажут. Эта инвестиция намного лучше.

+1

Share this post


Link to post
Share on other sites

Привет. Если кому интересно.

Короче запустил я этот CANfestival на STM32F103. Заняло это дело 2 месяца подходов к компьютеру и чтения документации и аж 2 дня на перелопачивание драйверов на CAN контроллер и таймер. Исходники могу выложить.

Аж сам удивился, но буквально при первой компиляции эта штука запустилась и начала генерить heartbit и даже реагировать на NMT команды.

На следующий день запустил PDO обмен - тоже работает без проблем. Несмотря на приличную навороченность (стек занял 20кБ места в МК) стек пока выглядит довольно стабильно. Работает все - и SDO и PDO и NMT сервисы (на слэйве).

Вчера даже получилость прикрутить к нему запись параметров во FLASH, а-ля EEPROM. Правда не все скопом, а для заданных объектов при записи.

2 Штуки мне очень понравились по сравнению с CanOpenNode.

1. Во-первых тут есть редактор eds файлов (правда хитро устанавливается, но вполне сносно) который позволяет создать профиль своего устройства и затем по этой информации генерирует .с и .h файлы для стека и сам .eds файл. Работает очень не плохо. Созданные файлы просто копируются в проэкт и перекомпилируются, а eds файл скармливается программе - монитору CANopen шины. О ней дальше внизу.

2. Во-вторых CANfestival имеет намного более развитые возможности. Например программа пользователя общается со стеком только через глобальные переменные, которые являются объектами словаря. При приходе нового PDO переменные сами собой обновляются. При изменении переменной программой - нужно только выполнить функцию послыки PDO и CANfestival сам определит, какая переменная в какой PDO пойдет и нужно ли его слать. Даже по таймеру все работает.

В общем я доволен пока.

Кстати насчет программы. Есть такой сайт: http://www.canwizard.de Там можно скачать одноименную программу.

Она хоть и предназначена для лифтов, но достаточна полезна и для простых CANopen сетей. Она позволяет подключаться к CANopen сети, искать узлы, читать eds файлы, генерить NMT и LSS команды, общаться с любыми узлами по SDO протоколу и т.д. Даже софт по сети обновлять может. Правда лог файлы она не ведет. Единственное ограничение, что бесплатная версия может работать толька максимум с тремя узлами. Поддерживает она Vector, Ixxat, Peak адаптеры.

Share this post


Link to post
Share on other sites
Короче запустил я этот CANfestival на STM32F103. Заняло это дело 2 месяца подходов к компьютеру и чтения документации и аж 2 дня на перелопачивание драйверов на CAN контроллер и таймер. Исходники могу выложить....

Было бы очень интересно взглянуть и сравнить!

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this