00001
00013 #include <stat/loggers.h>
00014
00015 #include "pmsm.h"
00016 #include "simulator.h"
00017 #include <uibuilder.h>
00018
00020 class pmsmDS : public DS {
00021
00022 protected:
00024 int L_x, L_ou, L_oy, L_iu;
00026 vec profileWw;
00028 double dt_prof;
00030 int Dt;
00031 public:
00032 pmsmDS ( int Dt0 ) : Dt ( Dt0 ) {}
00033 void set_parameters ( double Rs0, double Ls0, double Fmag0, double Bf0, double p0, double kp0, double J0, double Uc0, double DT0, double dt0 ) {
00034 pmsmsim_set_parameters ( Rs0, Ls0, Fmag0, Bf0, p0, kp0, J0, Uc0, DT0, dt0 );
00035 }
00036 void getdata ( vec &dt ) {dt=vec ( KalmanObs,6 );}
00037 void write ( vec &ut ) {}
00038
00039 void step() {
00040 static int ind=0;
00041 static double dW;
00042 static double Ww;
00043 if ( t>=dt_prof*ind ) {
00044 if ( ind<profileWw.length() ) {
00045 ind++;
00046
00047 dW = profileWw ( ind )-profileWw ( ind-1 );
00048 }
00049 else {
00050 dW = 0;
00051 }
00052 }
00053 Ww += dW;
00054
00055 for ( int i=0;i<Dt;i++ ) { pmsmsim_step ( Ww );}
00056 };
00057
00058 void log_add ( logger &L ) {
00059 L_x = L.add ( rx, "x" );
00060 L_oy = L.add ( ry, "oi" );
00061 L_ou = L.add ( ru, "ou" );
00062 L_iu = L.add ( ru, "iu" );
00063 }
00064
00065 void logit ( logger &L ) {
00066 L.logit ( L_x, vec ( x,4 ) );
00067 L.logit ( L_oy, vec_2 ( KalmanObs[2],KalmanObs[3] ) );
00068 L.logit ( L_ou, vec_2 ( KalmanObs[0],KalmanObs[1] ) );
00069 L.logit ( L_iu, vec_2 ( KalmanObs[4],KalmanObs[5] ) );
00070 }
00071
00072 void set_profile ( double dt, const vec &Ww ) {dt_prof=dt; profileWw=Ww;}
00073 };
00074
00075 class UIpmsm: public UIbuilder{
00076 public:
00077 UIpmsm():UIbuilder("pmsm"){}
00078
00079 void build(Setting &S, void** result) const{
00080
00081 };
00082 };
00083
00084 class UIpmsmDS: public UIbuilder {
00085 public:
00086 UIpmsmDS():UIbuilder("pmsmDS"){}
00087 void build(Setting &S, void** result) const{
00088 double DT=S["Dt"];
00089 pmsmDS* tmp = new pmsmDS(DT);
00090 try{
00091 Setting& Sp=S["param"];
00092 tmp->set_parameters(S["Rs"], S["Ls"], S["Fmag"], S["Bf"], S["p"], S["kp"], ...
00093 S["J"], S["Uc"], DT, )
00094 }
00095 }
00096 }