在mdlGetTimeOfNextVarHit方法之外使用ssSetTNext S函数宏

问题描述 投票:1回答:1

The Simulink documentation for ssSetTNext说:“具有可变采样时间的离散S函数应该在mdlGetTimeOfNextVarHit中使用此宏来指定下一次采样命中的时间”。

现在,我想在执行mdlOutputs之后计算S函数的下一个样本命中。然而,根据Simulink Engine Interaction with C S-FunctionsmdlGetTimeOfNextVarHitmdlOutputs之前执行(参见描述模拟循环的图片)。

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

由于mdlUpdate是在mdlOutputs之后执行的,我想知道忽略方法mdlGetTimeOfNextVarHit是否安全,并将所有逻辑定义为ssSetTNext中的下一个样本命中(并且还使用mdlUpdate)。

先感谢您。

--Matteo

matlab simulink s-function
1个回答
0
投票

简而言之,是的。

可以在mdlGetTimeOfNextVarHit()方法之外设置变量任务的下一个命中时间。下一个样本瞬间必须在当前模拟循环结束之前设置:因此可以在mdlOutputs()mdlUpdate()方法中设置它。

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

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

这意味着如果您希望在其他位置设置新样本,则仍需要mdlGetTimeOfNextVarHit()的(可能为空)定义。

疑难杂症的:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.