В этом примере показано, как проверить ответы, вычисленные по коду, сгенерированному из slexAircraftExample модель. В нем показано, как собирать и сравнивать два набора выходных данных. При моделировании модели создается один набор выходных данных. Выполнение сгенерированного кода создает второй набор выходных данных.
Примечание
Чтобы получить допустимое сравнение между выводом модели и сгенерированным кодом, используйте один и тот же выбор решателя и размер шага для прогона моделирования и процесса построения.
Сконфигурируйте модель для регистрации и записи данных сигнала.
Убедитесь, что slexAircraftExample закрыт. Очистите базовое рабочее пространство, чтобы исключить результаты предыдущих прогонов моделирования. В окне команд введите:
clear
Операция очистки удаляет переменные, созданные во время предыдущего моделирования, и все переменные рабочей области, некоторые из которых являются стандартными переменными, slexAircraftExample требуется модель.
В окне команд введите slexAircraftExample для открытия модели.
В окне модели выберите Файл (File) > Сохранить как (Save As), перейдите в рабочую папку и сохраните копию файла. slexAircraftExample модель как myAircraftExample.
Настройте модель для регистрации данных сигналов: Stick, alpha,rad, и q, rad/sec. Для каждого сигнала:
Щелкните сигнал правой кнопкой мыши. В контекстном меню выберите «Свойства».
В диалоговом окне Signal Properties выберите Log signal data.
В разделе Имя регистрации в раскрывающемся списке выберите Custom.
В текстовом поле введите имя регистрации для соответствующего сигнала.
| Имя сигнала | Имя журнала |
|---|---|
Stick | Stick_input |
alpha,rad | Alpha |
q, rad/sec | Pitch_rate |
Нажмите «Применить» и «ОК».
Дополнительные сведения см. в разделе Экспорт данных сигнала с помощью регистрации сигнала.
В диалоговом окне «Параметры конфигурации»:
Задать тип для Fixed-step.
Задать формат как Structure with time.
Снимите флажок Состояния.
Установите флажок Signal logging (Регистрация сигналов).
Установите флажок Записывать записанные данные рабочей области в инспекторе данных моделирования.
Сохраните модель.
Перейдите к разделу Журнал данных моделирования.
Запустите моделирование, запишите данные сигнала и просмотрите данные в инспекторе данных моделирования.
Запустите модель. По завершении моделирования на панели инструментов Simulink ® Editor кнопка Simulation Data Inspector подсвечивается, указывая, что в инспекторе данных моделирования доступны новые выходные данные моделирования .
![]()
Нажмите кнопку Инспектор расчетных данных, чтобы открыть Инспектор расчетных данных.
Сгруппируйте сигналы:
На вкладке Визуализация (Visualize) щелкните Групповые сигналы (Group Signals).
В диалоговом окне «Групповые сигналы» выберите Data Hierarchy из списка «Затем по».

Нажмите кнопку ОК.
Щелкните значок logsout для просмотра зарегистрированных сигналов.
Перейдите на вкладку Формат (Format).
Нажмите кнопку «Вложенные» и выберите 3x1 для отображения трех вложенных графиков.
Для каждого сигнала:
Щелкните верхний вложенный график. Синяя граница указывает на выбор графика.
Установите флажок рядом с Alpha имя сигнала. Данные сигнала отображаются на вложенном графике.
Постройте график Pitch_rate сигнал в средней части графика.
Постройте график Stick_input сигнал в нижней части графика.

Перейдите к разделу Запуск исполняемого файла и Загрузка данных.
Необходимо перестроить и запустить myAircraftExample для получения действительного файла данных, поскольку модель была изменена.
В диалоговом окне «Параметры конфигурации» задайте для параметра модификатора имени переменной MAT-файла значение rt_. rt_ имеет префикс к каждой переменной, выбранной для регистрации в первой части этого примера.
Нажмите «Применить» и «ОК».
Сохраните модель.
Чтобы создать код, на вкладке C Code нажмите кнопку Build.
После завершения построения запустите автономную программу из окна команд.
!myAircraftExample
Исполняющая программа записывает следующие сообщения в окно команд.
** starting the model ** ** created myAircraftExample.mat **
Загрузить файл данных myAircraftExample.mat.
load myAircraftExample
Совет
Для платформ UNIX ® запустите исполняемую программу в окне команд с синтаксисом!./executable_name. При необходимости запустите исполняемую программу из оболочки ОС с синтаксисом ./executable_name. Дополнительные сведения см. в разделе Запуск внешних команд, сценариев и программ.
Перейдите к разделу Визуализация и сравнение результатов.
При выполнении последовательности примеров, начатой в разделе Настройка данных сигналов для ведения журнала (Configure Signal Data for Logging), получаются данные из прогона Simulink модели и из прогона программы, созданной из модели.
Просмотр выходных данных выполнения для alpha,radимпортируйте данные в инспектор данных моделирования.
На вкладке «Визуализация» инспектора данных моделирования нажмите кнопку «Импорт», чтобы открыть диалоговое окно «Импорт».
Укажите «Импорт из базового рабочего пространства».
Укажите Импорт в как новый прогон.
Слева от поля Signal Name (Имя сигнала) установите флажок, чтобы снять флажки.
Установите флажок для alpha,rad данные, в которых корень временного ряда имеет значение rt_yout.
Щелкните Импорт (Import).

Выбранные данные теперь находятся в области Запуск 2: Imported_Data.
Просмотр графика выполненных данных.
Щелкните значок rt_yout расширитель.
Щелкните верхний вложенный график и установите флажок рядом с alpha, rad имя сигнала. Данные сигнала отображаются в верхней части графика.
alpha, rad сигнал из прогона 1 и прогона 2 перекрывается в вложенном графике, поскольку сигналы эквивалентны.

Можно увидеть очень небольшое различие между результатами моделирования и генерации кода. Небольшая разница может быть вызвана многими факторами, в том числе:
Различные оптимизации компилятора
Порядок выписок
Библиотеки времени выполнения
Например, вызов функции, такой как sin(2.0) может возвращать несколько другое значение в зависимости от используемой библиотеки C. Такие изменения также могут привести к различиям между результатами и этими результатами.
Порядок, в котором Simulink регистрирует состояния во время моделирования, отличается от порядка, в котором Simulink Coder™ регистрирует состояния во время генерации кода. Если требуется сравнить состояния между моделированием и генерацией кода, отсортируйте состояния по имени блока.
Например, по умолчанию Simulink экспортирует данные состояния в переменную MATLAB, xout. Simulink Coder экспортирует данные состояния в переменную rt_xout. Чтобы отсортировать данные о состоянии для этих переменных, введите следующие команды в окне команд MATLAB:
[~,idx1]=sort({xout.signals.blockName});
xout_sorted=[xout.signals(idx1).values];
[~,idx2]=sort({rt_xout.signals.blockName});
rt_xout_sorted=[rt_xout.signals(idx2).values];Можно подтвердить, что порядок ведения журнала одинаков между генерацией кода и моделированием, введя следующую команду в окне команд MATLAB:
isequal(xout_sorted, rt_xout_sorted)