Программирование ARM CANopenNode Fri, December 06 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


CANopenNode Печать
Добавил(а) microsin   

CANopenNode это бесплатный стек CANopen с открытым исходным кодом [1]. Он написан на ANSI-C с применением объектно-ориентированного программирования. Работает на различных микроконтроллерах (в том числе и под RTOS), и как отдельное приложение. В стеке также имеется функциональность master-устройств. Реализацию функционала CANopen master для Linux см. в [2]. Все незнакомые термины и сокращения см. в [3].

Переменные - для обмена (communication), устройства (device), пользовательские (custom) - организованы в CANopen OD (словарь объектов), и он доступен в коде C и из сети CAN.

Реализованы функции:

• Простой NMT master.
• NMT slave (запуск, остановка, сброс подчиненного устройства).
• Контроль целостности сети по протоколу heartbeat (Heartbeat producer/consumer error control).
• Связывание объектов PDO (PDO linking), динамическое отображение объектов OD (dynamic mapping) для быстрого обмена данными переменных процесса (process variables).
• Ускоренная передача пакетов объектов SDO (expedited SDO), сегментированная передача SDO (segmented SDO) и блочная передача для сервисного доступа ко всем параметрам.
• SDO master.
• Экстренные сообщения аварии (Emergency message).
• Синхронизация (SYNC producer/consumer).
• Энерго-независимое хранилище конфигурации (Non-volatile storage).

[Как использовать]

Сама по себе библиотека CANopenNode не имеет полный рабочий код для всех микроконтроллеров. Это только библиотека со стеком и драйверами для нескольких различных микроконтроллеров. Здесь есть пример, который должен компилироваться на любой системе, где есть драйвер шаблона (drvTemplate), который в действительности не имеет доступа к аппаратуре CAN. Таким образом, библиотека CANopenNode должна использоваться как дополнительный подмодуль в проекте со специфической реализацией поддержки аппаратуры CAN и специфическим приложением.

Документация, поддержка. Код документирован в комментариях файлов заголовков. Запуск doxygen в базовой папке проекта сгенерирует полный комплект html-документации. Просто откройте CANopenNode/doc/html/index.html в браузере.

Сообщайте о багах и проблемах в трекере github.com/CANopenNode. Старая и новая группа обсуждения находится на Sourceforge.

Некоторые готовые реализации CANopenNode на реальной аппаратуре см. в таблице ниже. CANopenSocket это отличная реализация для устройств на базе Linux. Она включает интерфейс командной строки для доступа master к сети CANopen. Также там есть информация, полезная для быстрого старта.

Посильная помощь приветствуется. Самый лучший способ предоставить Ваш код - это сделать форк проекта, модифицировать его и отправить pull request.

На диаграмме ниже показана типичная реализация узла сети с применением CANopenNode.

CANopenNode typical implementation

[Файлы и папки]

Каталог/файлы Описание
CANopen.h/.c Инициализация и обработка объектов CANopen. Самая обычная реализация устройства CANopen.
stack Директория, где все объекты CANopen находятся в отдельных файлах.
   CO_Emergency.h/.c Объект CANopen Emergency.
   CO_NMT_Heartbeat.h/.c CANopen Network slave и объект Heartbeat producer.
   CO_HBconsumer.h/.c Объект Heartbeat consumer.
    CO_SYNC.h/.c Объект SYNC producer и consumer.
    CO_SDO.h/.c Объект сервера SDO. Обслуживает данные из OD.
   CO_PDO.h/.c Объект PDO. Конфигурирует, принимает и передает данные процесса CANopen (process data).
   CO_SDOmaster.h/.c Объект клиента SDO client (функционал master).
    CO_trace.h/.c Объект трассировки с меткой времени для мониторинга переменных из OD (использовать не обязательно).
    crc16-ccitt.h/.c  Объект вычисления CRC.
stack/drvTemplate Директория с файлами, относящимися к специфике определенного микроконтроллера. Служит шаблоном для новых реализаций (портирование стека на нужную аппаратную платформу). Он также подробно задокументирован, не так, как другие директории.
   CO_driver.h/.c Объекты, специфичные для микроконтроллера, относящиеся к модулю CAN.
    eeprom.h/.c Функции для реализации энергонезависимого хранилища OD (использовать не обязательно).
    helpers.h/.c Некоторые дополнительные, вспомогательные функции.
socketCAN Директория для интерфейса socketCAN Linux.
PIC32 Директория для устройств PIC32 от Microchip.
PIC24_dsPIC33 Директория для устройств PIC24 и dsPIC33 от Microchip.
dsPIC30F Директория для устройств dsPIC30F от Microchip.
eCos Директория для всех устройств, поддерживаемых eCos RTOS.
SAM3X Директория для устройств SAM3X ARM Cortex M3 с библиотекой ASF от Atmel.
STM32 Директория для устройств STM32 ARM от ST.
LPC177x_8x Директория для устройств LPC177x (Cortex M3) с FreeRTOS от NXP.
MCF5282 Директория для устройства MCF5282 (ColdFire V2) от Freescale.
codingStyle Описание стиля кодирования.
Doxyfile Конфигурационный файл для генератора документации doxygen.
Makefile Базовый makefile.
LICENSE Информация о лицензировании.
README.md Файл общего описания CANopenNode.
example Директория с базовым примером.
   main.c Основной поток и другие потоки - шаблон примера.
   application.h/.c Отдельный файл с некоторыми функциями, которые вызываются из main.c. Могут использоваться для специфического кода приложения.
   CO_OD.h/.c Словарь объектов CANopen (Object dictionary, OD). Автоматически генерируемый файл.
   IO.eds Стандартный файл EDS, который может использоваться из инструментария создания конфигурации CANopen. Автоматически генерируемый файл.
_project.xml Файл XML, содержащий все данные OD. Используется приложением редактора OD (Object dictionary editor), которое генерирует другие файлы. Редактор OD в настоящее время полностью функционален, однако это в сейчас старое web-приложение (см. [6]).
_project.html Запускает редактор OD.

[Поддержка микроконтроллеров]

Платформа/шаблон Состояние (дата) Хранилище OD Пример
drvTemplate OK template CANopenNode [1]
socketCAN (Linux) beta (2016) ДА CANopenSocket [2]
Microchip PIC32 (MPLABX) stable (2015) ДА CANopenPIC [4]
Microchip PIC24, 33 (MPLABX) stable (2015) нет
Microchip dsPIC30F (MPLABX) beta (2013) нет
LPC1768 (MBED) beta (2016) нет exmachina [5]
RTOS eCos stable (2013) ДА Старый репозиторий [6].
Atmel SAM3X ? ДА
ST STM32 ? нет
NXP LPC177x_8x ? нет
Freescale MCF5282 ? нет

Другие известные реализации с исходным кодом:

• AD ADSP-CM408 контролер сигналов (mixed signal controller), предоставленный Analog devices, Inc. (декабрь 2014), http://sourceforge.net/projects/canopennode-for-adsp-cm408f/

• Больше не поддерживаемые реализации ранних версий CANopenNode:

Microchip PIC18F
BECK IPC Embedded Web-Controller SC243

• Реализации некоторых других микроконтроллеров могут войти в состав CANopenNode.
• Каждая реализация должна иметь базовый пример, который может работать на реализованном микроконтроллере.
• Используйте drvTemplate в качестве шаблона. Другим шаблоном может выступать микроконтроллер PIC32, код для него поддерживается лучше всего.
• Удалите документирующие комментарии в CO_driver.h (из drvTemplate). Делайте только базовые комментарии, как это сделано для PIC32.
• Старайтесь держаться стиля оформления кода CO_driver.(c, h), чтобы файлы можно было проще сравнивать.
• В случае некоторых (незначительных) изменений в интерфейсе CANopenNode эти изменения будут внесены для всех микроконтроллеров.

CANopenNode распространяется под защитой GNU General Public License версии 2 с исключением classpath.

CANopenNode является свободным и открытым программным обеспечением: Вы можете распространять его и/или модифицировать, придерживаясь требований GNU General Public License, как это опубликовано организацией Free Software Foundation, либо версии 2 лицензии, либо (по Вашему выбору) более свежей версии лицензии.

Эта программа распространяется в надежде, что она будет полезной, но без каких-либо гарантий, что она будет успешно продаваться или подойдет к какому-то конкретному использованию. За подробностями обращайтесь к тексту GNU General Public License.

Вы должны получить копию GNU General Public License вместе с этой программой. Если нет, то см. http://www.gnu.org/licenses/.

[Исключение из GPL для линковки]

CANopenNode можно просто использовать в коммерческих встраиваемых проектах. Добавлено следующее разъяснение и специальное исключение линковки для правил распространения CANopenNode:

Линковка этой библиотеки статически или динамически с другими модулями образует комбинированный проект на базе этой библиотеки. Таким образом, правила и условия GNU General Public License распространяются на всю комбинацию кода проекта.

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

[Ссылки]

1. CANopenNode site:github.com.
2. CANopenNode/CANopenSocket site:github.com.
3. Обзор протокола CANopen.
4. CANopenNode/CANopenPIC site:github.com.
5. exmachina-dev/CANopenMbed site:github.com.
6. CANopenNode site:sourceforge.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page