在Simulink中,mdlUpdate也算作直接反馈吗?

In Simulink, does mdlUpdate count as Direct Feedthrough too?

本文关键字:Simulink mdlUpdate      更新时间:2023-10-16

我有一个输入端口到我的CMEX s -函数,我设置为没有直接馈通。然而,当我尝试在mdlUpdate函数调用中使用来自输入端口的信号时,它会因分割冲突而崩溃,并告诉我最可能的原因是输入端口的直接反馈状态设置不正确。

使用mdlUpdate中的输入信号也算作直接馈通吗?

对于那些将来可能会研究这个问题的人,我找到了答案。mdlUpdate不算作直接馈通。但是,如果您尝试在第一个时间步访问输入端口信号,则会导致分割违规(Mathworks文档表明,不同的计算机可能会出现不同的错误)。

技巧是使用ssIsFirstInitCond(S)来获取编译器是否在第一步,并避免在第一步进行任何赋值。

我的代码是这样的:

#define MDL_UPDATE
#if defined(MDL_UPDATE)
static void mdlUpdate(SimStruct *S)
{UNUSED_ARG(tid);
  if(!ssIsFirstInitCond(S))
  {
    real_T *u1 = (real_T *) ssGetInputPortSignal(S)[0];
    double *P1 = (double *) ssGetPWork(S)[0];
    // assign values here
  }
}
#endif

还要注意,mdlUpdate只在主要时间步长

中调用