Доступно несколько методов, с помощью которых программа, сгенерированная Simulink® Coder™ программное обеспечение может сохранить данные в MAT-файле для анализа. Сгенерированный исполняемый файл может сохранять состояния системы, выходы и время симуляции на каждом временном шаге выполнения модели. Данные записываются в MAT-файл с именем (по умолчанию)
, где model
.matmodel
- имя вашей модели. Смотрите Данные журнала для анализа для данных логгирования учебника.
Примечание
Логгирование данных доступно только для системных целевых файлов, имеющих доступ к файловой системе. В сложение только целевые исполняемые файлы RSim способны обращаться к Рабочему пространству MATLAB данным.
Ограничения на логгирование MAT-файлов см. в параметре конфигурации MAT-файл.
В этом примере показано, как данные сгенерированы копией модели slexAircraftExample
регистрируется в файле myAircraftExample.mat
. Инструкции по настройке копии slexAircraftExample
см. в разделе Рабочий процесс процесса сборки для систем реального времени как
myAircraftExample
в рабочей папке, если вы еще этого не сделали.
Примечание
Когда вы конфигурируете генератор кода, чтобы создать код, который включает поддержку регистрации данных во время выполнения, генератор кода может включать текст для имен блоков в пути блоков, включенные в файл журнала. Если текст включает символы, которые не представлены в кодировке набора символов для модели, генератор кода заменяет символы XML-переходными последовательностями. Например, генератор кода заменяет японскую полноразмерную букву Катаканы ア на выходную последовательность ア
. Для получения дополнительной информации смотрите Интернационализация и Генерация кода.
Чтобы сконфигурировать логгирование данных, откройте диалоговое окно Параметров конфигурации и выберите панель Data Import/Export. Процесс аналогичен конфигурированию модели Simulink для сохранения выхода в MATLAB® рабочей области. Для каждой возвращаемой переменной рабочей области, которую вы задаете и активируете, программное обеспечение Simulink Coder задает параллельную переменную MAT-файла. Для примера, если вы сохраняете время симуляции в переменную tout
, ваша сгенерированная программа регистрирует те же данные в переменной с именем rt_tout
. Префикс можно изменить rt_
к суффиксу (_rt
), или полностью устранить его. Вы делаете это, задавая MAT-file variable name modifier параметра конфигурации модели.
Simulink позволяет вам записывать данные о сигнале из любого места в модели. В редакторе Simulink выберите сигналы, которые вы хотите записать, а затем в раскрывающемся списке кнопки Simulation Data Inspector выберите Log Selected Signals. Однако генератор кода не использует этот метод регистрации сигнала в сгенерированном коде. Чтобы войти в сгенерированный код, используйте параметры Data Import/Export, описанные ниже, или включите To File или To Workspace блоки в свою модель.
Примечание
Если вы включите MAT-файл и логгирование сигналов (через панель Data Import/Export) и выберете сигналы для логгирования (через Редактор Simulink), вы увидите следующее предупреждение при построении модели:
Warning: MAT-file logging does not support signal logging. When your model code executes, the signal logging variable 'rt_logsout' will not be saved to the MAT-file.
В этом примере вы изменяете myAircraftExample
модель так, чтобы сгенерированная программа сохраняла время симуляции и выходы системы в файл myAircraftExample.mat
. Затем вы загружаете данные в базовое рабочее пространство и строите график времени симуляции с одним из выходов. The myAircraftExample
модель должна быть сконфигурирована так, как описано в рабочем процессе процесса сборки для систем реального времени.
Чтобы использовать функцию логгирования данных:
Откройте myAircraftExample
модель, если она еще не открыта.
Откройте диалоговое окно Параметры конфигурации.
Выберите панель Data Import/Export. Панель Data Import/Export позволяет вам задать, какие данные о выходе будут сохранены в рабочей области и какие имена переменных будут использоваться для нее.
Установите Format параметра равным Structure with time
. При выборе этого формата Simulink сохраняет состояния модели и выходы в структурах, имена которых заданы в области Save to workspace or file. По умолчанию структуры xout
для состояний и yout
для выхода. Структура, используемая для сохранения выхода, имеет два поля верхнего уровня: time
и signals
. The time
поле содержит вектор времен симуляции и signals
содержит массив подструктур, каждая из которых соответствует выходному порту модели.
Выберите Output. Это говорит Simulink сохранить данные выходного сигнала во время симуляции как переменную с именем yout
. Выбор Output позволяет генератору кода создать код, который регистрирует корневой блок Выхода (alpha, rad
) в MAT-файл.
Установите Decimation значение 1
.
Если выбраны другие параметры, очистите их. На рисунке ниже показано, как должно появиться диалоговое окно.
Нажмите Apply и OK, чтобы зарегистрировать изменения и закрыть диалоговое окно.
Сохраните модель.
В окне модели дважды кликните символ возможностей рядом с блоком Aircraft Dynamics Model, затем симулируйте модель. Результат отображения возможностей показан ниже.
Проверьте, что время симуляции и выходы были сохранены в базовом рабочем пространстве в MAT-файлах. В подсказке MATLAB введите:
whos yout
Name Size Bytes Class Attributes yout 1x1 10756 struct
Проверьте, что alpha, rad
был записан путем построения графика времени симуляции по сравнению с этой переменной. В Командном окне введите:
plot(yout.time,yout.signals.values)
Получившийся график показан ниже.
Во второй части этого примера вы создаете и запускаете исполняемую программу, созданную генератором кода для модели myAircraftExample
. Программа выводит MAT-файл, содержащий время симуляции и вывод, который вы ранее исследовали. Несмотря на то, что вы уже сгенерировали код для myAircraftExample
теперь необходимо перегенерировать этот код, поскольку вы изменили модель, включив логгирование данных. Приведенные ниже шаги объясняют эту процедуру.
Чтобы избежать перезаписи данных рабочей области данными из запусков симуляции, генератор кода изменяет идентификаторы для переменных, записанных Simulink. Вы можете управлять этими изменениями.
Установите MAT-file variable name modifier параметра конфигурации модели в _rt
. Это добавляет суффикс _rt
каждой переменной, выбранной для регистрации в первой части этого примера.
Нажмите Apply и OK, чтобы зарегистрировать изменения и закрыть диалоговое окно.
Сохраните модель.
Создайте исполняемый файл.
Когда сборка завершится, запустите исполняемую программу с командой:
!myAircraftExample
Теперь программа создает две линии сообщений, указывающие, что MAT-файл был записан.
** starting the model ** ** created myAircraftExample.mat **
Загрузите данные MAT-файла, созданные исполняемым файлом, и посмотрите на переменные рабочей области из симуляции и сгенерированной программы путем набора:
load myAircraftExample.mat whos yout*
Simulink отображает:
Name Size Bytes Class Attributes yout 1x1 10756 struct yout_rt 1x1 10756 struct
Обратите внимание, что размер и байты структур, полученных в результате запуска симуляции и сгенерированного кода, совпадают.
Постройте график вывода сгенерированного кода путем ввода следующей команды в Командном окне:
plot(yout_rt.time,yout_rt.signals.values)
График должен быть идентичен графику, который вы создали в предыдущей части этого примера.
Совет
Для UNIX® платформы, запустите исполняемую программу в Командном окне с синтаксисом !./
executable_name
. При желании запустите исполняемую программу из интерпретатора ОС с синтаксисом ./
executable_name
. Для получения дополнительной информации см. раздел «Запуск внешних команд, скриптов и программ».
Панель Data Import/Export позволяет сгенерированной программе сохранять состояния системы, выходы и время симуляции на каждом временном шаге выполнения модели. Данные записываются в MAT-файл с именем (по умолчанию)
.model
.mat
Прежде чем использовать эту функцию логгирования данных, вы должны узнать, как сконфигурировать модель Simulink, чтобы вернуть выход в рабочее пространство MATLAB. Это обсуждается в разделе Экспорт данных моделирования.
Для каждой возвращаемой переменной рабочей области, которую вы задаете и активируете, генератор кода задает переменную MAT-файла. Для примера, если ваша модель сохраняет время симуляции в переменной рабочей области tout
, ваша сгенерированная программа регистрирует те же данные в переменной с именем (по умолчанию) rt_tout
.
Код, сгенерированный генератором кода, регистрирует следующие данные:
Корневые блоки Outport
Имя переменной MAT-файла по умолчанию для системных выходов rt_yout
.
Порядок сортировки rt_yout
массив основан на номере порта блока Outport, начиная с 1.
Непрерывные и дискретные состояния в модели
Имя переменной MAT-файла по умолчанию для состояний системы rt_xout
.
Время симуляции
Имя переменной MAT-файла по умолчанию для времени симуляции rt_tout
.
По умолчанию генератор кода префиксирует текст rt_
к именам переменных для системных выходов, состояний и времени симуляции для формирования имен переменных MAT-файлов. Чтобы изменить этот префикс для модели, установите параметр конфигурации модели MAT-file variable name modifier на (rt_
), суффикс (_rt
), либо без модификатора (none
). Другие системные целевые файлы могут не поддерживать этот параметр.
Можно задать опции компилятора, чтобы переопределить следующие атрибуты MAT-файла в сгенерированном коде:
Атрибут MAT-файла | Дефолт | Опция компилятора |
---|---|---|
Имя |
| -DSAVEFILE |
Размер буфера логгирования данных | 1024 байта |
|
Примечание
Допустимый синтаксис опции может варьироваться среди компиляторов. Для примера, Microsoft® Визуальный C++® компиляторы обычно принимают/DSAVEFILE =
а также filename
-DSAVEFILE
.= filename
Для целевого объекта на основе шаблона make-файла (TMF) установите Make command параметра конфигурации модели в опцию компилятора. Для примера:
Для системного целевого файла на основе набора инструментальных средств, такого как GRT или ERT, добавьте опцию компилятора к строению модели. Установите Build configuration параметра равным Specify
, и добавить опции компилятора в C Compiler строку таблицы Tool/ Options. Для примера:
Чтобы добавить опцию компилятора в пользовательский набор инструментальных средств, можно изменить и перерегистрировать пользовательский набор инструментальных средств с помощью процедур, показанных в примере Добавить пользовательские наборы инструментальных средств в MATLAB ® Coder™ Build Process. Для примера, чтобы добавить опцию компилятора в исходный файл MATLAB для пользовательского набора инструментальных средств, можно задать myCompilerOpts
следующим образом:
optimsOffOpts = {'/c /Od'}; optimsOnOpts = {'/c /O2'}; cCompilerOpts = '$(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL)'; cppCompilerOpts = '$(cflags) $(CVARSFLAG) $(CPPFLAGS_ADDITIONAL)'; myCompilerOpts = {' -DSAVEFILE=myCodeLog.mat '}; ...
Тогда можно добавить myCompilerOpts
к флагам для каждого строения и компилятора, к которым она применяется, например:
cfg = tc.getBuildConfiguration('Faster Builds'); cfg.setOption('C Compiler', horzcat(cCompilerOpts, myCompilerOpts, optimsOffOpts));
Как показано на рисунке Добавление пользовательских наборов инструментальных средств в MATLAB ® Coder™ Build Process, после изменения пользовательского набора инструментальных средств вы сохраняете строение в MAT-файле и обновляете целевой реестр.
Код, сгенерированный генератором кода, также регистрирует данные из этих источников:
Блоки Scope, которые имеют Log data to workspace параметров блоков
Вы должны задать имя переменной и формат данных в каждом диалоговом окне блока Scope.
To Workspace блоки в модели
Вы должны задать имя переменной и формат данных в каждом диалоговом окне блока To Workspace.
Переменные записываются в model.mat
, наряду с переменными, записанными из панели Workspace I/O.
Можно также записать данные в блок To File. Сгенерированная программа создает отдельный MAT-файл (отличный от model.mat
) для каждого блока To File в модели. Файл содержит блочное время и входные переменные (переменные ). Вы должны задать имя файла, имена переменных, десятикратное уменьшение и шаг расчета в диалоговом окне блока To File.
Примечание
Модели, на которые ссылаются блоки Model, не выполняют регистрацию данных в этом контексте, кроме состояний, которые можно включить в состояние, регистрируемое для верхних моделей. Код, сгенерированный программным обеспечением Simulink Coder для ссылок на модели, не выполняет регистрацию данных в MAT-файлах.
При регистрации данных в однозадачных и многозадачных системах вы заметите различия в логгировании
Непоследовательные корневые блоки Outport
Дискретные состояния
В многозадачном режиме логгирование состояний и выходов выполняется после первого выполнения задачи (а не в конце первого временного шага). В однозадачном режиме код, сгенерированный процедурой сборки, регистрирует состояния и выходы после первого временного шага.
Смотрите Регистрацию данных в однозадачной и многозадачной модели Выполнение для получения дополнительной информации о различиях между однозадачным и многозадачным логгированием данных.
Примечание
Цель быстрой симуляции (RSim) обеспечивает расширенные опции логгирования. Дополнительные сведения см. в разделах Ускорение, Уточнение и Тестирование Гибридной Динамической Системы по Хосту-компьютеру при Помощи RSim System Target Файла.