CAN RX
Используется для приема CAN сообщений.
Тип: EngeeFunction
|
Путь в библиотеке:
|
Описание
| Для работы с блоком установите/обновите пакет поддержки оборудования. |
Блок CAN RX используется для приема CAN сообщений.
Фильтр сообщений в блоке CAN RX
Длина идентификатора принимаемого сообщения CAN может быть 29 бит (для расширенного формата кадра) или 11 бит (для стандартного формата кадра). Сообщение CAN проходит через фильтр и принимается, только если все биты идентификатора прошли через фильтр. Если хотя бы один бит идентификатора сообщения не прошел через фильтр, то сообщение отбрасывается. Настройки Filter ID: и Mask: позволяют задать фильтр с учетом отдельных битов идентификатора принимаемого сообщения CAN.
Сообщение проходит через фильтр, если выполняется следующее условие:
CAN ID & Mask == Filter ID & Mask,
где CAN ID — идентификатор принимаемого сообщения CAN.
Другими словами, работу фильтра можно представить в виде следующих правил:
-
Если значение Mask: для отдельного бита равно нулю, то этот бит не фильтруется. То есть, в фильтре этот бит не проверяется и проходит через фильтр.
-
Если значение 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
Порты
Выход
#
Число сообщений
—
число принятых сообщений
скаляр
Details
Не более значения параметра Число сообщений:. Если в буфере операционной системы находится больше сообщений, то они будут переданы в модель при следующем шаге расчета.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
#
Сообщения
—
массив принятых сообщений типа CAN_MESSAGE_BUS
вектор
Details
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
Параметры
Main group
# Порт: — порт CAN для получения сообщений
Details
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# Число сообщений: — максимальное число сообщений передаваемое из буфера операционной системы в модель за 1 шаг расчета
Details
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# Filter ID: — фильтр принимаемых сообщений на уровне ОС
Details
Для отключения фильтра и приема всех сообщений задайте Filter ID: и Mask: как 0. Подробное описание работы фильтра приводится в разделе Фильтр сообщений в блоке CAN RX.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# Mask: — маска фильтра принимаемых сообщений на уровне ОС
Details
Маска фильтра определяет, какие биты идентификатора CAN участвуют в проверке при фильтрации принимаемых сообщений:
-
Если значение бита маски равно
0, то соответствующий бит идентификатора не проверяется и считается проходящим через фильтр. -
Если значение бита маски равно
1, то выполняется сравнение бита идентификатора сообщения CAN с соответствующим битом Filter ID:. При несовпадении значений сообщение отбрасывается.
Для отключения фильтра и приема всех сообщений задайте Filter ID: и Mask: как 0. Подробное описание работы фильтра приводится в разделе Фильтр сообщений в блоке CAN RX.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
