Запишите значения ненастраиваемых параметров к файлmodel.rtw
int_T ssWriteRTWParamSettings(SimStruct *S, int_T nParamSettings, int_T paramType, const char_T *settingName, ...)
SSimStruct, представляющий Блок s-function.
nParamSettingsКоличество установок параметров.
paramTypeТип параметра (см. Установку параметра Специфичные для типа Аргументы).
settingNameИмя параметра.
...Остающиеся аргументы зависят от типа параметра (см. Установку параметра Специфичные для типа Аргументы).
int_T(1 или 0) или boolean_T TRUE или false) указание на успешность или неуспешность функции.
Используйте эту функцию в mdlRTW записать ненастраиваемую информацию об установке параметра в этой 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 к записи действительная, 2D матрица с плавающей точкой значений.
| Аргумент | Описание |
|---|---|
const real_T *value | Матрица чисел (e.g., [[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-параметры-функции в 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