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

Matlab 在mdlGetTimeOfNextVarHit方法之外使用ssSetTNext S函数宏,matlab,simulink,s-function,Matlab,Simulink,S Function,他说: “具有可变采样时间的离散S函数应在mdlgettimeonfextvarhit中使用此宏来指定下一次采样命中的时间” 现在,我想计算执行mdlOutputs后S函数的下一个样本命中率。但是,根据mdlGetTimeOfNextVarHit在mdlOutputs之前执行(请参见描述模拟循环的图片) 另一方面,mdlUpdate(不幸的是,我不允许发布链接)的文档说明: “该方法还可以执行S功能在每个主要时间步需要执行的任何其他任务” 由于mdlUpdate是在mdlOutputs之后执行的

他说: “具有可变采样时间的离散S函数应在
mdlgettimeonfextvarhit
中使用此宏来指定下一次采样命中的时间”

现在,我想计算执行
mdlOutputs
后S函数的下一个样本命中率。但是,根据mdlGetTimeOfNextVarHit在
mdlOutputs
之前执行(请参见描述模拟循环的图片)

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

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

先谢谢你


--马特奥

简言之,是的。

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

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

  • 定义
    MDL\u获取下一个变量的时间\u命中
    ,以及
  • mdlgettimeofnTextVarHit()
    的实现/定义
这意味着,如果您希望在其他地方设置新的示例瞬间,则仍然需要
mdlgettimeofNext varhit()
的定义(可能为空)

明白了:

如果未为配置为使用可变时间步任务的C-MEX S函数定义下一个变量命中的MDL获取时间,并且没有定义下一个变量命中的MDL获取时间;编译将成功,但调用后将报告以下错误诊断,模拟将终止:

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

最后,如果未定义下一个变量HIT的
MDL\u GET\u TIME\u
,但定义了
mdlGetTimeOfNextVarHit()
,编译将失败