При использовании Simulink.Parameter объект или числовая переменная MATLAB для установки двух или более значений параметров блока, если параметры блока имеют различные типы данных, необходимо явно указать тип данных объекта или переменной. Например, нельзя оставить тип данных объекта параметра значением по умолчанию, auto.
Создание модели ex_paramdt_contexts.
ex_paramdt_contexts

На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).
В редакторе данных модели на вкладке Ввод/вывод (Inports/Outports) используйте столбец Тип данных (Data Type), чтобы задать тип данных In1 Блок ввода в single и тип данных In2 блок в int8.
На вкладке «Сигналы» установите типы данных выходных сигналов блока усиления в значение Inherit: Same as input.
На вкладке «Параметры» для параметров усиления блоков усиления задайте для параметра «Тип данных» значение Inherit: Same as input.
Для параметров усиления установите значение Value равным 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')
В редакторе данных модели для параметра блока «Усиление» щелкните ячейку в столбце «Значение». Рядом с myGainParamнажмите кнопку действия (с тремя вертикальными точками) и выберите «Создать».
В диалоговом окне «Создание новых данных» задайте для параметра «Значение» значение Simulink.Parameter(3) и нажмите кнопку «Создать». A Simulink.Parameter объект со значением 3 появляется в рабочем пространстве модели.
В диалоговом окне свойств myGainParam задайте для параметра «Тип данных» значение int8.
На Code Generation щелкните Настроить в приложении Coder.
В редакторе сопоставлений кодов задайте класс хранения 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');
В редакторе данных модели на вкладке «Ввод/вывод» задайте тип данных In2 Блок ввода в sharedType_int8.
На вкладке «Параметры» обновите блок-схему. Таблица данных теперь содержит строку, представляющую объект параметра, 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 для вычисления выходных сигналов двух блоков усиления. В случае блока усиления, входной сигнал которого использует тип данных 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);
}