Как запрограммировать простой слой CANopen

У нас есть проект робота, в котором контроллеры двигателей используют для связи CANopen. Мне нужно связаться с этими контроллерами двигателей с помощью главного микроконтроллера. Проблема в том, что мне нужно разработать уровень CANopen в этом микроконтроллере, но я знаю только, как отправлять и получать на низком уровне (CAN).

Я мало что знаю о CANopen (PDO, SDO, Heartbeat, объектный словарь и т. Д.). Я пытался прочитать спецификации CiA, но это было очень сложно. Я был бы признателен, если бы кто-нибудь мог указать мне правильное направление или дать мне хорошее руководство по программированию простого слоя CANopen.


person Community    schedule 05.08.2009    source источник
comment
У вас есть другие вопросы о canopen, stackoverflow.com/questions/tagged/canopen (очевидно, ничего полезного, но кто знает ...)   -  person Johan    schedule 05.08.2009


Ответы (7)


Поскольку эта тема, кажется, представляет общий интерес - я согласен с тем, что понимание полных исходных спецификаций может быть несколько болезненным опытом. Итак, вот предложение, как «запустить двигатель», а не «реализовать все»:

  • Проверьте, могут ли ваши приводы CANopen управляться через стандартные объекты CiA 402, и по соображениям производительности было бы совершенно нормально НЕ настраивать и использовать PDO, и вам действительно не нужен heartbeat, a.s.o. Обычно это переключение конечного автомата привода (объект 6040h, управляющее слово), установка режима работы (объект 6060h) и установка дополнительных параметров, таких как «скорость положения профиля».

  • Затем реализуйте только ускоренную передачу SDO. (См. http://en.wikipedia.org/wiki/CANopen.) Загрузка SDO предназначена для записи / изменения объекта. в вашем приводе. Загрузка SDO предназначена для чтения объекта.

  • Я предлагаю взять программное обеспечение для ПК, которое может читать и записывать SDO и имеет монитор шины CAN. (Наше бесплатное программное обеспечение Kickdrive Zero может это сделать, но на самом деле любой другой инструмент ПК для CANopen должен работать .) Сделайте несколько примеров чтения и записи для нужных вам типов данных и объектов. Посмотрите, как это переводится в кадры на уровне CAN. Для базовых целочисленных типов данных всегда один кадр для запроса, один для ответа.

  • Теперь создайте упрощенный стек протоколов на своем микроконтроллере, который может отправлять запросы загрузки / выгрузки SDO и обрабатывать ответы.

Отказ от ответственности - вышесказанное даже близко не к «реализации CANopen», «поддержке CANopen» или даже «совместимости с CANopen». Речь идет о том, чтобы «заставить ваш диск двигаться как можно скорее и без стороннего кода». Иногда это правильно.

person Oliver Heggelbacher    schedule 23.07.2013
comment
Я обнаружил, что фундаментальным является также реализация TxPDO, чтобы избежать загрязнения шины периодическими запросами SDO. В конце сопоставление представляет собой пригоршню записи SDO, и вы можете просто проанализировать ожидаемые пакеты TxPDO. - person ntd; 10.05.2017
comment
Я понимаю вашу точку зрения, но считаю, что это зависит от приложения. Первоначальный вопрос был о том, нет ли более простого способа ?. Я не считаю сопоставление PDO и его конфигурацию через SDO более простыми аспектами CANopen. Все зависит от количества узлов и времени цикла, которое вам действительно нужно. - person Oliver Heggelbacher; 16.05.2017
comment
Что ж, само отображение PDO довольно просто (4 или 5 записей SDO). ИМО, обработка ответа - большая работа, но (опять же ИМО) сопоставимая, если не меньше, чем цикл опроса SDO (в конце концов, вы определенно хотите получить входные данные). И это в точности то, что я сделал в библиотеке CANopen для LabVIEW. - person ntd; 16.05.2017
comment
Вау, ntd, спасибо за ссылку на вашу библиотеку CANopen LabVIEW! Это выглядит очень интересно! - person Oliver Heggelbacher; 24.05.2017

Мы реализовали наш слой CANopen с нуля как для встроенных устройств ARM, так и для ПК с Windows. Это не невозможно, в отличие от предыдущих ответов, которые могут заставить вас задуматься. Если вам нужны только базовые функциональные возможности CANopen и вы можете быстро изучить концепции протокола, вы можете довольно быстро приступить к работе.

Вам придется прочитать спецификацию CiA, избежать этого невозможно, но поначалу это может показаться несколько утомительным. Я рекомендую вам начать с чтения "Встроенные сети с CAN и CANopen" Пфайффера, Эйра и Киделя. Он хорошо объясняет основные концепции, что, в свою очередь, помогает лучше понять спецификацию.

person Alex    schedule 21.06.2012
comment
Да, вы можете быстро реализовать большинство вещей самостоятельно. Но, как уже указали некоторые люди, если вам нужна соответствующая стандарту реализация, которая может взаимодействовать с другими совместимыми со стандартом узлами CANopen, тогда вам будет дешевле купить коммерческий стек, чем написать его самостоятельно. - person Simon Byholm; 10.03.2014
comment
Если вы работаете над проектом с открытым исходным кодом, образовательным или некоммерческим проектом, есть также две кнопки CANopens с открытым исходным кодом, которые можно использовать совершенно бесплатно. Найдите CANFestival и CANopenNode в Google. - person Simon Byholm; 10.03.2014
comment
@SimonByholm CANfestival находится под LGPL, а CanOpenNode находится под GPL с исключением связи, поэтому оба могут использоваться в коммерческих проектах. - person ntd; 26.05.2017
comment
@ntd LGPL проблематичен для многих компактных встраиваемых систем, поскольку все статически связано. - person Simon Byholm; 27.06.2017

Попробуйте использовать стек CanFestival - он бесплатный и легко переносится с таких операционных систем, как Linux, на голые машины, у которых просто установлен таймер.

4-6 месяцев кажутся немного растянутыми - вам может понадобиться только мастер или подчиненный, и мы сделали реализацию на C ++ только для мастера за 3-4 недели.

person Larry_C    schedule 04.10.2014

Мы используем стек MicroCANopen с надстройкой Manager, отсюда: http://www.canopenstore.com/pip/microcanopen.html

Это относительно дешево по сравнению с другими стеками, хотя мы используем его на всех узлах в нашей сети, поэтому я не могу рассказать, как он работает с другими CANOpen-совместимыми устройствами.

person Jason Machacek    schedule 08.12.2009

К сожалению, не существует простого уровня CANopen. Чтобы поддерживать CANopen, вы должны реализовать все это.

Я предлагаю вам купить библиотеку CANopen у стороннего поставщика. Обычно они недешевы, но, учитывая время, которое вам понадобится, чтобы реализовать это самостоятельно, это дешевле, чем ваша зарплата на то время.

Мы использовали от PORT GmbH Библиотека ANSI-C CANopen, которая имеет умеренную цену и имеет очень мало ошибок по сравнению с другими библиотеками, которые мы пробовали.

person Stefan    schedule 05.08.2009

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

person robert.berger    schedule 05.08.2009

Еще одно коммерческое решение, с которым я работал, - это программное обеспечение CANopen от IXXAT. Они предлагают порты для множества различных платформ.

Как уже было сказано ранее: вы не получаете это бесплатно и не дешево. Но что такое несколько тысяч долларов по сравнению с несколькими месяцами разработки?

person chrmue    schedule 24.08.2009