Следующий пример описывает конфигурирование, выполнение и сравнение результатов rtwdemo_cgv модели в нормальном и программного обеспечения в цикле (SIL) режимы симуляции.
Первая задача для проверки числовой эквивалентности состоит в том, чтобы проверять настройку вашей модели.
Откройте модель rtwdemo_cgv
.
cgvModel = 'rtwdemo_cgv'; load_system(cgvModel);
Сохраните модель в рабочую директорию.
save_system(cgvModel, fullfile(pwd, cgvModel)); close_system(cgvModel); % avoid original model shadowing saved model
Используйте cgv.Config
, чтобы создать объект cgv.Config
. Задайте параметры, которые проверяют и изменяют значения параметра конфигурации и сохраняют модель для режима SIL топ-модели выполнения.
cgvCfg = cgv.Config('rtwdemo_cgv', 'connectivity', 'sil', 'SaveModel', 'on');
Используйте метод configModel
, чтобы рассмотреть вашу настройку модели и изменить настройки, чтобы сконфигурировать вашу модель для SIL. Когда 'connectivity'
установлен в 'sil'
, системный конечный файл автоматически установлен в 'ert.tlc'
. Если вы задали пару параметра/значения, ('SaveModel', 'on'
), когда вы создали объект cgvCfg
, метод cgv.Config.configModel
сохраняет модель.
CGV работает на моделях, которые открыты. Если вы изменяете модель, не сохраняя его, CGV может выдать ошибку.
cgvCfg.configModel(); % Evaluate, change, and save your model for SIL
Отобразите отчет изменений, что cgv.Config.configModel
делает к модели.
cgvCfg.displayReport(); % In this example, this reports no changes
Используйте API CGV, чтобы выполнить модель в двух режимах. Эти два режима в этом примере являются симуляцией режима normal mode и режимом SIL. В каждом выполнении модели объект CGV для каждого режима получает выходные данные и пишет данные в файл.
Если вы уже не сделали так, выполните шаги, описанные в, Конфигурируют Модель.
Создайте объект cgv.CGV
, который задает модель rtwdemo_cgv
в симуляции режима normal mode.
cgvSim = cgv.CGV(cgvModel, 'connectivity', 'sim');
Когда топ-модель установлена в нормальный режим симуляции, наборы API CGV модели, на которые ссылаются, в режиме PIL к режиму Accelerator.
Предоставьте входной файл объекту cgvSim
.
cgvSim.addInputData(1, [cgvModel '_data']);
Перед выполнением модели задайте файлы MATLAB, чтобы выполниться или MAT-файлы, чтобы загрузить. Этот шаг является дополнительным.
cgvSim.addPostLoadFiles({[cgvModel '_init.m']});
Задайте местоположение, где объект пишет все выходные данные и файлы метаданных для выполнения. Этот шаг является дополнительным.
cgvSim.setOutputDir('cgv_output');
Выполните модель.
result1 = cgvSim.run();
Сопоставьте выходные данные с входными данными.
outputDataSim = cgvSim.getOutputData(1);
Для следующего режима выполнения, SIL, повторных шагов 2-7.
cgvSil = cgv.CGV( cgvModel, 'Connectivity', 'sil'); cgvSil.addInputData(1, [cgvModel '_data']); cgvSil.addPostLoadFiles({[cgvModel '_init.m']}); cgvSil.setOutputDir('cgv_output'); result2 = cgvSil.run();
После подготовки и запущения теста, сравните выходные параметры путем выполнения следующего:
Если вы уже не сделали так, конфигурируете и тестируете модель, как описано в Конфигурируют Модель и Выполняют Модель.
Протестируйте это результат выполнения модели:
if ~result1 || ~result2 error('Execution of model failed.'); end
Используйте метод getOutputData
, чтобы получить выходные данные от cgv. Объекты CGV.
simData = cgvSim.getOutputData(1); silData = cgvSil.getOutputData(1);
Отобразите список сигналов по наименованию с помощью метода getSavedSignals
.
cgvSim.getSavedSignals(simData);
Используя список сигналов, создайте список сигналов в массиве ячеек из символьных векторов. Список сигнала может содержать много сигналов.
signalList = {'simData.getElement(4).Values.Data'};
Используйте метод createToleranceFile
, чтобы создать файл, в этом примере, 'localtol'
, коррелируя информацию о допуске с именами выходного сигнала.
toleranceList = {{'absolute', 0.5}}; cgv.CGV.createToleranceFile('localtol', signalList, toleranceList);
Сравните сигналы выходных данных. По умолчанию метод compare
смотрит на все сигналы, которые имеют общее название между обоими выполнением. Если файл допуска присутствует, cgv.CGV.compare
использует связанный допуск к определенному сигналу во время сравнения; в противном случае допуск является нулем. В этом примере параметр 'Plot'
устанавливается на 'mismatch'
. Поэтому только несовпадающие сигналы производят график.
[matchNames, ~, mismatchNames, ~] = ... cgv.CGV.compare(simData, silData, 'Plot', 'mismatch', ... 'Tolerancefile', 'localtol'); fprintf( '%d Signals match, %d Signals mismatch\n', ... length(matchNames), length(mismatchNames)); disp('Mismatched Signal Names:'); disp(mismatchNames);
14 Signals match, 1 Signals mismatch Mismatched Signal Names: 'simData.getElement(4).Values.Data'
График следует из несоответствия сигнала.
Более низкий график отображает числовое различие между результатами.
После подготовки и запущения теста, сравните выходные параметры отдельных сигналов путем выполнения следующего:
Если вы уже не сделали так, конфигурируете и тестируете модель, как описано в Конфигурируют Модель и Выполняют Модель.
Используйте метод getOutputData
, чтобы получить выходные данные от объектов cgv.CGV
.
simData = cgvSim.getOutputData(1); silData = cgvSil.getOutputData(1);
Используйте метод getSavedSignals
, чтобы отобразить имена сигнала выходных данных. Создайте список определенных имен сигнала в массиве ячеек из символьных векторов. Список сигнала может содержать много сигналов.
cgv.CGV.getSavedSignals(simData); signalList = {'simData.getElement(3).Values.hi1.mid0.lo1.Data', ... 'simData.getElement(3).Values.hi1.mid0.lo2.Data', ... 'simData.getElement(2).Values.Data(:,3)'};
Используйте заданные сигналы, как введено для метода compare
, чтобы сравнить сигналы от отдельных выполнений.
[matchNames, ~, mismatchNames, ~] = ... cgv.CGV.compare(simData, silData, 'Plot', 'mismatch', ... 'signals', signalList); fprintf( '%d Signals match, %d Signals mismatch\n', ... length(matchNames), length(mismatchNames)); if ~isempty(mismatchNames) disp( 'Mismatched Signal Names:'); disp(mismatchNames); end
3 Signals match, 0 Signals mismatch
После подготовки и запущения теста, используйте метод plot
, чтобы построить выходные сигналы.
Если вы уже не сделали так, конфигурируете и тестируете модель, как описано в Конфигурируют Модель и Выполняют Модель.
Используйте метод getOutputData
, чтобы получить выходные данные от объектов cgv.CGV
.
simData = cgvSim.getOutputData(1);
Используйте метод getSavedSignals
, чтобы отобразить имена сигнала выходных данных. Создайте список определенных имен сигнала в массиве ячеек из символьных векторов. Список сигнала может содержать много сигналов.
cgv.CGV.getSavedSignals(simData); signalList = {'simData.getElement(2).Values.Data(:,1)'};
Используйте заданный список сигнала, как введено для метода plot
, чтобы сравнить сигналы от отдельных выполнений.
[signalNames, signalFigures] = cgv.CGV.plot(simData, ... 'Signals', signalList);