В этом примере показано, как программно настроить несколько экземпляров ссылочной модели для использования различных значений одного параметра блока с помощью структур.
Структуры можно использовать для уменьшения затрат на ведение при необходимости добавления, переименования или удаления аргументов. Со структурами математическая функциональность моделей одинакова.
Замена значений параметров структурами для 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 модель, задайте для параметра «Усиление» блока «Усиление» значение structArg.gain и задайте для параметра Numerator блока дискретного фильтра значение 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);
Установите значения полей в двух структурах в те же числа, которые использовались для установки значений аргументов модели в блоках модели.
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)