Этот пример показывает, как проверить ответы, вычисленные кодом, сгенерированным из модели 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.
Для получения дополнительной информации смотрите, что Данные сигнала Экспорта Используют Сигнал, Регистрирующий (Simulink).
Выберите Simulation> Model Configuration Parameters, чтобы открыть диалоговое окно Configuration Parameters.
Выберите панель Solver и в разделе Solver selection, задайте параметр Type как Fixed-step
.
На панели Data Import/Export:
Задайте параметр Format как Structure with time
.
Снимите флажок параметра States.
Выберите параметр Signal logging.
Выберите параметр Record logged workspace data in Simulation Data Inspector, чтобы позволить регистрируемым данным сигнала отправить Инспектору Данных моделирования после того, как симуляция будет закончена.
Сохраните модель.
Продолжите регистрировать данные моделирования.
Запустите симуляцию, регистрируйте данные сигнала и просмотрите данные в Инспекторе Данных моделирования.
Запустите модель. Когда симуляция сделана на панели инструментов Editor Simulink®, кнопка 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
, чтобы получить допустимый файл данных, потому что вы изменили модель.
Выберите Simulation> Model Configuration Parameters, чтобы открыть диалоговое окно Configuration Parameters.
Выберите панель Code Generation > Interface.
Установите параметр MAT-file variable name modifier на rt_
. rt_
снабжается префиксом к каждой переменной, которую вы выбрали для входа в систему первой части этого примера.
Нажмите Apply и OK.
Сохраните модель.
На панели инструментов Simulink Editor нажмите кнопку Build Model, чтобы сгенерировать код.
Когда сборка будет закончена, запустите автономную программу из Командного окна.
!myAircraftExample
Программа выполнения пишет следующие сообщения в Командное окно.
** starting the model ** ** created myAircraftExample.mat **
Загрузите файл данных myAircraftExample.mat
.
load myAircraftExample
Для платформ UNIX® запустите исполняемый файл в Командном окне с синтаксисом !./
executable_name
. Если предпочтено, выполнение исполняемый файл от ОС окружают с синтаксисом ./
executable_name
. Для получения дополнительной информации смотрите Выполнение Внешние Команды, Скрипты и Программы (MATLAB).
Продолжите визуализировать и сравнивать результаты.
Когда вы следуете за последовательностью в качестве примера, которая началась в, Конфигурируют Данные сигнала для Журналирования, вы получаете данные из выполнения 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)