В этом примере показов, как программно сконфигурировать несколько образцы ссылочной модели, чтобы использовать различные значения для одних и тех же параметров блоков с помощью структур.
Вы можете использовать структуры, чтобы уменьшить усилия обслуживания, когда вы хотите добавить, переименовать или удалить аргументы. Со структурами математическая функциональность моделей одинаковая.
Чтобы заменить значения параметров структурами для ex_model_arg_ref
и ex_model_arg
, следуйте этим шагам.
Откройте ex_model_arg_ref
модели. Эта модель представляет переиспользуемый алгоритм.
open_system('ex_model_arg_ref')
Создайте структуру, которая содержит одно поле для каждого из объектов параметра, существующих в ex_model_arg_ref
рабочей области. Задайте значение для каждого поля.
structForInst1.gain = 3.17; structForInst1.coeff = 1.05;
Храните структуру в Simulink.Parameter
объект.
structForInst1Param = Simulink.Parameter(structForInst1);
Скопируйте Simulink.Parameter
объект в ex_model_arg_ref
рабочего пространства модели. В данном примере назовите копию объекта structArg
.
modelWorkspace = get_param('ex_model_arg_ref','ModelWorkspace'); assignin(modelWorkspace,'structArg',copy(structForInst1Param));
Сконфигурируйте structArg
как единственный аргумент модели.
set_param('ex_model_arg_ref','ParameterArgumentNames','structArg')
В ex_model_arg_ref
модель, установите параметр Gain блока Gain равным structArg.gain
и установите параметр Numerator блока Discrete Filter равным structArg.coeff
.
set_param('ex_model_arg_ref/Gain','Gain','structArg.gain') set_param('ex_model_arg_ref/Discrete Filter',... 'Numerator','structArg.coeff')
Скопируйте существующую структуру как structForInst2Param
.
structForInst2Param = copy(structForInst1Param);
Установите значения полей в двух структурах на те же числа, которые вы использовали для установки значений аргументов модели в блоках Model.
structForInst1Param.Value.coeff = 0.98; structForInst1Param.Value.gain = 2.98; structForInst2Param.Value.coeff = 1.11; structForInst2Param.Value.gain = 3.34;
Откройте ex_model_arg
модели. Эта модель представляет системную модель, которая использует несколько образцов переиспользуемого алгоритма.
open_system('ex_model_arg')
Например, образец Model
, установите structArg равным structForInst1Param
. Например, образец Model1
, установите structArg равным structForInst2Param
.
instSpecParamsStruct = get_param('ex_model_arg/Model','InstanceParameters'); instSpecParamsStruct1 = get_param('ex_model_arg/Model1','InstanceParameters'); instSpecParamsStruct(1).Value = 'structForInst1Param'; instSpecParamsStruct1(1).Value = 'structForInst2Param'; set_param('ex_model_arg/Model','InstanceParameters',instSpecParamsStruct); set_param('ex_model_arg/Model1','InstanceParameters',instSpecParamsStruct1);
Можно использовать Simulink.Bus
объект как тип данных структур. Объект шины гарантирует, что характеристики специфичных для экземпляра структур, таких как имена и порядок полей, совпадают с характеристиками структуры в рабочем пространстве модели.
Чтобы задать тип данных структур для объектов шины, выполните следующие шаги.
Используйте Simulink.Bus.createObject
функция для создания объекта шины. Иерархия элементов объекта соответствует иерархии полей структуры. Имя объекта по умолчанию slBus1
.
Simulink.Bus.createObject(structForInst1Param.Value);
Переименуйте объект шины путем его копирования.
myParamStructType = copy(slBus1);
Установите тип данных объектов параметров в базовом рабочем пространстве при помощи объекта шины.
structForInst1Param.DataType = 'Bus: myParamStructType'; structForInst2Param.DataType = 'Bus: myParamStructType';
Для structArg
объект, задать DataType
на Bus: myParamStructType
.
temp = getVariable(modelWorkspace,'structArg'); temp = copy(temp); temp.DataType = 'Bus: myParamStructType'; assignin(modelWorkspace,'structArg',copy(temp)); close_system('ex_model_arg_ref',0) close_system('ex_model_arg',0)