Получите непрерывные состояния блока
real_T *ssGetContStates(SimStruct *S)
SSimStruct, представляющий Блок s-function.
Указатель (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);
}ssGetNumContStates, ssGetRealDiscStates, ssGetdX, mdlInitializeConditions, mdlStart