文档

引用模型的继承采样时间

和有关信息。模型块样本时间继承,参见继承模型引用的样本时间(金宝app模型)。在生成的代码中,可以使用ssSetModelReferenceSampleTimeInheritanceRule以不同的方式:

  • 排除继承的s函数:如果在s函数的运行时算法中使用了采样时间,那么s函数排除模型继承采样时间。例如,考虑以下情况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];}

    mdlOutputs代码在其算法中使用采样时间,因此s函数应该指定

    ssSetModelReferenceSampleTimeInheritanceRule(年代,DISALLOW_SAMPLE_TIME_INHERITANCE);
  • 不排除继承的s函数:如果采样时间只用于确定s函数是否有一个采样命中,那么它不排除模型继承一个采样时间。例如,考虑mdlOutputss函数示例中的代码sfun_multirate.c

    静态无效mdlOutputs(SimStruct *S, int_T tid) {InputRealPtrsType enablePtrs;int *enabled = ssGetIWork(S);if (ssGetInputPortSampleTime (S,ENABLE_IPORT)==CONTINUOUS_SAMPLE_TIME && ssGetInputPortOffsetTime(S,ENABLE_IPORT)==0.0) {if (ssIsMajorTimeStep(S) && ssIsContinuousTask(S,tid)) {enablePtrs = ssGetInputPortRealSignalPtrs(S,ENABLE_IPORT);*enabled = (*enablePtrs[0] > 0.0);}} else {int enableTid = ssGetInputPortSampleTimeIndex(S,ENABLE_IPORT);if (ssIsSampleHit(S, enableTid, tid)) {enablePtrs = ssGetInputPortRealSignalPtrs(S, enable_import);*enabled = (*enablePtrs[0] > 0.0);}}如果(*enabled) {InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,SIGNAL_IPORT);信号= *uPtrs[0];int我; for (i = 0; i < NOUTPUTS; i++) { if (ssIsSampleHit(S, ssGetOutputPortSampleTimeIndex(S,i), tid)) { real_T *y = ssGetOutputPortRealSignal(S,i); *y = signal; } } } } /* end mdlOutputs */

上面的代码使用了块的采样时间,但仅用于确定是否有命中。因此,这个s函数应该

ssSetModelReferenceSampleTimeInheritanceRule(年代,USE_DEFAULT_FOR_DISCRETE_INHERITANCE);
这个话题有帮助吗?