主要内容

mdlInitializeConditions

这个C墨西哥人的状态向量进行初始化功能

要求

没有

语言

C, c++

语法

#定义MDL_INITIALIZE_CONDITIONS空白mdlInitializeConditions (SimStruct *年代)

参数

年代

SimStruct代表一个功能块。

描述

的仿真软金宝app件®引擎开始时调用这个可选方法模拟。它应该初始化连续和离散状态,如果有的话,这个功能块。墨西哥人在C s函数,使用ssGetContStates和/或ssGetDiscStates访问美国。这种方法还可以执行其他初始化这个功能需要的活动。

请注意

如果你有金宝app仿真软件编码器™你需要确保的初始化代码mdlInitializeConditions函数是只运行一次,然后移动到初始化代码mdlStart方法。MathWorks建议这段代码改变作为一项最佳实践。

如果这功能驻留在一个子系统配置为启用复位状态,仿真软件引擎也使子系统重启执行时调用这个方法。金宝appC墨西哥人S-functions可以使用ssIsFirstInitCond宏确定的时间mdlInitializeCondition叫做等于模拟开始时间。

请注意

如果你有金宝app仿真软件编码器墨西哥人,当生成代码noninlined C s函数,其中包含这个方法,确保该方法不是裹着#如果定义(MATLAB_MEX_FILE)声明。例如:

#定义MDL_INITIALIZE_CONDITIONS #如果定义(MDL_INITIALIZE_CONDITIONS) & & (MATLAB_MEX_FILE)定义静态空mdlInitializeConditions (SimStruct * S){/ *添加mdlInitializeConditions代码* /}# endif

定义声明中使mdlInitializeConditions方法只有一个MATLAB®墨西哥人文件。如果没有内联函数,金宝app仿真软件编码器产品不能使用这种方法,导致链接或运行时错误。

仿真软件金宝app引擎调用mdlInitializeConditions之前计算功能的输入信号。因此,由于输入信号值尚未公布,mdlInitializeConditions不应该使用输入信号值,设置初始条件。如果你的s函数需要初始化内部使用块的输入信号值,执行初始化mdlOutputs

例如,在一个C墨西哥人s函数,初始化一个IWork向量的一个元素mdlInitializeSizes方法。

ssSetNumIWork (S, 1);

IWork向量有标志指示如果指定初始值。初始化标志的价值mdlInitializeCondition方法。

静态孔隙mdlInitializeConditions (SimStruct * S) {/ * mdlInitializeConditions方法称为当仿真开始,每次重新启用一个子系统启用。重置IWork国旗1值需要被重新初始化。* / ssSetIWorkValue (0, 1);}

检查的IWork矢量标志的价值mdlOutputs方法,来决定是否需要设置初始值。由于引擎计算模拟输入值在这一点上,mdlOutputs方法可以使用它们来初始化内部值。

静态孔隙mdlOutputs (SimStruct *年代,int_T tid){/ /初始化值如果IWork矢量标志是正确的。/ /如果(ssGetIWorkValue(年代,0)= = 1){/ /在这里输入初始化代码/ /}/ /余mdlOutputs函数/ /}

一所二级MATLAB函数的使用DWork向量而不是IWork向量在前面的例子。

例子

这个例子中初始化一个连续和离散状态,至1.0。

#定义MDL_INITIALIZE_CONDITIONS / *变化# undef删除* / / *函数* / #如果定义(MDL_INITIALIZE_CONDITIONS)静态孔隙mdlInitializeConditions (SimStruct * S) {int我;real_T * xcont = ssGetContStates(年代);int_T nCStates = ssGetNumContStates(年代);real_T * xdisc = ssGetRealDiscStates(年代);int_T nDStates = ssGetNumDiscStates(年代);(我= 0;我< nCStates;我+ +){* xcont + + = 1.0;}(i = 0;我< nDStates; i++) { *xdisc++ = 1.0; } } #endif /* MDL_INITIALIZE_CONDITIONS */

对于初始化只有连续州的另一个例子,看看resetint.c

版本历史

之前介绍过的R2006a