Когда вы используете Simulink.Parameter
возразите или числовая переменная MATLAB, чтобы установить два или больше значения параметров блоков, если параметры блоков имеют различные типы данных, необходимо явным образом задать тип данных объекта или переменной. Например, вы не можете оставить тип данных объекта параметра в значении по умолчанию, auto
.
Создайте модель ex_paramdt_contexts
.
ex_paramdt_contexts
На вкладке Modeling нажмите 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
.
На 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
Блок Inport к sharedType_int8
.
На вкладке Parameters обновите блок-схему. Таблица данных теперь содержит строку, которая представляет объект параметра, myGainParam
.
Используйте столбец Типа данных, чтобы установить тип данных объекта параметра к 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, входной сигнал которого использует тип данных 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); }