Когда вы используете Simulink.Parameter
объект или числовой переменный MATLAB, чтобы задать два или более значений блочных параметров, если параметры блоков имеют различные типы данных, необходимо явным образом задать тип данных объекта или переменной. Например, вы не можете оставить тип данных объекта параметра равным значению по умолчанию, auto
.
Создайте модель ex_paramdt_contexts
.
ex_paramdt_contexts
На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).
В Model Data Editor на вкладке Inports/Outports используйте столбец Data Type, чтобы задать тип данных In1
Входящий блок в single
и тип данных In2
блокировать в int8
.
На вкладке Signals установите типы данных выходов блока Gain равными Inherit: Same as input
.
На вкладке Parameters, для параметров Gain блоков Gain, установите Тип данных Inherit: Same as input
.
Для параметров Gain установите Значение равным myGainParam
.
Кроме того, чтобы сконфигурировать блоки, используйте эти команды в командной строке:
set_param('ex_paramdt_contexts/In1','OutDataTypeStr','single') set_param('ex_paramdt_contexts/In2','OutDataTypeStr','int8') set_param('ex_paramdt_contexts/Gain - single','Gain','myGainParam',... 'OutDataTypeStr','Inherit: Same as input',... 'ParamDataTypeStr','Inherit: Same as input') set_param('ex_paramdt_contexts/Gain - int8','Gain','myGainParam',... 'OutDataTypeStr','Inherit: Same as input',... 'ParamDataTypeStr','Inherit: Same as input')
В Model Data Editor для любых параметров блоков Gain щелкните по камере в столбце Значения. Рядом с myGainParam
, нажмите кнопку действия (с тремя вертикальными точками) и выберите Create.
В диалоговом окне «Создание новых данных» установите значение Simulink.Parameter(3)
и нажмите «Создать». A Simulink.Parameter
объект со значением 3
появляется в рабочем пространстве модели.
В диалоговом окне свойства myGainParam установите тип данных int8
.
На Code Generation
на вкладке, нажмите Configure in Coder App.
В редакторе Отображения установите класс памяти myGainParam
на ExportedGlobal
. С классом памяти ExportedGlobal
объект появляется в сгенерированном коде как глобальная переменная.
Кроме того, чтобы создать и сконфигурировать объект параметра, используйте эти команды в командной строке:
mws = get_param('ex_paramdt_contexts', 'modelworkspace'); mws.assignin('myGainParam',Simulink.Parameter(3)); setVariablePart(mws,'myGainParam.DataType','int8'); cm = coder.mapping.utils.create('ex_paramdt_contexts'); setModelParameter(cm,'myGainParam','StorageClass','ExportedGlobal');
В этой модели вы используете объект параметра myGainParam
для установки двух значений параметра блоков. Параметры блоков наследуют различные типы данных от входных сигналов блоков (single
или int8
). Как использовать myGainParam
в этих различных типах данных контекстах вы явным образом задаете тип данных объекта параметра путем установки DataType
свойство к int8
.
Опционально используйте Simulink.NumericType
или Simulink.AliasType
объект для установки типа данных объекта параметра и одного из типов данных сигнала. Этот метод устраняет ненужные наборы типов и сдвиги в сгенерированном коде из-за несоответствия между типом данных объекта параметра и типом данных сигнала.
В командной строке создайте Simulink.NumericType
объект для представления типа данных int8
.
sharedType_int8 = fixdt('int8');
В Model Data Editor на вкладке Inports/Outports установите тип данных In2
Входящий блок в sharedType_int8
.
На вкладке Parameters обновите блок. Таблица данных теперь содержит строку, которая представляет объект параметра, myGainParam
.
Используйте столбец Data Type, чтобы задать тип данных объекта параметра sharedType_int8
.
Кроме того, чтобы сконфигурировать блок и объект, используйте эти команды в командной строке:
myGainParam.DataType = 'sharedType_int8'; set_param('ex_paramdt_contexts/In2','OutDataTypeStr','sharedType_int8')
Объект параметра и сигнал используют тип данных int8
. Чтобы изменить этот тип данных, измените свойства объекта типа данных sharedType_int8
.
Сгенерируйте код из модели.
slbuild('ex_paramdt_contexts')
### Starting build procedure for: ex_paramdt_contexts ### Successful completion of build procedure for: ex_paramdt_contexts Build Summary Top model targets built: Model Action Rebuild Reason ==================================================================================================== ex_paramdt_contexts Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.464s
Сгенерированный файл ex_paramdt_contexts.c
задает глобальную переменную myGainParam
при помощи типа данных int8_T
, что соответствует типу данных int8
в Simulink.
file = fullfile('ex_paramdt_contexts_grt_rtw','ex_paramdt_contexts.c'); rtwdemodbtype(file,'/* Exported block parameters */','int8_T myGainParam = 3;',1,1)
/* Exported block parameters */ int8_T myGainParam = 3; /* Variable: myGainParam
Сгенерированный код в модели step
функция использует myGainParam
вычислить выходы двух блоков Gain. В случае блока Gain, входной сигнал которого использует тип данных single
алгоритм кода приводит myGainParam
к типу данных real32_T
, что соответствует типу данных single
в Simulink.
rtwdemodbtype(file,'/* Model step function */',... '/* Model initialize function */',1,0)
/* Model step function */ void ex_paramdt_contexts_step(void) { /* Outport: '<Root>/Out1' incorporates: * Gain: '<Root>/Gain - single' * Inport: '<Root>/In1' */ ex_paramdt_contexts_Y.Out1 = (real32_T)myGainParam * ex_paramdt_contexts_U.In1; /* Outport: '<Root>/Out2' incorporates: * Gain: '<Root>/Gain - int8' * Inport: '<Root>/In2' */ ex_paramdt_contexts_Y.Out2 = (int8_T)(myGainParam * ex_paramdt_contexts_U.In2); }