Запишите значения ненастраиваемых параметров к файлу
model.rtw
int_T ssWriteRTWParamSettings(SimStruct *S, int_T nParamSettings, int_T paramType, const char_T *settingName, ...)
S
SimStruct, представляющий Блок s-function.
nParamSettings
Количество установок параметров.
paramType
Тип параметра (см. Установку параметра Специфичные для типа Аргументы).
settingName
Имя параметра.
...
Остающиеся аргументы зависят от типа параметра (см. Установку параметра Специфичные для типа Аргументы).
int_T
(1
или 0
) или boolean_T
(true
или false
) указание на успешность или неуспешность функции.
Используйте эту функцию в mdlRTW
, чтобы записать ненастраиваемую информацию об установке параметра в файл
этой S-функцииmodel.rtw
. Можно также использовать этот макрос, чтобы выписать другие постоянные значения, требуемые сгенерировать код для этой S-функции.
Этот раздел перечисляет специфичные для параметра аргументы, требуемые каждым типом параметра.
SSWRITE_VALUE_STR
(закрыл кавычки вектор символов): Используйте SSWRITE_VALUE_STR
для любого вектора символов отдельного слова, который не начинается с номера или содержит смешанные символы. В некоторых случаях ssWriteRTWParamSettings
заключает вектор символов в кавычки даже при том, что вы использовали SSWRITE_VALUE_STR
. Например, если длина вектора символов заставляет соответствующую строку в образцовом файле переноситься посреди вектора символов, ssWriteRTWParamSettings
использует кавычки, чтобы поддержать значение вектора символов.
Аргумент | Описание |
---|---|
const char_T *value | Вектор символов (например, USA ) |
SSWRITE_VALUE_QSTR
(заключенный в кавычки вектор символов): Используйте SSWRITE_VALUE_QSTR
для любого или смешанного вектора символов многословного или для векторов символов отдельного слова, которые начинаются с номера. Генерация кода с ошибками продукта Simulink® Coder™, если какое-либо начало с номера не заключено в кавычку.
Аргумент | Описание |
---|---|
const char_T *value | Вектор символов (например, "U.S.A." ) |
SSWRITE_VALUE_VECT_STR
(вектор вектора символов): Используйте SSWRITE_VALUE_VECT_STR
, чтобы записать вектор векторов символов с каждым элементом, заключенным в кавычки.
Аргумент | Описание |
---|---|
const char_T *value | Вектор векторов символов (например, ["USA", "Mexico"] ) |
int_T nItemsInVect | Размер вектора |
SSWRITE_VALUE_NUM
(номер): Используйте SSWRITE_VALUE_NUM
для записи действительное, значение с плавающей точкой.
Аргумент | Описание |
---|---|
const real_T value | Номер (например, 2 ) |
SSWRITE_VALUE_VECT
(вектор чисел): Используйте SSWRITE_VALUE_VECT
для записи действительный, вектор с плавающей точкой значений.
Аргумент | Описание |
---|---|
const real_T *value | Вектор чисел (например, [300, 100] ) |
int_T vectLen | Размер вектора |
SSWRITE_VALUE_2DMAT
(матрица чисел): Используйте SSWRITE_VALUE_2DMAT
для записи действительная, 2D матрица с плавающей точкой значений.
Аргумент | Описание |
---|---|
const real_T *value | Матрица чисел (например, [[170, 130],[60, 40]]) |
int_T nRows | Количество строк в матрице |
int_T nCols | Количество столбцов в матрице |
SSWRITE_VALUE_DTYPE_NUM
(введенный данными номер): Используйте SSWRITE_VALUE_DTYPE_NUM
, чтобы написать комплексное число в формате Simulink, или с типом данных кроме дважды.
Аргумент | Описание |
---|---|
const void *value | Номер (например, [3+4i] ) |
int_T dtInfo | Тип данных (см. Информацию о Типе данных Определения), |
SSWRITE_VALUE_DTYPE_VECT
(введенный данными вектор): Используйте SSWRITE_VALUE_DTYPE_VECT
, чтобы записать комплексный вектор значений в формате Simulink, или с типом данных кроме дважды.
Аргумент | Описание |
---|---|
const void *value | Введенный данными вектор (например, [1+2i, 3+4i] ) |
int_T vectLen | Размер вектора |
int_T dtInfo | Тип данных (см. Информацию о Типе данных Определения), |
SSWRITE_VALUE_DTYPE_2DMAT
(введенная данными матрица): Используйте SSWRITE_VALUE_DTYPE_2DMAT
, чтобы записать комплексную 2D матрицу значений в формате Simulink, или с типом данных кроме дважды.
Аргумент | Описание |
---|---|
const void *value | Матрица (например, [1+2i 3+4i; 5 6] ) |
int_T nRows | Количество строк в матрице |
int_T nCols | Количество столбцов в матрице |
int_T dtInfo | Тип данных (см. Информацию о Типе данных Определения), |
SSWRITE_VALUE_DTYPE_ML_VECTOR
(введенный данными вектор MATLAB®): Используйте SSWRITE_VALUE_DTYPE_ML_VECTOR
, чтобы записать действительные и мнимые части комплексного вектора значений как отдельные массивы. SSWRITE_VALUE_DTYPE_ML_VECTOR
позволяет вам задавать тип данных для вектора.
Аргумент | Описание |
---|---|
const void *RValue | Действительный компонент вектора (например, [1 3] ) |
const void *IValue | Мнимый компонент вектора (например, [2 5] ) |
int_T vectLen | Число элементов в векторе |
int_T dtInfo | Тип данных (см. Информацию о Типе данных Определения), |
SSWRITE_VALUE_DTYPE_ML_2DMAT
(введенная данными матрица MATLAB): Используйте SSWRITE_VALUE_DTYPE_ML_2DMAT
, чтобы записать действительные и мнимые части комплексной 2D матрицы значений как отдельные матрицы. SSWRITE_VALUE_DTYPE_ML_2DMAT
позволяет вам задавать тип данных для значений.
Аргумент | Описание |
---|---|
const void *RValue | Действительный компонент матрицы (например, [1 5 3 6] ) |
const void *IValue | Мнимый компонент матрицы (например, [2 0 4 0] ) |
int_T nRows | Количество строк в матрице |
int_T nCols | Количество столбцов в матрице |
int_T dtInfo | Тип данных (см. Информацию о Типе данных Определения), |
C, C++
Смотрите S-функцию sfun_frmad.c
, используемый в sfcndemo_frame
для полного примера, который использует эту функцию. Выполнение этой модели требует лицензии DSP System Toolbox™.
Эта S-функция начинается со следующих объявлений переменной, сопоставленных с S-параметрами-функции.
/* Parameters */ enum {FCN_ARGC = 0, AMP_ARGC, FREQ_ARGC, TS_ARGC, FRMSIZE_ARGC, NOISAMP_ARGC, NOISFREQ_ARGC, NUM_ARGS}; #define FCN_ARG(S) (ssGetSFcnParam(S,FCN_ARGC)) #define AMP_ARG(S) (ssGetSFcnParam(S,AMP_ARGC)) #define FREQ_ARG(S) (ssGetSFcnParam(S,FREQ_ARGC)) #define TS_ARG(S) (ssGetSFcnParam(S,TS_ARGC)) #define FRMSIZE_ARG(S) (ssGetSFcnParam(S,FRMSIZE_ARGC)) #define NOISAMP_ARG(S) (ssGetSFcnParam(S,NOISAMP_ARGC)) #define NOISFREQ_ARG(S) (ssGetSFcnParam(S,NOISFREQ_ARGC)) #define GET_FRMSIZE(S) (mxGetPr(FRMSIZE_ARG(S)))[0]
Функция mdlRTW
S-функции затем использует ssWriteRTWParamSettings
, чтобы записать S-параметры-функции в файл .rtw
model
.
real_T noisA = mxGetPr(NOISAMP_ARG(S))[0]; real_T noisF = mxGetPr(NOISFREQ_ARG(S))[0]; real_T ts = mxGetPr(TS_ARG(S))[0]; int_T fcn = (int) (mxGetPr(FCN_ARG(S))[0]); int32_T fsize = mxGetPr(FRMSIZE_ARG(S))[0]; if (!ssWriteRTWParamSettings(S, 5, SSWRITE_VALUE_STR, "Function", (fcn == 1) ? "Constant" : "Sine", SSWRITE_VALUE_NUM, "Ts", ts, SSWRITE_VALUE_DTYPE_NUM, "FrameSize", &fsize, DTINFO(SS_INT32, COMPLEX_NO), SSWRITE_VALUE_NUM, "NoiseAmp", noisA, SSWRITE_VALUE_NUM, "NoiseFreq", noisF)) { return; /* An error occurred. */ }
Когда код сгенерирован для модели, продукт Simulink Coder сначала пишет структуру под названием SFcnParamSettings
к файлу .rtw
model
на основе информации, предоставленной в методе mdlRTW
S-функции. В этом примере получившийся SFcnParamSettings
:
SFcnParamSettings { Function Sine Ts 0.005 FrameSize 64 NoiseAmp 4.0 NoiseFreq 80.0 }
Файл Компилятора Выходного языка S-функции sfun_frmad.tlc
затем получает доступ к S-параметрам-функции с помощью имен переменных в структуре SFcnParamSettings
. Например:
%assign fnName = SFcnParamSettings.Function %assign frmSize = SFcnParamSettings.FrameSize %assign ts = SFcnParamSettings.Ts %assign noisA = SFcnParamSettings.NoiseAmp %assign noisF = SFcnParamSettings.NoiseFreq