Обмен данными по протоколу CANopen между двумя узлами с использованием пакета python canopen

У меня есть два устройства USB to CAN (can0 и can1), оба они подключены к машине Linux, на которой установлен socketcan. Я прочитал основы протокола CANopen, я не видел ни одного примера, который мог бы установить связь между двумя устройствами CANopen с использованием библиотеки Python CANopen.

Я прочитал в документации, что у каждого устройства должен быть файл .eds, поэтому я взял образец файла .eds из библиотеки Python CANopen из christiansandberg github и попытался установить связь и заставить их разговаривать друг с другом с помощью PDO, но я не смог в состоянии сделать это.

У нас есть батарея, и мы хотели с ней связаться, батарея работает по протоколу can-open, и они предоставили файл .eds для батареи. Я предполагаю, что устройство usb2can с библиотекой CANopen Python может сделать эту работу. Но я просто не знаю, как установить связь между устройством usb2can и аккумулятором. Это было бы полезно с любыми мыслями о создании пакетов.


person the_shark    schedule 29.04.2021    source источник
comment
Я читал в документации, что у каждого устройства должен быть файл .eds. Нет, у них нет, это только в том случае, если вы не знаете, как они отображаются. Если вы знаете, как сопоставляются оба устройства (поскольку они созданы вами), то вам не нужен .eds. В основном они используются для ПЛК и т.п.   -  person Lundin    schedule 29.04.2021
comment
В любом случае, CANopen довольно большой и сложный, поэтому этот вопрос слишком широкий. Вы должны сузить его до более конкретной проблемы, желательно той, которую можно воспроизвести.   -  person Lundin    schedule 29.04.2021
comment
@Lundin Спасибо за ваш быстрый ответ, я пытаюсь сделать вышеупомянутое, чтобы понять, как работает библиотека canopen python. но реальная проблема для нас в том, что у нас есть батарея, и мы хотим с ней связаться, батарея работает по протоколу can-open, и они предоставили файл .eds для батареи. Я предполагаю, что устройство usb2can с библиотекой python canopen может сделать эту работу. но я просто не знаю, как установить связь между устройством usb2can и аккумулятором. было бы полезно для любых идей при формировании пакетов.   -  person the_shark    schedule 29.04.2021


Ответы (1)


Вот что вам нужно сделать:

  • Получите необходимые инструменты для разработки CAN-шины. Это означает некоторый способ прослушивания CAN в дополнение к вашему собственному приложению. Это также означает кабели + оконечные резисторы. Самый простой - использовать dsub-коннекторы DB9. Также настоятельно рекомендуется осциллограф.
  • Прочтите документацию об устройстве, чтобы выяснить, как установить идентификатор узла и скорость передачи или, по крайней мере, какие настройки по умолчанию оно использует.
  • Узнайте, какой профиль устройства использует устройство, если таковое имеется. Самым распространенным из них является универсальный модуль ввода-вывода CiA 401. В этом случае настройками по умолчанию будет идентификатор узла 1, скорость передачи 125 кбит / с.
  • Ваше приложение должно будет действовать как NMT Master - главный управляющий сетью - на этой шине. То есть узел, отвечающий за отслеживание всех остальных узлов.
  • Если устройство совместимо с CANopen и вы установили, какую скорость передачи и идентификатор узла оно использует, вы получите сообщение загрузки NMT при включении питания. Скорее всего, с узла 1, если вы не изменили идентификатор узла устройства.
  • Вам нужно будет отправить на устройство сообщение о запуске удаленного узла NMT, чтобы перевести его из подготовительного состояния в рабочее.
  • В зависимости от того, какой профиль устройства использует устройство, теперь оно может ответить, отправив все свои включенные данные PDO один раз, обычно с нулевым значением.
  • Теперь проверьте документацию устройства, чтобы узнать, какие данные хранятся в каком PDO. Вам нужно будет сопоставить TPDO с устройства с RPDO в вашем приложении и наоборот. У них должны быть одинаковые идентификаторы COBID - CAN, но также одинаковый размер и т. Д.
  • COBID задается в настройках связи PDO в словаре объектов. Если вам нужно изменить настройки устройства, это нужно сделать с SDO-доступом к словарю объектов устройства.
  • Более продвинутые параметры включают сопоставление PDO, где вы можете решить, какие части данных, которые вас интересуют, входят в какой PDO. Не все устройства поддерживают динамическое сопоставление PDO - оно может использовать статическое сопоставление PDO, и в этом случае вы не можете изменить место вывода данных.
  • Другой полезный материал - это функции CANopen СОХРАНИТЬ / ЗАГРУЗИТЬ, если устройство их поддерживает. Затем вы можете сохранить свою конфигурацию на постоянной основе, чтобы вашему приложению не приходилось отправлять SDO при запуске для конфигурации каждый раз, когда используется система.
  • Heartbeat может быть полезно включить, чтобы гарантировать, что устройство работает на регулярной основе. После этого ваше приложение будет действовать как потребитель Heartbeat.
person Lundin    schedule 30.04.2021