В этом примере показано, как проверить ответы, вычисленные кодом, сгенерированным от slexAircraftExample
модель. Это показывает, как получить и сравнить два набора выходных данных. Симуляция модели производит один набор выходных данных. Выполнение сгенерированного кода производит второй набор выходных данных.
Примечание
Чтобы получить допустимое сравнение между выходом модели и сгенерированным кодом, используйте тот же Solver selection и Step size для запущенной симуляции и процесс сборки.
Сконфигурируйте модель для логгирования и записи данных сигнала.
Убедитесь тот slexAircraftExample
закрывается. Очистите базовое рабочее пространство, чтобы устранить результаты предыдущих запусков симуляции. В Командном окне введите:
clear
Операция clear очищает переменные, созданные во время предыдущих симуляций и всех переменных рабочей области, некоторые из которых являются стандартными переменными что slexAircraftExample
модель требует.
В Командном окне введите slexAircraftExample
открыть модель.
В окне модели выберите File> Save As, перейдите к рабочей папке и сохраните копию slexAircraftExample
модель как myAircraftExample
.
Настройте свою модель, чтобы регистрировать данные сигнала для сигналов: Stick
, alpha,rad
, и q, rad/sec
. Для каждого сигнала:
Щелкните правой кнопкой по сигналу. Из контекстного меню выберите Properties.
В диалоговом окне Signal Properties выберите Log signal data.
В разделе Logging name, из выпадающего списка, выбирают Custom
.
В текстовом поле введите имя логгирования для соответствующего сигнала.
Имя сигнала | Логгирование имени |
---|---|
Stick | Stick_input |
alpha,rad | Alpha |
q, rad/sec | Pitch_rate |
Нажмите Apply и OK.
Для получения дополнительной информации смотрите, что Данные сигнала Экспорта Используют Логгирование Сигнала.
В диалоговом окне Configuration Parameters:
Установите Type на Fixed-step
.
Установите Format на Structure with time
.
Снимите флажок States.
Установите флажок Signal logging.
Установите флажок Record logged workspace data in Simulation Data Inspector.
Сохраните модель.
Продолжите регистрировать данные моделирования.
Запустите симуляцию, регистрируйте данные сигнала и просмотрите данные в Инспекторе Данных моделирования.
Запустите модель. Когда симуляция сделана на Simulink® Панель инструментов Editor, кнопка Simulation Data Inspector подсвечена, чтобы указать, что новая симуляция выход доступна в Инспекторе Данных моделирования.
Нажмите кнопку Simulation Data Inspector, чтобы открыть Инспектора Данных моделирования.
Сгруппируйте сигналы:
На вкладке Visualize нажмите Group Signals.
В диалоговом окне Group Signals выберите Data Hierarchy
из списка Then By.
Нажмите OK.
Нажмите logsout
расширитель, чтобы просмотреть регистрируемые сигналы.
Кликните по вкладке Format.
Нажмите кнопку Subplots и выберите 3x1
показать три подграфика.
Для каждого сигнала:
Кликните по главному подграфику. Синяя граница указывает на выбор графика.
Установите флажок рядом с Alpha
имя сигнала. Данные сигнала появляются в подграфике.
Постройте Pitch_rate
сигнал в среднем подграфике.
Постройте Stick_input
сигнал в нижнем подграфике.
Продолжите запускать данные об исполняемом файле и загрузке.
Необходимо восстановить и запустить myAircraftExample
исполняемый файл, чтобы получить допустимый файл данных, потому что вы изменили модель.
В диалоговом окне Configuration Parameters, установленном параметр MAT-file variable name modifier на rt_
rt
снабжается префиксом к каждой переменной, которую вы выбрали для входа в систему первой части этого примера.
Нажмите Apply и OK.
Сохраните модель.
Чтобы сгенерировать код, на вкладке C Code, нажимают кнопку Build.
Когда сборка будет закончена, запустите автономную программу из Командного окна.
!myAircraftExample
Программа выполнения пишет следующие сообщения в Командное окно.
** starting the model ** ** created myAircraftExample.mat **
Загрузите файл данных myAircraftExample.mat
.
load myAircraftExample
Совет
Для UNIX® платформы, запустите исполняемую программу в Командном окне с синтаксисом !./
executable_name
. Если предпочтено, запуск исполняемая программа от ОС окружают с синтаксисом ./
executable_name
. Для получения дополнительной информации смотрите Запуск Внешние Команды, Скрипты и Программы.
Продолжите визуализировать и сравнивать результаты.
Когда вы следуете за последовательностью в качестве примера, которая началась в, Конфигурируют Данные сигнала для Логгирования, вы получаете данные из запуска Simulink модели и от запуска программы, сгенерированной из модели.
Просмотреть выполнение выход для alpha,rad
, импортируйте данные в Инспектора Данных моделирования.
На вкладке Simulation Data Inspector Visualize нажмите кнопку Import, чтобы открыть диалоговое окно Импорта.
Задайте Import from как Base workspace.
Задайте Import to как New run.
Слева от Signal Name кликните по галочке, чтобы снять флажки.
Установите флажок для alpha,rad
данные, где Time Series Root является rt_yout
.
Нажмите Import.
Выбранные данные теперь находятся под Run 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)