Записывайте значения нетронутых параметров в
файлmodel
.rtw
int_T ssWriteRTWParamSettings(SimStruct *S, int_T nParamSettings, int_T paramType, const char_T *settingName, ...)
S
SimStruct, представляющий блок S-Function.
nParamSettings
Количество настроек параметра.
paramType
Тип параметра (см. Parameter Setting Type-Specific Arguments).
settingName
Имя параметра.
...
Остальные аргументы зависят от типа параметра (см. «Аргументы для конкретного типа параметров»).
Система координат int_T
(1
или 0
) или boolean_T
(true
или false
), указывающий на успех или отказ функции.
Используйте эту функцию в mdlRTW
чтобы записать информацию об установке параметра nontunable в
этой S-функцииmodel
файл. Можно также использовать этот макрос, чтобы записать другие постоянные значения, необходимые для генерации кода для этой S-функции..rtw
В этом разделе перечислены аргументы в зависимости от параметра, требуемые для каждого типа параметра.
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
для записи вещественной, с плавающей точкой 2-D матрицы значений.
Аргумент | Описание |
---|---|
const real_T *value | Матрица чисел (например, [[170, 130],[60, 40]] ) |
int_T nRows | Количество строк в матрице |
int_T nCols | Количество столбцов в матрице |
SSWRITE_VALUE_DTYPE_NUM
(номер с типом данных): Использование SSWRITE_VALUE_DTYPE_NUM
для записи комплексного числа в формате Simulink или с типом данных, отличным от double.
Аргумент | Описание |
---|---|
const void *value | Число (например [3+4i] ) |
int_T dtInfo | Тип данных (см. раздел «Определение типа данных») |
SSWRITE_VALUE_DTYPE_VECT
(вектор с типом данных): Использование SSWRITE_VALUE_DTYPE_VECT
для записи комплексного вектора значений в формате Simulink или с типом данных, отличным от double.
Аргумент | Описание |
---|---|
const void *value | Вектор с типом данных (например [1+2i, 3+4i] ) |
int_T vectLen | Размер вектора |
int_T dtInfo | Тип данных (см. раздел «Определение типа данных») |
SSWRITE_VALUE_DTYPE_2DMAT
(матрица с типом данных): Использование SSWRITE_VALUE_DTYPE_2DMAT
для записи сложной 2-D матрицы значений в формате Simulink или с типом данных, отличным от double.
Аргумент | Описание |
---|---|
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
записать действительную и мнимую части комплексной 2-D матрицы значений как отдельные матрицы. 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]
Функции S mdlRTW
затем функция использует ssWriteRTWParamSettings
чтобы записать параметры S-функции в model
.rtw
файл.
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
на model
.rtw
файл на основе информации, представленной в 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