Платформа TSMaster поддерживает фильтрацию сообщений и сигналов на разных шинах (CAN, LIN, FlexRay): глобальная фильтрация приёма, фильтрация потока данных, оконная фильтрация, фильтрация по строке и программируемая фильтрация. Подход к фильтрам на разных шинах в целом одинаков. В статье — практика фильтрации сообщений для каждой из трёх шин.
Ключевые слова: CAN, LIN, FlexRay, фильтрация сообщений, фильтр по ID, строковый фильтр, программируемый фильтр.
1. Фильтрация сообщений CAN
Для окна информации о CAN-сообщениях доступны: глобальная фильтрация приёма, фильтрация потока данных, оконная фильтрация, фильтрация по строке и программируемая фильтрация. Разберём каждую.
1.1. Глобальная фильтрация приёма
Глобальная фильтрация приёма настраивается на аппаратном контроллере. Этот способ работает только с оборудованием TOSUN и виртуальными каналами TOSUN — устройства других производителей не поддерживаются. Перед настройкой выберите в качестве аппаратного канала устройство TOSUN, например TC1016 (рис. 1-1).

Затем откройте «Аппаратура шины» → «Конфигурация CAN» → «Настройка фильтра ID» (рис. 1-2). Здесь фильтруются стандартные и расширенные кадры; по умолчанию фильтр пропускающий, изменить на блокирующий нельзя. Условие проверяет каждый двоичный бит ID сообщения: для каждого бита доступны три значения — «0, 1, x», где x означает «0 или 1». Если нужно отфильтровать один ID, можно просто указать идентификатор. После настройки внизу отображается список пропускаемых идентификаторов, а внизу окна можно проверить, пройдёт ли нужный идентификатор через этот фильтр.

1.2. Фильтрация потока данных (фильтр измерения)
В окне «Настройки измерения» фильтрация достигается комбинированием направлений потока данных; перед окном можно добавить окно фильтра. Идея проста: поток данных проходит через фильтр, и дальше допускаются только данные, удовлетворяющие условию. На рис. 1-3 в окне настроек измерения топологически связаны три окна: «Информация о сообщениях#2», «Фильтр измерения» и «График». В окне сообщений виден сигнал EngSpeed сообщения EngineData, а в окне графика — n.a. (недействительно): добавленный в настройках измерения фильтр блокирует EngineData канала 1.

Фильтр в окне измерения добавляется так: кликните правой кнопкой по выбранному окну и выберите «Вставить фильтр» — либо на пустом месте выберите «Добавить» и перетащите фильтр за нужное окно. Двойной клик открывает вставленный фильтр: выбирается канал фильтрации, условия — любое сообщение, одиночный ID, диапазон ID, отбор по узлу, отбор кадров ошибок; и наконец тип фильтра — пропускающий или блокирующий.
1.3. Оконный фильтр по ID сообщений
Этот способ вызывается кликом по значку воронки в окне информации о сообщениях и подходит для наблюдения за шиной в реальном времени и при воспроизведении. Поддерживаются фильтр по ID сообщения и фильтр по каналу; обратите внимание на выбор пропускающего или блокирующего типа в левом нижнем углу (рис. 1-4).

1.4. Фильтрация по строке
Сценарий использования тот же, что у оконного фильтра, но поддерживается нечёткий поиск. Область поиска: идентификатор сообщения, имя сообщения после разбора базы, физическое значение (enum). Для разбора сообщений заранее загрузите базу данных и привяжите её к каналу — рекомендуется база DBC (рис. 1-5).

1.5. Программируемая фильтрация
Программируемый фильтр — самый полный по условиям: фильтровать можно по всем полям структуры сообщения (см. заголовочный файл TSMaster): тип кадра, направление приёма/передачи, DLC и т.д.
Порядок работы: нажмите значок воронки в правом верхнем углу окна сообщений, активируйте фильтр и установите библиотеку фильтров по умолчанию. После установки откроется C-мини-программа библиотеки: видно, что для CAN, LIN, FlexRay и Ethernet созданы отдельные пользовательские функции; определения структур находятся в заголовочном файле TSMaster.h (рис. 1-6, 1-7).


Ключевой момент: return 0 означает, что подходящее под условие сообщение блокируется, а ненулевое возвращаемое значение — что сообщение пропускается в окно.
Пример пропускающего фильтра для сообщений канала 1: напишите код, скомпилируйте мини-программу и выберите соответствующую API-функцию в программируемом фильтре (рис. 1-8 – 1-10).



2. Фильтрация сообщений LIN
Для сообщений LIN доступны следующие способы фильтрации.
2.1. Фильтрация потока данных
В настройках измерения свяжите топологию трёх окон: «Фильтр измерения», «Информация о LIN-сообщениях#2» и «График». Результат: через фильтр до окна сообщений дошёл только кадр 0x15, а значение сигнала SteeringLampState в окне графика — n.a. (недействительно). При этом в окне сообщений видно, что в исходном потоке данных этот сигнал есть (рис. 2-1).

2.2. Оконный фильтр по ID
Отличие от CAN: настройка канала перенесена в правый нижний угол окна фильтра — после активации фильтра выберите «показывать только канал 1» или другой, и фильтр применится сразу. Кроме того, добавленные идентификаторы привязываются к каналу, выбранному в правом нижнем углу, — этим LIN-фильтр отличается от оконного фильтра CAN (рис. 2-2).

2.3. Фильтрация по строке
Область поиска та же: идентификатор сообщения, разобранное имя сообщения, физическое значение (enum). Рекомендуется загрузить базу DBC (рис. 2-3).

2.4. Программируемая фильтрация
Пример на рис. 2-4, 2-5: программируемый фильтр пропускает сообщения канала 1, у которых первый байт данных равен 0x00.


3. Фильтрация сообщений FlexRay
Для FlexRay доступны оконная фильтрация, фильтрация по строке и программируемая фильтрация.
3.1. Оконная фильтрация
Оконный фильтр FlexRay поддерживает добавление фильтра по каналу и добавление сообщений из базы данных (рис. 3-1).

3.2. Фильтрация по строке
Используется так же, как для CAN и LIN, — поиск по ключевым словам сигналов (рис. 3-2).

3.3. Программируемая фильтрация
Программируемый фильтр строится на проверке полей структуры FR. Пример со Slot ID: фильтрация по диапазону значений Slot ID (рис. 3-3, 3-4).

