主要内容

指定示例时间继承规则的s -函数

的仿真软件金宝app®引擎来确定模型是否可以从父模型继承样本时间,模型中的s -函数需要指定它们如何使用样本时间。您可以通过调用宏来指定此信息ssSetModelReferenceSampleTimeInheritanceRulemdlInitializeSizesmdlSetWorkWidths.要使用这个宏:

  1. 检查s函数是否调用这些宏:

  2. 在你的S-function TLC代码中检查这些:

    • LibBlockSampleTime

    • CompiledModel。SampleTime

    • LibBlockInputSignalSampleTime

    • LibBlockInputSignalOffsetTime

    • LibBlockOutputSignalSampleTime

    • LibBlockOutputSignalOffsetTime

  3. 根据你的搜索结果,使用ssSetModelReferenceSampleTimeInheritanceRule如表所示。

    如果…… 使用…… 例子
    没有宏或函数存在,s函数不排除模型继承样本时间。
    USE_DEFAULT_FOR_DISCRETE_INHERITANCE ssSetModelReferenceSampleTimeInheritanceRule(年代)

    任何宏或函数都用于:

    • 如果样本时间是继承的、连续的或常数,则抛出错误

    • 检查ssIsSampleHit

    • 检查样本时间是否被继承mdlSetInputPortSampleTimemdlSetOutputPortSampleTime之前的设置

    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); / /输出y[0] = ssGetSampleTime(S,tid) * u[0]; / /时间}
    s函数使用它的采样时间来计算参数、输出等等。
    DISALLOW_SAMPLE_TIME_INHERITANCE ssSetModelReferenceSampleTimeInheritanceRule(年代)

    考虑到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 enableTsOffset = ssgetinputporttoffsettime (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)) {enabletrs = ssGetInputPortRealSignalPtrs(S,ENABLE_IPORT);*enabled = (*enablePtrs[0] > 0.0);}}} else {int enableTid = ssGetInputPortSampleTimeIndex(S,ENABLE_IPORT);如果(ssIsSampleHit(S, enableTid, tid)) {if (enableTid == signalTid || ssIsSpecialSampleHit(S, signalTid, enableTid, tid)) {enabletrs = 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-function没有设置ssSetModelReferenceSampleTimeInheritanceRule宏,在默认情况下,Simulink引擎假设s金宝app -函数不排除包含该s -函数的模型继承示例时间。但是,引擎发出警告,指出模型包含未设置此宏的S-functions。

界面的“配置参数”中的设置诊断>样品时间窗格,以控制Simulink引擎在遇到具有未指定金宝app的示例时间继承规则的s -函数时如何响应。切换的样本时间的可继承性未指定诊断为没有一个警告,或错误.默认值是警告

和有关信息。模型块样本时间继承,参见参考模型样本时间

相关的话题