Получите непрерывные состояния блока
real_T *ssGetContStates(SimStruct *S)
S
SimStruct, представляющий Блок 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