Что такое отображение 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, потому что:
- Сообщения имеют разные приоритеты шины.
0x180+$NODEID
выигрывает автобусный арбитраж0x280+$NODEID
, так далее. - PDO повышают свою эффективность благодаря узлам, которые договариваются о том, какие данные будут отправлены заблаговременно. Это означает, что у них нет ожидания для отправки запроса, и при этом они не говорят, какие данные они отправляют, как это делают SDO.
- Выбор данных внутри 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, что не является лучшим решением.