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

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

Примечание

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

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

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

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

    clear

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

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

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

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

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

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

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

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

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

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

    Для получения дополнительной информации смотрите, что Данные сигнала Экспорта Используют Сигнал, Регистрирующий (Simulink).

  5. В диалоговом окне Configuration Parameters:

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

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

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

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

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

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

Продолжите регистрировать данные моделирования.

Регистрируйте данные моделирования

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

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

  2. Нажмите кнопку Simulation Data 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. В диалоговом окне Configuration Parameters, установленном параметр 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. Для получения дополнительной информации смотрите Запуск Внешние Команды, Скрипты и Программы (MATLAB).

Продолжите визуализировать и сравнивать результаты.

Визуализируйте и сравните результаты

Когда вы следуете за последовательностью в качестве примера, которая началась в, Конфигурируют Данные сигнала для Логгирования, вы получаете данные из запуска Simulink модели и от запуска программы, сгенерированной из модели.

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

    1. На вкладке Simulation Data Inspector Visualize нажмите кнопку 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 имя сигнала. Данные сигнала появляются в главном подграфике.

      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)

Похожие темы