Модуль MATLAB-автоматизации TSMaster — набор инструментов для MBD-разработки: подключение к автоматизационному объекту MATLAB, автоматическое преобразование C-кода в логику Stateflow и автоматическое построение SIL/HIL-сред из Simulink-моделей. Разберём работу модуля по шагам.

Ключевые слова: TSMaster, MATLAB, Simulink, Stateflow, SIL, HIL, MBD.

1. Автоматизационный объект MATLAB

  1. Шаг 1. Нажмите «Подключить» — подключение к автоматизационному объекту MATLAB требует запущенной основной программы MATLAB. После подключения MATLAB управляется TSMaster в реальном времени: кнопка «Подключить» становится неактивной, а «Отключить» — подсвечивается (рис. 1-1).
  2. Шаг 2. Нажмите «C-код → Stateflow», затем «Разобрать» — строится дерево логики; далее нажмите «Сгенерировать код». Пример C-кода автоматически преобразуется в код Stateflow: существующая логика на C одним действием переводится в полностью эквивалентную логику Stateflow, что повышает эффективность MBD-разработки. Двойной щелчок по chart1 раскрывает логику Stateflow, соответствующую исходному C-скрипту (рис. 1-2, 1-3).
Подключение к MATLAB
Рис. 1-1. Подключение к автоматизационному объекту MATLAB
Преобразование C в Stateflow
Рис. 1-2. Разбор C-кода в дерево логики
Результат Stateflow
Рис. 1-3. Сгенерированная логика Stateflow

2. Автоматическое построение SIL- и HIL-сред

Если есть Simulink-модель, способная генерировать код, модуль позволяет запустить её в реальном времени в среде TSMaster: алгоритм участвует в SIL- и HIL-симуляции уже на ранних этапах проектирования, а с помощью мини-программ его можно детально отлаживать и мониторить или публиковать в виде бинарных файлов другим пользователям для совместной симуляции.

Разберём пример с нуля. Страница «SIL and HIL» содержит 4 шага, выполняемые последовательно.

  1. Шаг 1. Конфигурация модели алгоритма. Два входных параметра: имя мини-программы и файл Simulink-модели. Введите имя новой мини-программы (по умолчанию Model1) и нажмите зелёную галочку справа: если Model1 не существует — она будет создана, если существует — будет использована имеющаяся. Так новый алгоритм интегрируется в существующую мини-программу (рис. 2-1).
  2. Шаг 2. Файл Simulink-модели. Для примера откройте Simulink и на стартовой странице выберите пример Stateflow — иерархическую диаграмму (untitled): модель содержит состояния run и cooldown — 30 секунд работы, затем 5 секунд охлаждения, циклически; внутри run выход каждую секунду переключается между 10 и 1 (рис. 2-2). Добавьте осциллограф и запустите модель (F5), сменив рабочий каталог на любую папку, — выход совпадает с ожиданием. Сохраните модель как simple, удалите осциллограф и добавьте выходной порт out, чтобы модель могла генерировать код.
  3. Шаг 3. Настройка генерации кода. В настройках модели откройте «Code Generation»: смените grt на ert.tlc (целевая среда — встраиваемая), отметьте «Generate code only», а в разделе шаблонов снимите галочку «Generate an example main program», чтобы не генерировался main (рис. 2-3). Сохраните и закройте модель.
Страница SIL and HIL
Рис. 2-1. Страница SIL and HIL: четыре шага построения среды
Пример Stateflow
Рис. 2-2. Пример иерархической диаграммы Stateflow
Настройка генерации кода
Рис. 2-3. Настройка генерации кода в Simulink

3. Модуль управления MATLAB

  1. Шаг 1. Вернитесь в модуль управления MATLAB и выберите файл Simulink-модели: зелёной кнопкой-стрелкой укажите сохранённый simple.slx — после этого шаг 1 считается выполненным (рис. 3-1).
  2. Шаг 2. Задайте папки cache и codegen (пустые поля означают расположение по умолчанию): зелёной кнопкой выберите или создайте папки cache и codegen (рис. 3-2).
  3. Шаг 3. Нажмите «Запустить генерацию кода Simulink» и дождитесь завершения — код попадёт в папку codegen. Первая генерация занимает время; выполнение Simulink синхронное и медленное, поэтому TSMaster может выдать предупреждение (рис. 3-3).
  4. Шаг 4. Нажмите кнопку автоматического копирования сгенерированного кода в библиотеку кода мини-программы — отобразится, например, «скопировано 6 файлов». Шаг 2 завершён (рис. 3-4).
  5. Шаг 5. Интеграция кода. Нажмите «Редактировать исходный код мини-программы», откройте Model1 и перейдите по пути библиотеки кода: там лежат simple.c, simple.h и другие заголовочные файлы. В simple.h — интерфейс из трёх функций: initialize, step и terminate; их вызовы нужно перенести в мини-программу Model1 (рис. 3-5).
  6. Шаг 6. В мини-программе в глобальных определениях добавьте #include "simple.h". Затем скопируйте вызов инициализации в событие инициализации программы, вызов step — в функцию step, terminate — в событие остановки.
  7. Шаг 7. Период step. Период по умолчанию — 5 мс, но в модели решатель с фиксированным шагом 0,1 с, то есть 100 мс: дважды щёлкните функцию step и установите период 100.
  8. Шаг 8. Наблюдение сигнала out1. Правой кнопкой в списке переменных добавьте переменную out1. В коде выходы доступны как члены структуры outports: simple_Y.out1. Присвойте значение переменной: out1.set(simple_Y.out1) — мини-программа готова (рис. 3-6).
Выбор модели
Рис. 3-1. Выбор файла Simulink-модели
Папки cache и codegen
Рис. 3-2. Настройка папок cache и codegen
Генерация кода
Рис. 3-3. Генерация кода Simulink завершена
Копирование кода
Рис. 3-4. Копирование файлов в библиотеку кода мини-программы
Интерфейс simple.h
Рис. 3-5. Интерфейсные функции в simple.h
Присвоение out1
Рис. 3-6. Привязка переменной out1 в коде

4. Выполнение SIL/HIL-симуляции

Нажмите «Запустить симуляцию» — модель алгоритма начинает работать в реальном времени. Для наблюдения сигналов запустите симуляцию TSMaster и откройте окно графика: правой кнопкой добавьте системную переменную — через внутренние переменные найдите out1 модуля Model1 и задайте диапазон отображения (например, −1…15). График полностью совпадает с осциллографом Simulink; сигнал можно отобразить вертикальными линиями, что лучше отражает его логику (рис. 4-1).

График out1
Рис. 4-1. Сигнал out1 в окне графика TSMaster

Сигнал out1 обновляется в реальном времени: через шинный интерфейс модель алгоритма можно включить в сеть автомобиля и взаимодействовать с реальными контроллерами. Это и есть простой способ построения HIL модулем управления MATLAB. Модуль входит в лицензию TSMaster MATLAB Controller.