Симуляция и сравнение кода

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

Примечание

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

Сконфигурируйте сигнальные данные для логгирования

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

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

    clear

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

  2. В Командном окне введите slexAircraftExample чтобы открыть модель.

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

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

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

    2. В диалоговом окне Свойств сигнала» выберите Log signal data.

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

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

      Имя сигналаЛоггирование
      StickStick_input
      alpha,radAlpha
      q, rad/secPitch_rate

    5. Нажмите Apply и OK.

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

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

    1. Установите Type значение Fixed-step.

    2. Установите Format значение Structure with time.

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

    4. Установите флажок Signal logging.

    5. Установите флажок Record logged workspace data in Simulation Data Inspector.

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

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

Журнал данных моделирования

Запустите симуляцию, логгируйте данные сигнала и просмотрите данные в Данные моделирования Inspector.

  1. Запустите модель. Когда симуляция завершена, на Simulink® Редактор панели инструментов кнопка Simulation Data Inspector подсвечивается, чтобы указать, что новые выходы симуляции доступны в Данные моделирования Inspector.

  2. Нажмите кнопку Simulation Data Inspector, чтобы открыть Данные моделирования Inspector.

  3. Сгруппировать сигналы:

    1. На вкладке Visualize нажмите Group Signals.

    2. В диалоговом окне Group Signals выберите Data Hierarchy из списка Then By.

    3. Нажмите OK.

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

  5. Перейдите на вкладку Format.

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

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

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

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

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

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

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

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

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

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

  2. Нажмите Apply и OK.

  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 для Логгирования, вы получаете данные из запуска Simulink модели и из запуска программы, сгенерированной из модели.

  1. Чтобы просмотреть выходы выполнения для alpha,rad, импортируйте данные в Данные моделирования Inspector.

    1. На вкладке Данных моделирования Inspector Visualize нажмите кнопку Import, чтобы открыть диалоговое окно Import.

    2. Задайте Import from следующим Base workspace.

    3. Задайте Import to следующим New run.

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

    5. Установите флажок для alpha,rad данные, где Time Series Root rt_yout.

    6. Нажмите Import.

    Выбранные данные находятся на стадии Run 2: Imported_Data.

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

    1. Нажмите на rt_yout расширитель.

    2. Щелкните верхний подграфик и установите флажок рядом с alpha, rad имя сигнала. Данные о сигнале появляются в верхней подграфике.

      The alpha, rad сигнал от Run 1 и Run 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)

Похожие темы