У меня похожая проблема с этим. Как запрограммировать простой слой CANopen .
Я читаю ответы, но мне нужно самостоятельно программировать слой CANopen, я не могу получить коммерческий. Итак, есть ли основы написания стека CANopen (или слоя, в котором я не уверен в разнице)? Я даже не знаю с чего начать ..
Если это необходимо, вот некоторая информация:
Мое мастер устройство — черная гончая кость с QNX. Я думаю, что в QNX есть общая библиотека CAN, но она не относится к CANopen. А мой раб — военизированный бесщеточный мотор-контроллер. Я пишу на C ++.
У меня есть документация об общих требованиях моей системы.
Имеется 2 RPDO и 4 TPDO, передача является синхронной, нет остановленного режима (поэтому нет сердцебиения и защиты узла), и указывается вся информация сообщения (размер, формат, идентификаторы связанных узлов и т. Д.)
На самом деле есть как минимум 4 проекта с открытым исходным кодом, которые реализуют CANopen:
Я бы разместил ссылки, но, видимо, мне не хватает «репутации».
openCANopen также включает в себя некоторые утилиты, такие как демон для пересылки трафика по TCP и программу, которая интерпретирует и выводит трафик CANopen на стандартный вывод.
Lely CANopen на самом деле имеет довольно приличное качество кода, и я мог бы использовать его, если бы он был доступен, когда я начал писать свою собственную реализацию. Однако я не пробовал использовать его, поэтому не могу сказать, какая реализация «лучше». Я могу только сказать, что они разные, и один или другой может удовлетворить ваши потребности лучше.
Теперь я сомневаюсь, что любая из этих реализаций будет работать прямо из коробки на QNX. Они либо должны быть адаптированы, либо вы можете скопировать отдельные части кода в свои собственные реализации. По крайней мере, это должно сэкономить вам время.
Быстрый и грязный обходной путь заключается в том, чтобы реализовать только минимум (просто не рекламируйте его как CANopen и не заявляйте о соответствии CANopen):
Если вам повезет, это все, что нужно. Если вам не повезет, будет SDO-коммуникация, а это значит, что вам придется внедрить SDO-протокол и весь объектный словарь. В остальном, вышесказанное довольно просто и не так много работы.
В случае, если вам нужен словарь объектов, тогда не может быть другого способа получить полноценный стек протоколов. Вам также необходимо подать заявку на идентификатор поставщика в CAN-in-Automation, но это единовременный сбор (без лицензионных платежей).