Что такое отображение PDO?

После прочтения нескольких спецификаций CiA мне все еще трудно разобраться в отображении PDO, образе процесса и обмене данными процесса в CANopen.

Я знаю, что SDO используется для настройки конфигурации в предоперационном состоянии и имеет служебные данные протокола (так как он может передавать более 8 байтов данных).

В рабочем состоянии PDO хорошо подходят для ввода и вывода данных процесса. PDO могут передавать максимум 8 байтов данных.

Имеется 11-битный идентификатор COB-ID, который имеет код функции и номер узла. Поскольку номер узла использует 7 битов, мы можем иметь максимум 127 узлов (для сети CANopen 2.0A).

Но есть четыре TPDO и четыре RPDO, что меня смущает. Зачем вам нужно несколько TPDO и RPDO? Также где-то, где я читал, профили устройств могут использовать записи от 6000h до 6FFFh для описания параметров устройства и функциональности устройства, и в этом диапазоне может быть описано до 8 различных устройств. Но в сети может быть 127 узлов, тогда что это за устройство?

3 ответа

Решение

PDO - это тип сообщений, используемых для более эффективных и асинхронных сообщений. PDO могут быть отправлены по таймеру, в ответ на сообщение SYNC или в ответ на событие (например, изменение цифрового входа). Все 8 байтов полезной нагрузки сообщения шины CAN доступны для ваших данных. Это в отличие от SDO, где доступно только 4 байта (существуют SDO с несколькими сообщениями, например, передача блоков).

PDO могут передавать только 8 байтов за раз, потому что это максимальный размер передачи сообщения шины CAN. Сравните это с SDO, где командный байт и 3-байтовый адрес должны быть отправлены, оставляя максимум 4 байта информации.

По умолчанию устройству выделено 4 RPDO и 4 TPDO. 4 - это просто количество PDO по умолчанию. Еще можно договориться, но вы несете ответственность за создание для них "каналов". Это значит выбрать арбитражный идентификатор и убедиться, что никакое другое устройство на шине не будет разговаривать с использованием этого идентификатора. Вы хотите несколько PDO, потому что:

  1. Сообщения имеют разные приоритеты шины. 0x180+$NODEID выигрывает автобусный арбитраж 0x280+$NODEID, так далее.
  2. PDO повышают свою эффективность благодаря узлам, которые договариваются о том, какие данные будут отправлены заблаговременно. Это означает, что у них нет ожидания для отправки запроса, и при этом они не говорят, какие данные они отправляют, как это делают SDO.
  3. Выбор данных внутри PDO не очень динамичен. Устройства часто должны быть выведены из рабочего состояния, чтобы изменить отображение PDO. В некоторых устройствах отображение PDO полностью статично и не может быть изменено вообще.

TPDO - это сообщения, передаваемые с устройства, а RPDO - это сообщения, которые принимаются и записываются в словарь объектов устройства.

Словарь объектов определяет интерфейс устройства CANopen. Словарь адресован с использованием 16-битного индекса и 8-битного субиндекса. Словарь разбит на диапазоны. От 0x6000 до 0x6FFF - это диапазон индексов, назначенных переменным профиля устройства. Профили устройств предоставляют стандартизированные интерфейсы для более специализированных классов устройств.

Отображение PDO - это то, как информация, содержащаяся в PDO, согласовывается. Отображения PDO - это записи в словаре объектов устройств, как и любые другие. 3-байтовый индекс, субиндекс и размер параметра в битах кодируются в UNSIGNED32.

Мне нравится думать о PDO (объектах данных процесса) вроде функций, которые могут быть запрограммированы в узел CANopen.

Недавно я хотел сделать команду, которая двигала двигатель и сообщала о текущем положении и положении энкодера. Я определил отображение PDO с тремя объектами SDO - перемещением (принимающим PDO) и двумя передаваемыми PDO (текущий отчет и отчет кодировщика).

После того как они определены и сохранены в узле, я могу отправить одну команду PDO с указанием позиции и получить текущие данные и позицию.

Обратите внимание, что PDO выполняется только при отправке команды SYNC на шине. Затем ВСЕ узлы, у которых есть неисполненные PDO, обрабатывают их и отвечают всем одновременно.

Мы используем его для одновременной работы 7 двигателей (когда установлен SYNC).

«Но есть четыре TPDO и четыре RPDO, что меня смущает. Зачем вам несколько TPDO и RPDO?»

Вы можете отобразить только 8 байтов на один PDO (например, 2 4-байтовые переменные или 4 2-байтовые переменные или 8 1-байтовых переменных или их комбинации). Поэтому, если вы хотите получить больше информации о процессе, вам нужно использовать более одного сопоставленного PDO. И определенно вы хотите отобразить PDO, потому что тогда вы будете получать обновления от устройства при изменении значения. Без этого вам пришлось бы опрашивать устройство с помощью SDO, что не является лучшим решением.

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