Документация Engee

RITM-CAN RX

Приема CAN сообщений.

Тип: CFunction

Путь в библиотеке:

/RITM/RITM CAN/RITM-CAN RX

Описание

Для работы с блоком установите/обновите пакет поддержки блоков РИТМ.

Блок RITM-CAN RX используется для приема CAN сообщений.

Порты

Вход

# RITM-CAN Setup — порт дескриптора порта
скаляр

Details

Блок приемника должен быть соединен с соответствующим блоком настройки порта.

Типы данных

Float64

Поддержка комплексных чисел

Нет

Выход

# Число сообщений — число принятых сообщений доступных для чтения из выхода Сообщения
скаляр

Details
Типы данных

Float64

Поддержка комплексных чисел

Нет

# Сообщения — принятое сообщение CAN
вектор

Details

Принятое сообщение CAN в виде шины типа CAN_MESSAGE_BUS.

Типы данных

Float64

Поддержка комплексных чисел

Нет

Параметры

Параметры:

# Интерфейс CAN: — Порт CAN для получения сообщений
CAN 1 | CAN 2 | CAN 3 | CAN 4 | CAN 5 | CAN 6 | CAN 7 | CAN 8

Details

Номера портов указаны на корпусе КПМ «РИТМ».

Значения

CAN 1 | CAN 2 | CAN 3 | CAN 4 | CAN 5 | CAN 6 | CAN 7 | CAN 8

Значение по умолчанию

CAN 1

Имя для программного использования

m_interfaceCAN

Настраиваемый

Нет

Вычисляемый

Да

# Максимальное число сообщений: — максимальное число сообщений передаваемое из буфера операционной системы в модель за 1 шаг расчёта.

Details
Значение по умолчанию

1

Имя для программного использования

m_maxMsgNum

Настраиваемый

Нет

Вычисляемый

Да

# Шаг расчёта, с: — шаг расчета в секундах для приема сообщений CAN в приложение реального времени

Details
Значение по умолчанию

-1

Имя для программного использования

m_smplT

Настраиваемый

Нет

Вычисляемый

Да

Фильтр:

# Filter ID: — фильтр принимаемых сообщений на уровне ОС

Details

Для отключения фильтра и приема всех сообщений задайте Filter ID и Mask значение 0. Подробное описание работы фильтра приводится в разделе Фильтр сообщений в блоке CAN RX.

Значение по умолчанию

0x00

Имя для программного использования

m_canId

Настраиваемый

Нет

Вычисляемый

Да

# Mask: — битовая маска фильтра идентификаторов CAN-сообщений

Details

Задаёт, какие биты идентификатора принимаемого CAN-сообщения участвуют в фильтрации на уровне ОС. Сообщение принимается, если выполняется условие: CAN_ID & Mask == Filter_ID & Mask.

  • 0 в бите Mask — соответствующий бит CAN_ID не проверяется (пропускается);

  • 1 в бите Mask — соответствующий бит CAN_ID должен совпасть с битом Filter_ID, иначе сообщение отбрасывается.

Чтобы отключить фильтр и принимать все сообщения, установите Filter_ID = 0 и Mask = 0. Идентификатор CAN может быть длиной 11 бит (Standard) или 29 бит (Extended).

Значение по умолчанию

0x00

Имя для программного использования

m_canMask

Настраиваемый

Нет

Вычисляемый

Да

Фильтр сообщений в блоке CAN RX

Длина идентификатора принимаемого сообщения CAN может быть 29 бит (для расширенного формата кадра) или 11 бит (для стандартного формата кадра). Сообщение CAN проходит через фильтр и принимается, только если все биты идентификатора прошли через фильтр. Если хотя бы один бит идентификатора сообщения не прошел через фильтр, то сообщение отбрасывается. Настройки Filter ID и Mask позволяют задать фильтр с учетом отдельных битов идентификатора принимаемого сообщения CAN.

Сообщение проходит через фильтр, если выполняется следующее условие:

CAN ID & Mask == Filter ID & Mask,

где CAN ID — идентификатор принимаемого сообщения CAN.

Другими словами, работу фильтра можно представить в виде следующих правил:

  1. Если значение Mask для отдельного бита равно нулю, то этот бит не фильтруется. То есть, в фильтре этот бит не проверяется и проходит через фильтр.

  2. Если значение Mask для отдельного бита равно единице, то осуществляется фильтрация по значению этого бита:

    • Если бит из CAN ID и бит из Filter ID совпадают, то этот бит проходит через фильтр.

    • Если бит из CAN ID и бит из Filter ID отличаются, то этот бит не проходит через фильтр.

Пример работы фильтра

Пусть задан следующий фильтр сообщений CAN:

FilterID = 0b0100;
Mask     = 0b0110;

Сообщения с CAN идентификаторами 0x4, 0x5 и 0xC проходят через фильтр и принимаются:

CAN_ID = [0b0100 0b0101 0b1100];
can_msg_passed = bitand(CAN_ID, Mask) == bitand(FilterID, Mask)
can_msg_passed =

  1×3 logical array

   1   1   1

Сообщения с CAN идентификаторами 0x1, 0x2 и 0x6 не проходят через фильтр и отбрасываются:

CAN_ID = [0b0001 0b0010 0b0110];
can_msg_passed = bitand(CAN_ID, Mask) == bitand(FilterID, Mask)
can_msg_passed =

  1×3 logical array

   0   0   0