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_MatlabCopyPID.h"
00018
00019
unsigned int DC_MatlabCopyPID::numberOfInstances=0;
00020
00021 DC_MatlabCopyPID::DC_MatlabCopyPID() {
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_MATLABCOPYPID);
00052
00053
00054
reset();
00055 }
00056
00057 void DC_MatlabCopyPID::propagateState() {
00058
#ifdef HAVE_SIMULINK
00059
for (
unsigned int i=0; i<numberOfParameters; i++)
00060 *modelParameters[i]=(real_T)p[i];
00061
00062
for (
unsigned int i=0; i<numberOfInputs; i++)
00063 *modelInputs[i]=(real_T)u[i];
00064
#endif
00065
}
00066
00067 void DC_MatlabCopyPID::updateOutput() {
00068
#ifdef HAVE_SIMULINK
00069
modelStep();
00070
00071
for (
unsigned int i=0;i<numberOfOutputs;i++)
00072 y[i]=(
TD_Float)*modelOutputs[i];
00073
#endif
00074
}
00075
00076 void DC_MatlabCopyPID::reset() {
00077
#ifdef HAVE_SIMULINK
00078
modelInitialize(1);
00079
#endif
00080
}