文档

引用模型的继承样本时间

和有关信息。模型块样本时间继承,参见参考模型样本时间(金宝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函数是否有样本命中,那么它不排除模型继承样本时间。例如,考虑mdlOutputs代码来自s函数示例sfun_multirate.c

    static void mdlOutputs(SimStruct *S, int_T tid) {InputRealPtrsType enablePtrs;int *enabled = ssGetIWork(S);if (ssGetInputPortSampleTime (S,ENABLE_IPORT)==CONTINUOUS_SAMPLE_TIME && ssgetinputporttoffsettime (S,ENABLE_IPORT)==0.0) {if (ssIsMajorTimeStep(S) && ssiscontinuousstask (S,tid)) {enabletrs = ssGetInputPortRealSignalPtrs(S,ENABLE_IPORT);*enabled = (*enablePtrs[0] > 0.0);}} else {int enableTid = ssGetInputPortSampleTimeIndex(S,ENABLE_IPORT);如果(ssIsSampleHit(S, enableTid, tid)) {enabletrs = ssGetInputPortRealSignalPtrs(S,ENABLE_IPORT);*enabled = (*enablePtrs[0] > 0.0);}} if (*enabled) {InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,SIGNAL_IPORT);real_T信号= *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);