Получение непрерывных состояний блока
real_T *ssGetContStates(SimStruct *S)
SSimStruct представляет S-функциональный блок.
Указатель (real_T *) к вектору непрерывного состояния как массиву длины ssGetNumContStates(S). Прибыль NULL если S-функция не имеет непрерывных состояний.
Использовать в цикле моделирования, mdlInitializeConditions, или mdlStart процедуры для получения real_T вектор непрерывного состояния для S-функции. Этот вектор имеет длину ssGetNumContStates(S). Обычно этот вектор инициализируется в mdlInitializeConditions и используется в mdlOutputs.
C, C++
Следующие строки из файла csfunc.c показать, как инициализировать непрерывные состояния в mdlInitializeConditions и вычислить производные состояния в mdlDerivatives. Эта S-функция используется в модели sfcndemo_csfunc.
static void mdlInitializeConditions(SimStruct *S)
{
real_T *x0 = ssGetContStates(S);
int_T lp;
for (lp=0;lp<2;lp++) {
*x0++=0.0;
}
}
static void mdlDerivatives(SimStruct *S)
{
real_T *dx = ssGetdX(S);
real_T *x = ssGetContStates(S);
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
/* xdot = Ax + Bu */
dx[0]=A[0][0]*x[0]+A[1][1]*x[1]+B[0][0]*U(0)+B[0][1]*U(1);
dx[1]=A[1][0]*x[0]+A[1][1]*x[1]+B[1][0]*U(0)+B[1][1]*U(1);
}