В следующем примере описывается конфигурирование, выполнение и сравнение результатов 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 для выполнения модели в двух режимах. Двумя режимами в этом примере являются моделирование нормального режима и режим SIL. При каждом выполнении модели объект CGV для каждого режима захватывает выходные данные и записывает данные в файл.
Если это еще не сделано, выполните действия, описанные в разделе Настройка модели.
Создать cgv.CGV объект, определяющий rtwdemo_cgv модель в обычном режиме моделирования.
cgvSim = cgv.CGV(cgvModel, 'connectivity', 'sim');
Примечание
Если для модели верхнего уровня установлен режим нормального моделирования, API CGV устанавливает ссылочные модели в режиме PIL в режим ускорителя.
Предоставьте входной файл в 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);
end3 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);
