Модуль XCP в TSMaster умеет напрямую выгружать mat-файлы в сжатом формате HDF5 (MATLAB 7.3 и новее), что удобно для модельной разработки на базе Simulink. В статье — формат переменных mat-файла, методы разбора временных осей и сигналов, построение timeseries и воспроизведение сигналов в Simulink.
Ключевые слова: TSMaster, XCP, mat-файл, HDF5, MATLAB, Simulink, timeseries.
1. Определение формата переменных mat
После загрузки mat-файла, выгруженного TSMaster, в MATLAB список переменных рабочей области выглядит следующим образом (рис. 1-1).

1.1. Фиксированные переменные
Список фиксированных переменных (рис. 1-2):

1.2. Метод разбора времени
Сначала разделите временной ряд, чтобы получить все временные оси (рис. 1-3):

На примере сигналов, записанных в AN0001: строковая переменная временного ряда TIME_LIST выглядит так:
ecu1_TIME_DAQ_Cyclic, ecu1_TIME_DAQ_10_ms, ecu1_TIME_DAQ_100ms, ecu1_TIME_POLL_noiseSignal, TIME_XCPSimBus__engine_speed
После разделения по именам в рабочей области можно получить массив каждой временной оси; каждая ось связана с одним сигналом или группой сигналов. Временные оси бывают трёх типов: время DAQ (одна ось — один сигнал или группа), время Poll (одна ось — один сигнал) и время системных переменных (одна ось — один сигнал) (рис. 1-4).

По имени массива каждой временной оси можно извлечь абсолютное время каждого момента в секундах — на примере ecu1_TIME_DAQ_100ms (рис. 1-5):

1.3. Разбор сигналов, связанных со временем
Получив временную ось, нужно получить список связанных с ней сигналов и по именам сигналов из списка найти сами сигналы. Для оси ecu1_TIME_DAQ_100ms соответствующий список сигналов хранится в строковой переменной ecu1_TIME_DAQ_100ms_LIST (через запятую); правило именования: имя_оси_LIST.
Развернув строку ecu1_TIME_DAQ_100ms_LIST по запятым, получим один или несколько имён переменных, связанных с осью — в данном примере одно: ecu1_triangleSignal.
Это имя указывает на массив значений сигнала ecu1_triangleSignal: каждый элемент массива значений соответствует по времени каждому элементу массива временной оси один к одному. Правой кнопкой по сигналу можно построить кривую распределения по точкам (без информации о времени) (рис. 1-6):

1.4. Построение timeseries
Чтобы построить последовательность значений сигнала с информацией о времени, дополнительно выполните m-скрипт, создающий timeseries. Для сигнала ecu1_triangleSignal с временной осью ecu1_TIME_DAQ_100ms timeseries строится так:
Triangle_signal = timeseries(ecu1_triangleSignal, ecu1_TIME_DAQ_100ms)
После этого в рабочей области появляется новый сигнал «Triangle_signal» (рис. 1-7):

Правой кнопкой постройте кривую изменения: по осям — время и значение (рис. 1-8):

2. Воспроизведение сигналов в Simulink
2.1. Воспроизведение переменных рабочей области в модели
Воспроизведение XCP-сигнала в модели выполняется в несколько шагов:
- Шаг 1. Откройте модуль Simulink, дважды кликните по пустому месту модели и выберите «FromWorkspace» (рис. 2-1).
- Шаг 2. По имени timeseries задайте в Simulink имя сигнала «Triangle_signal» — теперь сигнал участвует в модельных алгоритмах симуляции и тестирования (рис. 2-2).
- Шаг 3. Подключите Scope — результат симуляции (рис. 2-3).


