exponenta event banner

Моделирование и сравнение кодов

В этом примере показано, как проверить ответы, вычисленные по коду, сгенерированному из slexAircraftExample модель. В нем показано, как собирать и сравнивать два набора выходных данных. При моделировании модели создается один набор выходных данных. Выполнение сгенерированного кода создает второй набор выходных данных.

Примечание

Чтобы получить допустимое сравнение между выводом модели и сгенерированным кодом, используйте один и тот же выбор решателя и размер шага для прогона моделирования и процесса построения.

Конфигурирование данных сигнала для регистрации

Сконфигурируйте модель для регистрации и записи данных сигнала.

  1. Убедитесь, что slexAircraftExample закрыт. Очистите базовое рабочее пространство, чтобы исключить результаты предыдущих прогонов моделирования. В окне команд введите:

    clear

    Операция очистки удаляет переменные, созданные во время предыдущего моделирования, и все переменные рабочей области, некоторые из которых являются стандартными переменными, slexAircraftExample требуется модель.

  2. В окне команд введите slexAircraftExample для открытия модели.

  3. В окне модели выберите Файл (File) > Сохранить как (Save As), перейдите в рабочую папку и сохраните копию файла. slexAircraftExample модель как myAircraftExample.

  4. Настройте модель для регистрации данных сигналов: Stick, alpha,rad, и q, rad/sec. Для каждого сигнала:

    1. Щелкните сигнал правой кнопкой мыши. В контекстном меню выберите «Свойства».

    2. В диалоговом окне Signal Properties выберите Log signal data.

    3. В разделе Имя регистрации в раскрывающемся списке выберите Custom.

    4. В текстовом поле введите имя регистрации для соответствующего сигнала.

      Имя сигналаИмя журнала
      StickStick_input
      alpha,radAlpha
      q, rad/secPitch_rate

    5. Нажмите «Применить» и «ОК».

    Дополнительные сведения см. в разделе Экспорт данных сигнала с помощью регистрации сигнала.

  5. В диалоговом окне «Параметры конфигурации»:

    1. Задать тип для Fixed-step.

    2. Задать формат как Structure with time.

    3. Снимите флажок Состояния.

    4. Установите флажок Signal logging (Регистрация сигналов).

    5. Установите флажок Записывать записанные данные рабочей области в инспекторе данных моделирования.

  6. Сохраните модель.

Перейдите к разделу Журнал данных моделирования.

Данные моделирования журнала

Запустите моделирование, запишите данные сигнала и просмотрите данные в инспекторе данных моделирования.

  1. Запустите модель. По завершении моделирования на панели инструментов Simulink ® Editor кнопка Simulation Data Inspector подсвечивается, указывая, что в инспекторе данных моделирования доступны новые выходные данные моделирования .

  2. Нажмите кнопку Инспектор расчетных данных, чтобы открыть Инспектор расчетных данных.

  3. Сгруппируйте сигналы:

    1. На вкладке Визуализация (Visualize) щелкните Групповые сигналы (Group Signals).

    2. В диалоговом окне «Групповые сигналы» выберите Data Hierarchy из списка «Затем по».

    3. Нажмите кнопку ОК.

  4. Щелкните значок logsout для просмотра зарегистрированных сигналов.

  5. Перейдите на вкладку Формат (Format).

  6. Нажмите кнопку «Вложенные» и выберите 3x1 для отображения трех вложенных графиков.

  7. Для каждого сигнала:

    1. Щелкните верхний вложенный график. Синяя граница указывает на выбор графика.

    2. Установите флажок рядом с Alpha имя сигнала. Данные сигнала отображаются на вложенном графике.

    3. Постройте график Pitch_rate сигнал в средней части графика.

    4. Постройте график Stick_input сигнал в нижней части графика.

Перейдите к разделу Запуск исполняемого файла и Загрузка данных.

Запуск исполняемого файла и загрузка данных

Необходимо перестроить и запустить myAircraftExample для получения действительного файла данных, поскольку модель была изменена.

  1. В диалоговом окне «Параметры конфигурации» задайте для параметра модификатора имени переменной MAT-файла значение rt_. rt_ имеет префикс к каждой переменной, выбранной для регистрации в первой части этого примера.

  2. Нажмите «Применить» и «ОК».

  3. Сохраните модель.

  4. Чтобы создать код, на вкладке C Code нажмите кнопку Build.

  5. После завершения построения запустите автономную программу из окна команд.

    !myAircraftExample

    Исполняющая программа записывает следующие сообщения в окно команд.

    ** starting the model ** 
    ** created myAircraftExample.mat ** 
  6. Загрузить файл данных myAircraftExample.mat.

    load myAircraftExample
    

Совет

Для платформ UNIX ® запустите исполняемую программу в окне команд с синтаксисом!./executable_name. При необходимости запустите исполняемую программу из оболочки ОС с синтаксисом ./executable_name. Дополнительные сведения см. в разделе Запуск внешних команд, сценариев и программ.

Перейдите к разделу Визуализация и сравнение результатов.

Визуализация и сравнение результатов

При выполнении последовательности примеров, начатой в разделе Настройка данных сигналов для ведения журнала (Configure Signal Data for Logging), получаются данные из прогона Simulink модели и из прогона программы, созданной из модели.

  1. Просмотр выходных данных выполнения для alpha,radимпортируйте данные в инспектор данных моделирования.

    1. На вкладке «Визуализация» инспектора данных моделирования нажмите кнопку «Импорт», чтобы открыть диалоговое окно «Импорт».

    2. Укажите «Импорт из базового рабочего пространства».

    3. Укажите Импорт в как новый прогон.

    4. Слева от поля Signal Name (Имя сигнала) установите флажок, чтобы снять флажки.

    5. Установите флажок для alpha,rad данные, в которых корень временного ряда имеет значение rt_yout.

    6. Щелкните Импорт (Import).

    Выбранные данные теперь находятся в области Запуск 2: Imported_Data.

  2. Просмотр графика выполненных данных.

    1. Щелкните значок rt_yout расширитель.

    2. Щелкните верхний вложенный график и установите флажок рядом с 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)

Связанные темы