RITM-CAN RX
Приема CAN сообщений.
Тип: CFunction
|
Путь в библиотеке:
|
Описание
| Для работы с блоком установите/обновите пакет поддержки блоков РИТМ. |
Блок RITM-CAN RX используется для приема CAN сообщений.
Порты
Вход
#
RITM-CAN Setup
—
порт дескриптора порта
скаляр
Details
Блок приемника должен быть соединен с соответствующим блоком настройки порта.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
Выход
#
Число сообщений
—
число принятых сообщений доступных для чтения из выхода Сообщения
скаляр
Details
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
#
Сообщения
—
принятое сообщение CAN
вектор
Details
Принятое сообщение CAN в виде шины типа CAN_MESSAGE_BUS.
| Типы данных |
|
| Поддержка комплексных чисел |
Нет |
Параметры
Параметры:
#
Интерфейс CAN: —
Порт CAN для получения сообщений
CAN 1 | CAN 2 | CAN 3 | CAN 4 | CAN 5 | CAN 6 | CAN 7 | CAN 8
Details
Номера портов указаны на корпусе КПМ «РИТМ».
| Значения |
|
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# Максимальное число сообщений: — максимальное число сообщений передаваемое из буфера операционной системы в модель за 1 шаг расчёта.
Details
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# Шаг расчёта, с: — шаг расчета в секундах для приема сообщений CAN в приложение реального времени
Details
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
Фильтр:
# Filter ID: — фильтр принимаемых сообщений на уровне ОС
Details
Для отключения фильтра и приема всех сообщений задайте Filter ID и Mask значение 0. Подробное описание работы фильтра приводится в разделе Фильтр сообщений в блоке CAN RX.
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
# 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).
| Значение по умолчанию |
|
| Имя для программного использования |
|
| Настраиваемый |
Нет |
| Вычисляемый |
Да |
Фильтр сообщений в блоке 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
