Записывайте значения нетронутых параметров в файлmodel.rtw
int_T ssWriteRTWParamSettings(SimStruct *S, int_T nParamSettings, int_T paramType, const char_T *settingName, ...)
SSimStruct, представляющий блок 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