Как запрограммировать простой слой CANopen - PullRequest
17 голосов
/ 05 августа 2009

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

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

Ответы [ 7 ]

9 голосов
/ 23 июля 2013

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

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

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

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

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

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

4 голосов
/ 22 июня 2012

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

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

3 голосов
/ 04 октября 2014

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

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

1 голос
/ 08 декабря 2009

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

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

1 голос
/ 05 августа 2009

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

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

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

0 голосов
/ 24 августа 2009

Другое коммерческое решение, с которым я работал, - Программное обеспечение IXXAT CANopen . Они предлагают порты для разных платформ.

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

0 голосов
/ 05 августа 2009

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

...