00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#include "../GeneralInclude/CompilerSwitches.h"
00011
#include "../GeneralInclude/DebugSupport.h"
00012
#include "../GeneralInclude/BasicTypes.h"
00013
#include "../GeneralInclude/ClassId.h"
00014
#include "../GeneralInclude/Constants.h"
00015
#include "../Data/DC_DataItem.h"
00016
#include "../Data/DataPool.h"
00017
#include "DC_MatlabDataPoolPID.h"
00018
00019
unsigned int DC_MatlabDataPoolPID::numberOfInstances=0;
00020
00021 DC_MatlabDataPoolPID::DC_MatlabDataPoolPID() {
00022
00023
00024 assert(numberOfInstances==0);
00025 numberOfInstances++;
00026
00027 numberOfInputs=1;
00028 numberOfOutputs=1;
00029 numberOfParameters=3;
00030
00031
#ifdef HAVE_SIMULINK
00032
modelStep =PID_step;
00033 modelInitialize =PID_init;
00034
00035 modelInputs =
new real_T*[numberOfInputs];
00036 modelOutputs =
new real_T*[numberOfOutputs];
00037 modelParameters =
new real_T*[numberOfParameters];
00038
00039 modelInputs[0] =&Input;
00040 modelOutputs[0] =&Output;
00041 modelParameters[1-1]=&;
00042 modelParameters[2-1]=&;
00043 modelParameters[3-1]=&;
00044
#endif
00045
00046 setNumberOfStates(0);
00047 setNumberOfInputs(numberOfInputs);
00048 setNumberOfOutputs(numberOfOutputs);
00049 setNumberOfParameters(numberOfParameters);
00050
00051 setClassId(ID_MATLABDATAPOOLPID);
00052
00053
00054
reset();
00055 }
00056
00057 void DC_MatlabDataPoolPID::propagateState() {
00058
#ifdef HAVE_SIMULINK
00059
for (
unsigned int i=0; i<numberOfParameters; i++)
00060 *modelParameters[i]=(real_T)p[i];
00061
00062
DataPool* pDP =
CC_RootObject::getDataPool();
00063
00064
for (
unsigned int i=0; i<numberOfInputs; i++)
00065 *modelInputs[i]=(real_T)pDP->
getFloatValue(dpu[i]);
00066
#endif
00067
}
00068
00069 void DC_MatlabDataPoolPID::updateOutput() {
00070
#ifdef HAVE_SIMULINK
00071
modelStep();
00072
00073
DataPool* pDP =
CC_RootObject::getDataPool();
00074
00075
for (
unsigned int i=0;i<numberOfOutputs;i++)
00076 pDP->setFloatValue(dpy[i],(
TD_Float)*modelOutputs[i])
00077 #endif
00078 }
00079
00080 void DC_MatlabDataPoolPID::reset() {
00081
#ifdef HAVE_SIMULINK
00082
modelInitialize(1);
00083
#endif
00084
}