1

Simulink 文档ssSetTNext说:“具有可变采样时间的离散 S-Function 应使用此宏mdlGetTimeOfNextVarHit来指定下一个采样命中的时间”。

现在,我想执行mdlOutputs. 但是,根据Simulink Engine Interaction with C S-Functions在之前mdlGetTimeOfNextVarHit执行(参见描述模拟循环的图片)。 mdlOutputs

另一方面,mdlUpdate(不幸的是,我不允许发布链接)的文档说:“该方法还可以执行 S-function 在每个主要时间步需要执行的任何其他任务”。

由于在之后mdlUpdate执行,我想知道是否可以忽略该方法并将定义下一个示例命中(以及使用)的所有逻辑放在里面是否安全。 mdlOutputsmdlGetTimeOfNextVarHitssSetTNextmdlUpdate

先感谢您。

——马泰奥

4

1 回答 1

0

简而言之,是的。

可以在方法之外设置可变速率任务的下一次命中时间mdlGetTimeOfNextVarHit()。下一个采样时刻必须在当前模拟循环结束之前设置:因此可以在mdlOutputs()ormdlUpdate()方法中设置。

请记住,配置为使用可变时间步长任务的 C-MEX S-Function 仍然需要:

  • 被定义MDL_GET_TIME_OF_NEXT_VAR_HIT的,和
  • 的实现/定义mdlGetTimeOfNextVarHit()

这意味着,如果您希望在其他地方立即设置新样本,您仍然需要为mdlGetTimeOfNextVarHit().

明白了:

IfMDL_GET_TIME_OF_NEXT_VAR_HIT没有为配置为使用可变时间步长任务的 C-MEX S-Function 定义,并且没有定义mdlGetTimeOfNextVarHit(); 编译将成功,但在调用时将报告以下错误诊断,并且模拟将终止:

要获得可变采样时间,请定义 MDL_GET_TIME_OF_NEXT_VAR_HIT 并添加 mdlGetTimeOfNextVarHit 例程。

最后,如果MDL_GET_TIME_OF_NEXT_VAR_HIT没有定义但有定义mdlGetTimeOfNextVarHit(),编译将失败。

于 2019-02-13T14:42:53.813 回答