主要内容

mdlCheckParameters

检查C MEX s -函数参数的有效性

要求的

语言

C, c++

语法

#定义MDL_CHECK_PARAMETERS无效mdlCheckParameters(模拟构造*S)

参数

年代

表示s -功能块的SimStruct。

描述

当参数更改或在模拟期间重新计算时,验证新的参数设置。如果你有金宝app®编码器™,对于C MEX s -函数,此方法仅对仿真有效,必须封装在#如果定义(MATLAB_MEX_FILE)语句与支持非线性S函数的代码生成目标兼容。金宝app

当仿真运行时,s函数参数的更改可以在仿真循环期间的任何时间发生,即在仿真步骤的开始时或在仿真步骤期间。当在模拟步骤中发生更改时,Simulink引擎调用此例程两次以处理参数更改。金宝app模拟步骤中的第一个调用用于验证参数是否正确。在验证新参数之后,模拟将继续使用原始参数值,直到下一个模拟步骤使用新参数值。为了保持模拟的一致性,需要冗余调用。

请注意

无法访问此例程中的功、状态、输入、输出和其他向量。此例程仅用于验证参数。参数的附加处理应在中完成mdlProcessParameters

例子

这个例子检查第一个s函数参数,以验证它是一个实非负标量。

请注意

自从mdlCheckParameters是一个可选方法,a#定义MDL_CHECK_PARAMETERS语句置于函数前面。此外,自金宝app仿真软件编码器的产品不支持代码生成金宝appmdlCheckParameters,函数被包装在#如果定义(MATLAB_MEX_FILE)陈述

# define PARAM1 (S) ssGetSFcnParam(年代,0)# define MDL_CHECK_PARAMETERS / *改变# undef去除函数* / #如果定义(MDL_CHECK_PARAMETERS) & & (MATLAB_MEX_FILE)定义静态孔隙mdlCheckParameters (SimStruct * S){如果(mxGetNumberOfElements (PARAM1 (S)) ! = 1) {ssSetErrorStatus (S, S函数的参数必须标量);返回;} else if (mxGetPr(PARAM1(S))[0] < 0) {ssSetErrorStatus(S, "Parameter to S-function must be nonnegative");返回;}} #endif /* MDL_CHECK_PARAMETERS */

除了上述例程之外,还必须从mdlInitializeSizes在初始化过程中检查参数,因为mdlCheckParameters仅在模拟运行时调用。要做到这一点,在使用ssSetNumSFcnParams,使用此代码mdlInitializeSizes

static void mdlinitializesize (SimStruct *S) {ssSetNumSFcnParams(S, 1);/*预期参数的数量*/ #if (MATLAB_MEX_FILE) if(ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S) {mdlCheckParameters(S);if(ssGetErrorStatus(S) != NULL)返回;} else {return;/* Simu金宝applink引擎报告一个不匹配错误。* /} # endif...

请注意

ssGetSFcnParamsCount返回在对话框中输入的参数的实际数目。

看到sfun_errhdl.c了一个例子。

在R2006a之前引入