指定样本时间继承规则的S函数
对于Simuli金宝appnk®发动机要确定模型是否可以从父模型继承样本时间,模型中的S功能需要指定它们如何使用样品时间。您可以通过调用宏来指定此信息sssetModelReferencesMampletimeInheritancerule
从mdlinitialsizes
或者mdlsetworkwidths
。使用此宏:
检查S功能是否调用这些宏中的任何一个:
在您的S功能TLC代码中检查这些:
libblocksampletime
compilesmodel.sampletime
libblockInputSignalSampletime
libblockInputSignAloffsettime
libblockoutputsignalsampletime
libblockOutputSignAloffsettime
根据您的搜索结果,使用
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功能时的响应方式。切换样品时间的未指定遗传性诊断没有任何
,,,,警告
, 或者错误
。默认值为警告
。
有关信息模型阻止样本时间继承,请参阅参考模型样本时间。