В этом примере показано, как уточнить типы данных модели с помощью командной строки.
Откройте fxpdemo_feedback
модель.
model = 'fxpdemo_feedback';
open_system(model);
Подсистема Контроллера использует типы данных с фиксированной точкой.
sud = 'fxpdemo_feedback/Controller';
open_system(sud)
Создайте DataTypeWorkflow.Converter
объект для уточнения типов данных подсистемы Controller fxpdemo_feedback
модель.
converter = DataTypeWorkflow.Converter(sud);
Симулируйте модель и сохраните результаты в запуске под названием InitialRun
.
converter.CurrentRunName = 'InitialRun';
converter.simulateSystem();
Определите, какие переполнения произошли во время запуска.
saturations = converter.saturationOverflows('InitialRun')
saturations = Result with properties: ResultName: 'fxpdemo_feedback/Controller/Up Cast' SpecifiedDataType: 'fixdt(1,16,14)' CompiledDataType: 'fixdt(1,16,14)' ProposedDataType: '' Wraps: [] Saturations: 23 WholeNumber: 0 SimMin: -2 SimMax: 1.9999 DerivedMin: [] DerivedMax: [] RunName: 'InitialRun' Comments: {'An output data type cannot be specified on this result. The output type is the same as the input type.'} DesignMin: [] DesignMax: []
wraps = converter.wrapOverflows('InitialRun')
wraps = []
Насыщение происходит в блоке Up Cast подсистемы Контроллера во время симуляции. Нет переносов. Уточните типы данных модели так, чтобы не было насыщений.
Сконфигурируйте модель для преобразования с помощью ярлыка. Поиск ярлыков, доступных для системы, путем доступа к ShortcutsForSelectedSystem
свойство объекта конвертера.
shortcuts = converter.ShortcutsForSelectedSystem
shortcuts = 6x1 cell array {'Range collection using double override' } {'Range collection with specified data types' } {'Range collection using single override' } {'Disable range collection' } {'Remove overrides and disable range collection'} {'Range collection using scaled double override'}
Чтобы собрать идеализированные области значений для системы, используйте 'Range collection using double override'
ярлык, переопределите систему типами данных двойной точности и включите инструментирование.
converter.applySettingsFromShortcut(shortcuts{1});
Этот ярлык также обновляет текущее свойство имени запуска объекта конвертера.
baselineRun = converter.CurrentRunName
baselineRun = 'Ranges(Double)'
Симулируйте модель снова, чтобы собрать идеализированную информацию о области значений. Эти результаты хранятся в запуске baselineRun
.
converter.simulateSystem();
Создайте ProposalSettings
объект для управления настройками предложения типа данных и определения допусков для сигналов в модели.
propSettings = DataTypeWorkflow.ProposalSettings;
Задайте относительную погрешность 20% для сигнала выхода PlantOutput
сигнал в модели.
addTolerance(propSettings, 'fxpdemo_feedback/Analog Plant', 1, 'RelTol', 2e-1);
Просмотреть все допуски, заданные для системы, можно с помощью showTolerances
способ.
showTolerances(propSettings)
Path Port_Index Tolerance_Type Tolerance_Value _________________________________ __________ ______________ _______________ {'fxpdemo_feedback/Analog Plant'} 1 {'RelTol'} 0.2
Предлагать типы данных для системы можно с помощью настроек предложения, заданных в propSettings
и области значений, хранящиеся в baselineRun
run.
converter.proposeDataTypes(baselineRun, propSettings)
Применить типы данных, предложенные для baselineRun
перейти к модели.
converter.applyDataTypes(baselineRun)
Проверьте, что поведение модели с использованием новых типов данных соответствует допускам, заданным в объекте параметров предложения, propSettings
. The verify
метод удаляет переопределение типа данных и моделирует модель с помощью обновленных типов данных с фиксированной точкой. Это возвращает DataTypeWorkflow.VerificationResult
объект.
result = verify(converter, baselineRun, 'FixedRun')
result = VerificationResult with properties: ScenarioResults: [0x0 DataTypeWorkflow.VerificationResult] RunName: 'FixedRun' BaselineRunName: 'Ranges(Double)' Status: 'Pass' MaxDifference: 0.0351
Использование explore
метод DataTypeWorkflow.VerificationResult
запустите Данные Моделирования Inspector и исследуйте сигналы, для которых вы задали допуск.
explore(result)