ssSetDWorkUsageType warning in c-mex S-function
Mostra commenti meno recenti
Hi all,
I have written an S-function which uses 6 DWork vectors which I specify that I want them to be used as discrete state vectors:
static void mdlInitializeSizes(SimStruct *S)
{
...
ssSetNumDWork(S, 6);
ssSetDWorkWidth(S, 0, 16);
ssSetDWorkWidth(S, 1, 16);
ssSetDWorkWidth(S, 2, 16);
ssSetDWorkWidth(S, 3, 16);
ssSetDWorkWidth(S, 4, 169);
ssSetDWorkWidth(S, 5, 16);
ssSetDWorkDataType(S, 0, SS_DOUBLE);
ssSetDWorkDataType(S, 1, SS_DOUBLE);
ssSetDWorkDataType(S, 2, SS_DOUBLE);
ssSetDWorkDataType(S, 3, SS_DOUBLE);
ssSetDWorkDataType(S, 4, SS_DOUBLE);
ssSetDWorkDataType(S, 5, SS_DOUBLE);
ssSetDWorkUsageType(S, 0, SS_DWORK_USED_AS_DSTATE);
ssSetDWorkUsageType(S, 1, SS_DWORK_USED_AS_DSTATE);
ssSetDWorkUsageType(S, 2, SS_DWORK_USED_AS_DSTATE);
ssSetDWorkUsageType(S, 3, SS_DWORK_USED_AS_DSTATE);
ssSetDWorkUsageType(S, 4, SS_DWORK_USED_AS_DSTATE);
ssSetDWorkUsageType(S, 5, SS_DWORK_USED_AS_DSTATE);
...
}
Later on, I use these DWork vectors on "mdlInitializeConditions", "mdlUpdate" and "mdlOutputs", e.g:
static void mdlInitializeConditions(SimStruct *S)
{
//Get pointers to DWork Vectors
real_T *x0 = (real_T*) ssGetDWork(S,0);
real_T *x1 = (real_T*) ssGetDWork(S,1);
real_T *x2 = (real_T*) ssGetDWork(S,2);
real_T *x3 = (real_T*) ssGetDWork(S,3);
real_T *x4 = (real_T*) ssGetDWork(S,4);
real_T *x5 = (real_T*) ssGetDWork(S,5);
//Get a pointer to the discrete states vector
real_T *x6=ssGetRealDiscStates(S);
//Get pointer to the elements of a signal (type double) connected to the input port specified by the index port
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
real_T tempConst[16]=...
real_T temptTable[256]=...
real_T t2;
int_T i;
for (i=0; i<256; i++)
x4[i]=temptTable[i];
for (i=0; i<16;i++)
{
x5[i]=15;
x3[i]=tempConst[i];
x0[i]=x5[i];
x2[i]=20;
x1[i]=x2[i];
x1[i]+=*uPtrs[i]*x4[i*16+i];
}
...
}
static void mdlOutputs(SimStruct *S, int_T tid)
{
int_T i;
//Get a pointer to the output signal (type double)
real_T *y = ssGetOutputPortRealSignal(S,0);
//DWork vectors (see mdlInitialiseConditions)
real_T *x0 = (real_T*) ssGetDWork(S,0);
real_T *x1 = (real_T*) ssGetDWork(S,1);
real_T *x2 = (real_T*) ssGetDWork(S,2);
real_T *x3 = (real_T*) ssGetDWork(S,3);
real_T *x4 = (real_T*) ssGetDWork(S,4);
real_T *x5 = (real_T*) ssGetDWork(S,5);
//Discrete state vector (see mdlInitialiseConditions)
real_T *x6=ssGetRealDiscStates(S); //deltaT
for (i=0; i<16; i++)
{
x5[i]=x1[i]+(x0[i]-x1[i]*exp(-x6[0]/x3[i]));
y[i]=x5[i];
}
}
Problem is that after I've compiled the c-mex file and run the simulation, I get the following warnings in the Matlab console:
Warning: The usedAsDState flag of data type work vector 1 of S-function 'Updmdl/S-Function' is ignored because it is not named
Warning: The usedAsDState flag of data type work vector 2 of S-function 'Updmdl/S-Function' is ignored because it is not named
...
Warning: The usedAsDState flag of data type work vector 6 of S-function 'Updmdl/S-Function' is ignored because it is not named
Anyone knows why the statement "is ignored", how could it be "named" and if it actually affects the results of the simulation?
Thank you in advance for your time.
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Configure C/C++ S-Function Features in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!