主要内容

指定样本时间继承规则的S函数

对于Simuli金宝appnk®发动机要确定模型是否可以从父模型继承样本时间,模型中的S功能需要指定它们如何使用样品时间。您可以通过调用宏来指定此信息sssetModelReferencesMampletimeInheritancerulemdlinitialsizes或者mdlsetworkwidths。使用此宏:

  1. 检查S功能是否调用这些宏中的任何一个:

  2. 在您的S功能TLC代码中检查这些:

    • libblocksampletime

    • compilesmodel.sampletime

    • libblockInputSignalSampletime

    • libblockInputSignAloffsettime

    • libblockoutputsignalsampletime

    • libblockOutputSignAloffsettime

  3. 根据您的搜索结果,使用sssetModelReferencesMampletimeInheritancerule如本表中所示。

    如果... 利用... 例子
    没有一个宏或功能存在,S函数并不排除模型继承样品时间。
    sssetModelReferencesMampletimeInherItancerule(s,use_default_for_discrete_inheritance)

    任何宏或功能都用于:

    • 如果样本时间继承,连续或常数,则丢弃错误

    • 检查ssissampleshit

    • 检查样品时间是否在任何一个中继承mdlsetInputportSampletime或者mdlsetOutputpotportsampletime设置之前

    sssetModelReferencesMampletimeInheritancerule ...(s,use_default_for_discrete_inheritance)

    考虑一下mdlOutputs代码:

    静态void mdlOutputs(simStruct *s,int_t tid){const real_t *u =(const real_t *)ssgetInputPortSignal(s,0);real_t *y = ssgetOutputpotportSignal(s,0);y [0] = ssgetSampletime(s,tid) * u [0];}
    S功能将其样本时间用于计算参数,输出等。
    sssetModelReferencesMampletimeInherItancerule(s,disallow_sample_time_inheritance)

    考虑一下mdlOutputs来自S功能的代码示例sfun_multirate.c

    静态void mdlOutputs(simStruct *s,int_t tid){inputRealPtrStype enableptrs;int *enabled = ssgetiwork(s);int enableTid = ssgetInputportSampleTimeIndex(s,enable_iport);int signaltid = ssgetInputportSampleTimeIndex(s,signal_iport);real_t enablets = ssgetInputportSampletime(s,enable_iport);real_t enableTsOffset = ssgetInputportoffsettime(s,enable_iport);if(enablets ==连续_sample_time && enableTsOffSet == 0.0){if(ssismajortimestep(s)&& sisconcontinuumTask(s,tid)){if(sigraltID == enableTID ||ssgetInputPorterRealSignalPtrs(s,enable_iport);*启用=(*enableptrs [0]> 0.0);}}} else {int enableTid = ssgetInputportsampletsimentex(s,enable_iport); if (ssIsSampleHit(S, enableTid, tid)) { if (enableTid == signalTid || ssIsSpecialSampleHit(S, signalTid, enableTid, tid)) { enablePtrs = ssGetInputPortRealSignalPtrs(S,ENABLE_IPORT); *enabled = (*enablePtrs[0] > 0.0); } } } if (ssIsSampleHit(S, signalTid, tid) && (*enabled)) { InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,SIGNAL_IPORT); real_T signal = *uPtrs[0]; int i; for (i = 0; i < NOUTPUTS; i++) { int outTid = ssGetOutputPortSampleTimeIndex(S,i); if (outTid==signalTid || ssIsSpecialSampleHit(S, outTid, signalTid, tid)) { real_T *y = ssGetOutputPortRealSignal(S,i); *y = signal; } } } } /* end mdlOutputs */

笔记

如果s功能没有设置sssetModelReferencesMampletimeInheritancerule宏观,默认情况下,Simulink引擎假设S金宝app函数并不排除包含该s函数的模型,从而无法继承样品时间。但是,发动机发出警告,表明该模型包括未设置该宏的S功能。

您可以在“配置参数”中使用设置诊断>采样时间窗格控制Simulink引擎在遇到具有未指定样本金宝app时间继承规则的S功能时的响应方式。切换样品时间的未指定遗传性诊断没有任何,,,,警告, 或者错误。默认值为警告

有关信息模型阻止样本时间继承,请参阅参考模型样本时间

相关话题