Этот пример показывает, как программно сконфигурировать несколько экземпляров модели, на которую ссылаются, чтобы использовать различные значения для того же блочного параметра.
Когда вы моделируете модель, на которую ссылаются, отдельно, объекты параметра в рабочем пространстве модели используют значения, которые вы задаете для объектов Simulink.Parameter
. Блочные параметры также используют эти значения.
Чтобы сконфигурировать параметр Усиления блока Gain и параметр Числителя блока Discrete Filter в качестве образцовых аргументов, выполните эти шаги.
Открытый образцовый ex_model_arg_ref
. Эта модель представляет допускающий повторное использование алгоритм.
open_system('ex_model_arg_ref')
Для блока Gain, установленного значение параметра Усиления к объекту Simulink.Parameter
в рабочем пространстве модели с числовым значением. Для этого примера назовите объект Simulink.Parameter
gainArg
и присвойте значение 3.17
.
set_param('ex_model_arg_ref/Gain','Gain','gainArg') modelWorkspace = get_param('ex_model_arg_ref','ModelWorkspace'); assignin(modelWorkspace,'gainArg',Simulink.Parameter(3.17));
Для блока Discrete Filter, установленного значение параметра Числителя к объекту Simulink.Parameter
в рабочем пространстве модели с числовым значением. Для этого примера назовите объект Simulink.Parameter
coeffArg
и присвойте значение 1.05
.
set_param('ex_model_arg_ref/Discrete Filter','Numerator','coeffArg') assignin(modelWorkspace,'coeffArg',Simulink.Parameter(1.05));
Задайте gainArg
и coeffArg
в качестве образцовых аргументов.
set_param('ex_model_arg_ref','ParameterArgumentNames','coeffArg,gainArg')
Когда вы моделируете родительскую модель, каждый экземпляр допускающей повторное использование модели, на которую ссылаются, использует значения аргументов, которые вы задаете в родительской модели. В этом примере, в верхнем экземпляре ex_model_arg_ref
, объект параметра gainArg
использует значение 2.98
.
Образцовый ex_model_arg
содержит два Блока модели тот ссылочный ex_model_arg_ref
. Чтобы установить различные значения параметров для двух экземпляров модели, выполните эти шаги.
Открытый образцовый ex_model_arg
. Эта модель представляет системную модель, которая использует несколько экземпляров допускающего повторное использование алгоритма.
open_system('ex_model_arg')
Для обоих экземпляров образцового ex_model_arg
, установленных значений для образцовых аргументов.
set_param('ex_model_arg/Model','ParameterArgumentValues',... struct('coeffArg','0.98','gainArg','2.98')) set_param('ex_model_arg/Model1','ParameterArgumentValues',... struct('coeffArg','1.11','gainArg','3.34'))
Можно использовать структуры, чтобы уменьшить усилие по обслуживанию когда это необходимо, чтобы добавить, переименовать или удалить аргументы. Со структурами математическая функциональность моделей является тем же самым.
Чтобы заменить значения параметров на структуры для ex_model_arg_ref
и ex_model_arg
, выполните эти шаги.
Создайте структуру, которая содержит одно поле для каждого из объектов параметра, которые существуют в рабочей области ex_model_arg_ref
. Задайте значение для каждого поля.
structForInst1.gain = 3.17; structForInst1.coeff = 1.05;
Сохраните структуру в объекте Simulink.Parameter
.
structForInst1 = Simulink.Parameter(structForInst1);
Скопируйте объект Simulink.Parameter
в рабочее пространство модели ex_model_arg_ref
. Для этого примера назовите копию объекта structArg
.
assignin(modelWorkspace,'structArg',copy(structForInst1));
Сконфигурируйте 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')
Скопируйте существующую структуру как structForInst2
.
structForInst2 = copy(structForInst1);
Установите значения полей в этих двух структурах к тем же числам, что вы раньше устанавливали образцовые значения аргументов в Блоках модели.
structForInst1.Value.coeff = 0.98; structForInst1.Value.gain = 2.98; structForInst2.Value.coeff = 1.11; structForInst2.Value.gain = 3.34;
Для образцового экземпляра Model
, набор structArg к structForInst1
. Для образцового экземпляра Model1
, набор structArg к structForInst2
.
set_param('ex_model_arg/Model','ParameterArgumentValues',... struct('structArg','structForInst1')) set_param('ex_model_arg/Model1','ParameterArgumentValues',... struct('structArg','structForInst2'))
Можно использовать объект Simulink.Bus
в качестве типа данных структур. Объект шины убеждается, что характеристики специфичных для экземпляра структур, таких как имена и порядок полей, совпадают с характеристиками структуры в рабочем пространстве модели.
Чтобы установить тип данных структур соединять шиной объекты, выполните эти шаги.
Используйте функцию Simulink.Bus.createObject
, чтобы создать объект шины. Иерархия элементов в объекте совпадает с иерархией полей структуры. Именем по умолчанию объекта является slBus1
.
Simulink.Bus.createObject(structForInst1.Value);
Переименуйте объект шины путем копирования его.
myParamStructType = copy(slBus1);
Установите тип данных объектов параметра в базовом рабочем пространстве при помощи объекта шины.
structForInst1.DataType = 'Bus: myParamStructType'; structForInst2.DataType = 'Bus: myParamStructType';
Для объекта structArg
, набор DataType
к Bus: myParamStructType
.
temp = getVariable(modelWorkspace,'structArg'); temp = copy(temp); temp.DataType = 'Bus: myParamStructType'; assignin(modelWorkspace,'structArg',copy(temp));