Skip to content

Поля фильтра CANopen ​

Выберите профиль CANopen и уровень Protocol. Для исходных идентификаторов, RTR и полного содержимого CAN-кадра используйте Physical и каталог CAN.

Каталог ​

ПолеТипЗначение и применимость
canopen.typeСтрокаСемейство сообщения; значения перечислены ниже
canopen.nodeIdЦелоеУзел сообщения. Для команды NMT — целевой узел; 0 у NMT означает обращение ко всем узлам
canopen.canIdЦелоеCAN-идентификатор сообщения
canopen.indexЦелоеИндекс объекта SDO/USDO, если сообщение содержит ключ объекта
canopen.subIndexЦелоеПодындекс объекта SDO/USDO при наличии ключа
canopen.requestЛогическоеРоль запроса для SDO/USDO, когда она определена
canopen.responseЛогическоеРоль ответа для SDO/USDO, когда она определена
canopen.abortCodeЦелоеКод прерывания SDO/USDO; иначе отсутствует
canopen.nmtCommandЦелоеКод команды NMT; иначе отсутствует
canopen.emcyCodeЦелоеКод аварийного сообщения EMCY; иначе отсутствует
canopen.dataБайтыУ SDO/USDO — передаваемые данные сообщения, у PDO — его полезные данные, у остальных типов — данные сообщения

PDO не превращается в запись с полями index и subIndex, даже если его значения расшифрованы через описание устройства. Эти поля фильтра относятся к ключу объекта SDO/USDO. Фильтр по имени декодированного PDO-сигнала или его физическому значению в текущем каталоге отсутствует.

Типы сообщений ​

Значение canopen.typeСообщения
nmtУправление состоянием сети
syncСинхронизация
timeВремя
bootupЗапуск узла
heartbeatСообщения состояния узла
nodeGuardРаспознанный обмен Node Guarding
emcyАварийное сообщение
sdoОбмен SDO
pdoДанные процесса PDO
usdoОбмен USDO в CANopen FD

Если сообщение нельзя отнести к известному семейству, используется unknown. Разделение Heartbeat и Node Guarding зависит от наблюдаемого кадра: не всякий ответ контроля состояния однозначно различим без контекста.

Поля CANopen FD приведены как часть текущего каталога. Наличие USDO в списке не является обещанием совместимости любого адаптера или узла с CANopen FD.

Примеры ​

Все распознанные сообщения узла 5:

text
canopen.nodeId == 5

Широковещательная команда NMT имеет целевой узел 0 и в такую выборку не попадёт. Чтобы увидеть и её:

text
canopen.nodeId == 5 or (canopen.type == nmt and canopen.nodeId == 0)

Обращения к объекту 0x1018:1:

text
canopen.nodeId == 5 and canopen.type == sdo and canopen.index == 0x1018 and canopen.subIndex == 1

В сегментах без ключа объекта эти поля отсутствуют. Для всей передачи используйте более широкий фильтр:

text
canopen.nodeId == 5 and canopen.type == sdo

Прерывания SDO/USDO:

text
exists(canopen.abortCode)

Аварийные сообщения узла:

text
canopen.nodeId == 5 and canopen.type == emcy

PDO по конкретному CAN ID:

text
canopen.type == pdo and canopen.canId == 0x185

Код NMT 0x01 для узла 5 или всей сети:

text
canopen.type == nmt and canopen.nmtCommand == 0x01 and canopen.nodeId in (0, 5)

У NMT нет роли SDO/USDO-запроса. Не добавляйте canopen.request == true, если хотите найти команды NMT.

Продолжить: практический разбор CANopen.