文档

mdlCheckParameters

检查C MEX S-function参数的有效性

要求

没有

语言

C, c++

语法

#定义MDL_CHECK_PARAMETERS(SimStruct *S)

参数

年代

SimStruct表示一个S-Function块。

描述

在模拟过程中,每当参数更改或重新计算参数时,验证新的参数设置。如果你有万博1manbetx®编码器™,对于C MEX s -函数,此方法仅对模拟有效,且必须在#如果定义(MATLAB_MEX_FILE)语句与支持非内联s函数的代码生成目标兼容。万博1manbetx

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

请注意

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

例子

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

请注意

mdlCheckParameters是可选方法#定义MDL_CHECK_PARAMETERS语句位于函数的前面。此外,由于万博1manbetx仿真软件编码器产品不支持代码生成万博1manbetxmdlCheckParameters时,函数被封装在#如果定义(MATLAB_MEX_FILE)声明。

#define PARAM1(S) ssGetSFcnParam(S,0) #define MDL_CHECK_PARAMETERS /*更改为#undef删除函数*/ #if defined(MDL_CHECK_PARAMETERS) && defined(MATLAB_MEX_FILE) static void mdlCheckParameters(SimStruct *S) {if (mxGetNumberOfElements(PARAM1(S)) != 1) {ssSetErrorStatus(S,"参数到S函数必须是一个标量");返回;} else if (mxGetPr(PARAM1(S))[0] < 0) {ssSetErrorStatus(S, "参数到S函数必须是非负的");返回;}} #endif /* MDL_CHECK_PARAMETERS */

除了前面的例程之外,还必须从添加对该方法的调用mdlInitializeSizes在初始化时检查参数,因为mdlCheckParameters仅在模拟运行时调用。要做到这一点,在设置s函数中期望的参数数量之后,使用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)返回;}其他{返回;/* Simu万博1manbetxlink引擎报告不匹配错误*/} #endif...

请注意

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

看到sfun_errhdl.c举个例子。

R2006a之前介绍

这个话题有用吗?