Когда вы используете объект Simulink.Parameter
или числовую переменную MATLAB, чтобы установить два или больше значения параметров блоков, если параметры блоков имеют различные типы данных, необходимо явным образом задать тип данных объекта или переменной. Например, вы не можете оставить тип данных объекта параметра в значении по умолчанию, auto
.
Создайте модель ex_paramdt_contexts
.
ex_paramdt_contexts
В модели выберите View> Model Data Editor.
В Model Data Editor, на вкладке Inports/Outports, используют столбец Типа данных, чтобы установить тип данных блока In1
Inport к single
и тип данных блока In2
к int8
.
На вкладке Signals, набор типы данных блока Gain выходные параметры к Inherit: Same as input
.
На вкладке Parameters, для параметров Усиления блоков Усиления, Типа данных набора к Inherit: Same as input
.
Для параметров Усиления, установленного Значения к 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, для любых параметров блоков Усиления, кликают по ячейке в Столбце значений. Рядом с myGainParam
кликните по кнопке действий (с тремя вертикальными точками) и выберите Create.
В диалоговом окне Create New Data, установленном Значении к Simulink.Parameter(3)
и нажимают Create. Объект Simulink.Parameter
со значением 3
появляется в базовом рабочем пространстве.
В myGainParam диалоговом окне свойства, Типе данных набора к int8
и Классе памяти к ExportedGlobal
. С классом памяти ExportedGlobal
объект появляется в сгенерированном коде как глобальная переменная.
Также, чтобы создать и сконфигурировать объект параметра, используйте эти команды в командной строке:
myGainParam = Simulink.Parameter(3); myGainParam.CoderInfo.StorageClass = 'ExportedGlobal'; myGainParam.DataType = 'int8';
В этой модели вы используете объект параметра myGainParam
, чтобы установить два значения параметров блоков. Параметры блоков наследовали различные типы данных от входных сигналов блока (single
или int8
). Чтобы использовать myGainParam
в этих контекстах различного типа данных, вы явным образом задаете тип данных объекта параметра путем установки свойства DataType
на int8
.
Опционально, используйте объект Simulink.NumericType
или Simulink.AliasType
установить тип данных объекта параметра и один из типов данных сигнала. Этот метод устраняет ненужные преобразования типа и переключает сгенерированный код на нижний регистр из-за несоответствия между типом данных объекта параметра и типом данных сигнала.
В командной строке создайте объект Simulink.NumericType
представлять тип данных int8
.
sharedType_int8 = fixdt('int8');
В Model Data Editor, на вкладке Inports/Outports, устанавливает тип данных блока In2
Inport к sharedType_int8
.
На вкладке Parameters обновите блок-схему. Таблица данных теперь содержит строку, которая представляет объект параметра, myGainParam
.
Используйте столбец Типа данных, чтобы установить тип данных объекта параметра к sharedType_int8
.
Также, чтобы сконфигурировать блок и объект, используйте эти команды в командной строке:
myGainParam.DataType = 'sharedType_int8'; set_param('ex_paramdt_contexts/In2','OutDataTypeStr','sharedType_int8')
Объект параметра и сигнал используют тип данных int8
. Чтобы изменить этот тип данных, настройте свойства объекта sharedType_int8
типа данных.
Сгенерируйте код из модели.
rtwbuild('ex_paramdt_contexts')
### Starting build procedure for model: ex_paramdt_contexts ### Successful completion of build procedure for model: ex_paramdt_contexts
Сгенерированный 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, входной сигнал которого использует тип данных 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); }