指定采样时间继承规则的s函数
对于Simuli金宝appnk®为了确定一个模型是否可以从父模型继承采样时间,模型中的s函数需要指定它们如何使用采样时间。您可以通过调用宏来指定此信息ssSetModelReferenceSampleTimeInheritanceRule
从mdlInitializeSizes
或mdlSetWorkWidths
。使用这个宏:
检查s函数是否调用这些宏:
在你的s函数TLC代码中检查这些:
LibBlockSampleTime
CompiledModel。SampleTime
LibBlockInputSignalSampleTime
LibBlockInputSignalOffsetTime
LibBlockOutputSignalSampleTime
LibBlockOutputSignalOffsetTime
根据您的搜索结果,使用
ssSetModelReferenceSampleTimeInheritanceRule
如表中所示。如果…… 使用…… 例子 没有宏或函数,s函数不排除模型继承采样时间。 ssSetModelReferenceSampleTimeInheritanceRule (S, USE_DEFAULT_FOR_DISCRETE_INHERITANCE)
任何宏或函数用于:
如果采样时间是继承的、连续的或常量,则抛出错误
检查
ssIsSampleHit
检查样本时间是否被继承
mdlSetInputPortSampleTime
或mdlSetOutputPortSampleTime
之前的设置
ssSetModelReferenceSampleTimeInheritanceRule……(年代,USE_DEFAULT_FOR_DISCRETE_INHERITANCE)
考虑一下这个
mdlOutputs
代码:static void mdlOutputs(SimStruct *S, int_T tid) {const real_T* u = (const real_T*) ssGetInputPortSignal(S,0);real_T *y = ssGetOutputPortSignal(S,0);= ssGetSampleTime(S,tid) * u[0];}
s函数使用它的采样时间来计算参数、输出等。 ssSetModelReferenceSampleTimeInheritanceRule (S, DISALLOW_SAMPLE_TIME_INHERITANCE)
考虑到
mdlOutputs
s函数示例中的代码sfun_multirate.c
:static 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 enablesoffset = ssGetInputPortOffsetTime(S,ENABLE_IPORT);if (enableTs == CONTINUOUS_SAMPLE_TIME && enableTsOffset == 0.0) {if (ssIsMajorTimeStep(S) && ssIsContinuousTask(S,tid)) {if (signalTid == enableTid || ssIsSpecialSampleHit(S, signalTid, enableTid, tid)) {enablePtrs = ssGetInputPortRealSignalPtrs(S,ENABLE_IPORT);*enabled = (*enablePtrs[0] > 0.0);}}} else {int enableTid = ssGetInputPortSampleTimeIndex(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函数没有设置ssSetModelReferenceSampleTimeInheritanceRule
宏,默认情况下,Simulink引擎假设s函金宝app数不排除包含该s函数的模型继承采样时间。但是,引擎会发出警告,指出模型中包含未设置此宏的s函数。
上的“配置参数”中的设置诊断>样品时间窗格,以控制Simulink引擎在遇到具有未指定金宝app示例时间继承规则的s函数时的响应方式。切换的采样时间的未指定继承性诊断为没有一个
,警告
,或错误
。默认为警告
。
有关模型块样本时间继承,参见参考模型采样次数。