Данные о параметре повторного использования в контекстах другого типа данных

Когда вы используете 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);
}

Похожие темы