Для получения информации о наследовании шага расчета блока Model смотрите Шаги расчета Модели, на которые Ссылаются (Simulink). В сгенерированном коде можно управлять наследовавшимся шагом расчета при помощи 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 (S, 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 &&
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_IPORT);
*enabled = (*enablePtrs[0] > 0.0);
}
}
if (*enabled) {
InputRealPtrsType uPtrs =
ssGetInputPortRealSignalPtrs(S,SIGNAL_IPORT);
real_T signal = *uPtrs[0];
int i;
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 (S, USE_DEFAULT_FOR_DISCRETE_INHERITANCE);