Как запрограммировать простой слой 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 или попытались найти какого-нибудь студента, который будет работать над проектом по контракту, если будет какое-то финансирование.