Получите индекс шага расчета выходного порта
int_T ssGetOutputPortSampleTimeIndex(SimStruct *S, int_T outputPortIdx)
SSimStruct, представляющий Блок s-function.
outputPortIdxИндекс выходного порта, индекс шага расчета которого должен быть возвращен.
int_T значение, указывающее на шаг расчета, индексирует для выходного порта, заданного индексом outputPortIdx. Возвращает CONSTANT_TID(-2 ) для постоянного (inf) шаги расчета.
Используйте в любой стандартной программе после распространения шага расчета (т.е. в или после mdlInitializeSampleTimes) определить индекс шага расчета выходного порта. Необходимо использовать этот макрос, только если вы задали основанные на порте шаги расчета.
Механизм Simulink® возвращает индекс шага расчета в контексте шагов расчета S-функции, не шагов расчета целой модели. Следовательно, индекс шага расчета (sti) возвращенный ssGetOutputPortSampleTimeIndex и ID задачи (tid) переданный в S-функцию механизмом Simulink не эквивалентны. Используйте индекс, возвращенный ssGetOutputPortSampleTimeIndex в вызовах ssIsSampleHit, и т.д., чтобы определить, достигает ли S-функция одной из своих частот дискретизации. Например, следующий mdlOutputs метод использует индекс шага расчета, чтобы проверять, выполняется ли первый выходной порт.
static void mdlOutputs(SimStruct *S, int_T tid)
{
int sti = ssGetOutputPortSampleTimeIndex(S,0);
if (ssIsSampleHit(S, sti, tid)) {
CodeForThisSampleRateHere()
}
}Механизм Simulink возвращает индекс CONSTANT_TID(-2 ) для постоянного (inf) шаги расчета. В этом случае индекс шага расчета и ID задачи всей модели идентичны.
C, C++
Смотрите S-функцию sfun_multirate.c используемый в sfcndemo_sfun_multirate.