Что такое сопоставление 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 узлов, тогда что это за устройство из 8?


person Vishwanath Kamath    schedule 16.05.2013    source источник


Ответы (2)


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.

person LogicG8    schedule 26.06.2013
comment
В настоящее время я использую Xenus XTL для управления некоторыми двигателями и не могу правильно настроить PDO (PDO не отправляются по шине). Мой главный вопрос, и кое-что отсутствует в этом и всех других описаниях, которые я прочитал, заключается в том, как конкретно работает отображение COBID? Например, если я определяю TPDO на одном узле с COBID 0x181, все RPDO на главном узле, а другие узлы также должны иметь COBID 0x181 или COBID 0x201, или каждый узел анализирует идентификатор узла из синтаксиса 0x180 + $ NODEID, который, как я вижу, используется везде? Спасибо! - person daaxix; 12.07.2015

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

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

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

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

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

person Larry_C    schedule 15.01.2015
comment
Обратите внимание, что PDO выполняется только тогда, когда вы отправляете команду SYNC по шине. Я полагаю, вы имеете в виду только свой конкретный случай. PDO, безусловно, можно использовать без SYNC. - person Peter Mortensen; 21.05.2015