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

CAN RX

Страница в процессе разработки.

Используется для приема CAN сообщений.

can rx

Описание

Блок 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

Не более значения параметра Число сообщений:. Если в буфере операционной системы находится больше сообщений, то они будут переданы в модель при следующем шаге расчета.

Типы данных

UInt32

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

Нет

# Сообщения — массив принятых сообщений типа CAN_MESSAGE_BUS
вектор

Details
Типы данных

Float64

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

Нет

Параметры

Параметры

# Порт: — порт CAN для получения сообщений

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

"can0"

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

m_port

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

Нет

Вычисляемый

Да

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

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

1

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

m_messages

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

Нет

Вычисляемый

Да

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

Details

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

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

0x00

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

m_filter

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

Нет

Вычисляемый

Да

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

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

0x00

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

m_mask

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

Нет

Вычисляемый

Да