将不可调优参数的值写入
文件模型
.rtw
int_T ssWriteRTWParamSettings(SimStruct *S, int_T nParamSettings, int_T paramType, const char_T *settingName,…)
年代
表示s -功能块的SimStruct。
nParamSettings
参数设置个数。
paramType
参数的类型(参见参数设置类型特定的参数).
settingName
参数名称。
...
其余实参取决于形参类型(参见参数设置类型特定的参数).
一个int_T
(1
或0
)或boolean_T
(真正的
或假
),指示该函数的成功或失败。
使用此函数mdlRTW
将不可调优参数设置信息写入s函数
文件。还可以使用这个宏写出为这个s函数生成代码所需的其他常量值。模型
.rtw
本节列出每个形参类型所需的形参特定的实参。
SSWRITE_VALUE_STR
(未加引号的字符向量):使用SSWRITE_VALUE_STR
用于不以数字开头或不包含混合字符的任何单字字符向量。在某些情况下,ssWriteRTWParamSettings
将字符向量括在引号中,即使您使用了SSWRITE_VALUE_STR
.例如,如果字符向量的长度导致模型文件中相应的行换行到字符向量的中间,ssWriteRTWParamSettings
使用引号来维护字符向量的值。
论点 | 描述 |
---|---|
const char_T *价值 |
特征向量(例如,美国 ) |
SSWRITE_VALUE_QSTR
(带引号的字符向量):使用SSWRITE_VALUE_QSTR
对于任何多字或混合字符向量,或以数字开头的单个字字符向量。使用金宝app®编码器™如果任何以数字开头的产品没有用引号括起来,产品错误将被排除。
论点 | 描述 |
---|---|
const char_T *价值 |
特征向量(例如,“美国” ) |
SSWRITE_VALUE_VECT_STR
(字符向量):使用SSWRITE_VALUE_VECT_STR
编写一个由字符向量组成的向量,每个元素用双引号括起来。
论点 | 描述 |
---|---|
const char_T *价值 |
字符向量的向量(例如,(“美国”、“墨西哥”) ) |
int_T nItemsInVect |
向量的大小 |
SSWRITE_VALUE_NUM
(数量):使用SSWRITE_VALUE_NUM
写入实浮点值。
论点 | 描述 |
---|---|
const real_T价值 |
数量(例如,2 ) |
SSWRITE_VALUE_VECT
(数字向量):使用SSWRITE_VALUE_VECT
写入实数浮点值向量。
论点 | 描述 |
---|---|
const real_T *价值 |
数字向量(例如,(300、100) ) |
int_T vectLen |
向量的大小 |
SSWRITE_VALUE_2DMAT
(数字矩阵):使用SSWRITE_VALUE_2DMAT
写一个实数浮点二维值矩阵。
论点 | 描述 |
---|---|
const real_T *价值 |
数字矩阵(例如,[[170年、130年],[60,40]] ) |
int_T nRows |
矩阵的行数 |
int_T nCols |
矩阵的列数 |
SSWRITE_VALUE_DTYPE_NUM
(数据类型):使用SSWRITE_VALUE_DTYPE_NUM
以Simulink格式或使用非double的数据类型编写金宝app复杂值。
论点 | 描述 |
---|---|
const void *价值 |
数量(例如,(3 + 4) ) |
int_T dtInfo |
数据类型(见指定数据类型信息) |
SSWRITE_VALUE_DTYPE_VECT
(数据类型的向量):使用SSWRITE_VALUE_DTYPE_VECT
以Simulink格式或使用非double数据类型编写复杂值向量。金宝app
论点 | 描述 |
---|---|
const void *价值 |
矢量数据类型(例如,我3 + 4 (1 + 2) ) |
int_T vectLen |
向量的大小 |
int_T dtInfo |
数据类型(见指定数据类型信息) |
SSWRITE_VALUE_DTYPE_2DMAT
(数据类型矩阵):使用SSWRITE_VALUE_DTYPE_2DMAT
用Simulink格式或非double数据类型编写复杂的二维矩阵。金宝app
论点 | 描述 |
---|---|
const void *价值 |
矩阵(例如,[1 + 2我3 + 4;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
允许指定vector的数据类型。
论点 | 描述 |
---|---|
const void *右值 |
向量的实分量(例如,3 [1] ) |
const void * IValue |
向量的虚分量 (例如, (2 - 5) ) |
int_T vectLen |
向量中元素的个数 |
int_T dtInfo |
数据类型(见指定数据类型信息) |
SSWRITE_VALUE_DTYPE_ML_2DMAT
(数据类型MATLAB矩阵):使用SSWRITE_VALUE_DTYPE_ML_2DMAT
将一个复二维矩阵的实部和虚部写成独立的矩阵。SSWRITE_VALUE_DTYPE_ML_2DMAT
允许您为值指定数据类型。
论点 | 描述 |
---|---|
const void *右值 |
矩阵的实分量 (例如, [1 5 3 6] ) |
const void * IValue |
矩阵的虚分量 (例如, [2 0 4 0] ) |
int_T nRows |
矩阵的行数 |
int_T nCols |
矩阵的列数 |
int_T dtInfo |
数据类型(见指定数据类型信息) |
C, c++
看到这个功能sfun_frmad.c
中使用的sfcndemo_frame
下面是使用此函数的完整示例。运行此模型需要DSP系统工具箱™许可证。
这个s函数以下列与s函数参数相关联的变量声明开始。
/*参数*/ enum {FCN_ARGC = 0, AMP_ARGC, FREQ_ARGC, TS_ARGC, FRMSIZE_ARGC, NOISAMP_ARGC, NOISFREQ_ARGC, NUM_ARGS};#define FREQ_ARG(S) (ssGetSFcnParam(S,AMP_ARGC)) #define FREQ_ARG(S) (ssGetSFcnParam(S,AMP_ARGC)) #define FRMSIZE_ARG(S) (ssGetSFcnParam(S,AMP_ARGC)) #define noise (S)(ssGetSFcnParam(S,NOISFREQ_ARGC)) #define GET_FRMSIZE(S) (mxGetPr(FRMSIZE_ARG(S)))[0]
功能的mdlRTW
然后使用函数ssWriteRTWParamSettings
将s函数参数写到模型
.rtw
文件。
real_T noisA = mxGetPr(NOISAMP_ARG(S))[0]; / /输出real_T noise f = mxGetPr(noise freq_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];如果(!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;/*发生错误。* /}
当为模型生成代码时,金宝app仿真软件编码器Product首先编写一个名为SFcnParamSettings
到模型
.rtw
文件基于S-function提供的信息mdlRTW
方法。在这个例子中,结果是SFcnParamSettings
是:
sfcnparameters settings {Function sints 0.005 FrameSize 64 NoiseAmp 4.0 NoiseFreq 80.0}
s函数的目标语言编译器文件sfun_frmad.tlc
的变量名访问s函数参数SFcnParamSettings
结构。例如:
%assign fnName = SFcnParamSettings。函数%assign frmSize = SFcnParamSettings。FrameSize %assign ts = SFcnParamSettings。Ts %assign noisA = SFcnParamSettings。NoiseAmp %assign noisF = SFcnParamSettings。NoiseFreq