Группируйте несколько аргументов модели в одну структуру

В этом примере показов, как программно сконфигурировать несколько образцы ссылочной модели, чтобы использовать различные значения для одних и тех же параметров блоков с помощью структур.

Сконфигурируйте модель-ссылку, чтобы использовать аргументы модели, сгруппированные в структуру

Вы можете использовать структуры, чтобы уменьшить усилия обслуживания, когда вы хотите добавить, переименовать или удалить аргументы. Со структурами математическая функциональность моделей одинаковая.

Чтобы заменить значения параметров структурами для 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)

Похожие темы