Запись значений неперестраиваемых параметров в файлmodel.rtw
int_T ssWriteRTWParamSettings(SimStruct *S, int_T nParamSettings, int_T paramType, const char_T *settingName, ...)
SSimStruct представляет S-функциональный блок.
nParamSettingsКоличество настроек параметров.
paramTypeТип параметра (см. Параметр Настройка аргументов типа).
settingNameИмя параметра.
...Остальные аргументы зависят от типа параметра (см. раздел «Параметры, устанавливающие специфичные для типа аргументы»).
Один int_T (1 или 0) или boolean_T (true или false), указывающее на успех или неудачу функции.
Используйте эту функцию в mdlRTW для записи неперестраиваемой информации об установке параметров в эту S-функцию файл. Этот макрос можно также использовать для записи других значений констант, необходимых для создания кода для этой S-функции.model.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 или с типом данных, отличным от двойного.
| Аргумент | Описание |
|---|---|
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 для записи комплексной 2-D матрицы значений в формате 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 для записи вещественной и мнимой частей комплексной 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 на основе информации, представленной в S-функции mdlRTW способ. В этом примере результат 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