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

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

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

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

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

Похожие темы