Аргументы многоуровневой модели группы в одну структуру

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

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

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

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

Похожие темы