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

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

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

8 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Библиотека LibVCA из http://ortcan.sourceforge.net/ реализует протокол CANopen. Он работает с SocketCAN и LinCAN в системах на базе Linux, а также включает интерфейс для системы NuttX. Сопровождаемые утилиты реализуют динамически создаваемое устройство, которое заполняется в соответствии с предоставленной EDS и т. Д.

Вклады приветствуются, у меня есть знания о CANopen FD из процесса стандартизации, поэтому я могу наставлять студента или других людей, чтобы они добавили совместимость с CANopen FD или попытались найти какого-нибудь студента, который будет работать над проектом по контракту, если будет какое-то финансирование.

Другие вопросы по тегам