初始化这个MATLAB s函数的状态向量
没有
MATLAB
InitializeConditions (s)
年代
的实例万博1manbetx仿真软件。MSFcnRunTimeBlock
类表示MATLAB二级s函数块。
的仿真软万博1manbetx件®Engine在模拟开始时调用此可选方法。它应该初始化这个s -函数块的连续和离散状态(如果有的话)。在一个二级MATLAB s函数中,使用ContStates
或Dwork
运行时对象方法来访问连续和离散状态。这个方法还可以执行这个s -函数需要的任何其他初始化活动。
如果你有万博1manbetx仿真软件编码器™的初始化代码,您需要确保InitializeConditions
函数只运行一次,然后将此初始化代码移动到开始
方法。MathWorks建议将此代码更改作为最佳实践。
如果这个s函数驻留在已启用的、配置为重置状态的子系统中,那么当已启用的子系统重新启动执行时,Simulink引擎也会调用这个方法。万博1manbetx
Simu万博1manbetxlink引擎调用InitializeConditions
在计算s函数的输入信号之前。因此,由于输入信号值还不可用,InitializeConditions
不应使用输入信号的值来设置初始条件。如果s函数需要使用块的输入信号初始化内部值,请执行输出
.
例如,在C MEX s -函数中,使用mdlInitializeSizes
方法。
ssSetNumIWork (S, 1);
IWork向量持有一个标志,指示是否已经指定了初始值。属性中初始化标志的值mdlInitializeCondition
方法。
static void mdlinitializeconconditions (SimStruct *S) {/* mdlinitializeconconditions方法被调用时,模拟启动和每次启用的子系统被重新启用。当需要重新初始化值时,将IWork标志重置为1。*/ ssSetIWorkValue(S, 0,1);}
中IWork矢量标志的值mdlOutputs
方法,以确定是否需要设置初始值。由于引擎已经在模拟的这一点上计算了输入值,因此mdlOutputs
方法可以使用它们初始化内部值。
static void mdlOutputs(SimStruct *S, int_T tid){//如果IWork vector标志为true,则初始化值。// if (ssGetIWorkValue(S, 0) == 1){//在这里输入初始化代码//}// mdlOutputs函数的余数//}
对于2级MATLAB s函数,在前面的示例中使用DWork向量而不是IWork向量。
本例将连续和离散状态初始化为1.0。MATLAB二级s函数将离散状态存储在DWork向量中。
函数初始化条件(s) s. contstates . data (1) = 1;s.Dwork(1)。Data = 1;% endfunction