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

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

Похожие темы