Show
Ignore:
Timestamp:
12/09/10 16:33:44 (14 years ago)
Author:
smidl
Message:

LQG changes + lyx

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/pmsm/pmsm_ctrl.h

    r1259 r1261  
    6363        PMSMCtrl():Controller() { 
    6464                rv = RV("{ua ub }"); 
    65                 rvc = RV("{o_ia o_ib o_ua o_ub o_om o_th Ww }"); 
     65                rvc = RV("{o_ia o_ib t_ua t_ub o_om o_th Ww }"); 
    6666        } 
    6767         
     
    176176         
    177177//receding horizon 
    178         const int rec_hor; 
     178        int rec_hor; 
    179179         
    180180//system matrices 
     
    202202                                r(0.005), Dt(0.000125), rec_hor(10),                                    //for r is a default value rewrited by pcp.txt file value 
    203203                                A(5, 5), B(5, 2), Q(5, 5), R(2, 2), 
    204                                 uab(2), icond(6), MAXu(100.0), 
    205                                 p_isa(rec_hor+1), p_isb(rec_hor+1), p_ome(rec_hor+1), p_the(rec_hor+1) 
    206         {                        
     204                                uab(2), icond(6), MAXu(100.0)   {                        
    207205                //set fix matrices elements & dimensions 
    208206                A.zeros(); 
     
    219217                        Q(2, 2) = 1.0; 
    220218                R.zeros(); 
    221                         //load input penalty r from file 
    222                         ifstream pcpfile; 
    223                         double pcp; 
    224                          
    225                         pcpfile.open("pcp.txt"); 
    226                         if(pcpfile){ 
    227                                 if(pcpfile >> pcp) r = pcp;      
    228                                 pcpfile.close(); 
    229                         } 
    230                         R(0, 0) = R(1, 1) = r; 
    231219                                                                 
    232                 //set lq 
    233                 lq.rv = RV("u", 2, 0);                   
    234                 lq.set_rvc(RV("x", 5, 0)); 
    235                 lq.horizon = rec_hor;    
    236                  
    237                 Array<linfnEx> model(2); 
    238                 model(0).A = A; 
    239                 model(0).B = vec("0 0 0 0 0"); 
    240                 model(0).rv = RV("x", 5, 0); 
    241                 model(0).rv_ret = RV("x", 5, 1); 
    242                 model(1).A = B; 
    243                 model(1).B = vec("0 0"); 
    244                 model(1).rv = RV("u", 2, 0); 
    245                 model(1).rv_ret = RV("x", 5, 1); 
    246                 lq.Models = model; 
    247                  
    248                 Array<quadraticfn> qloss(2); 
    249                 qloss(0).Q.setCh(Q); 
    250                 qloss(0).rv = RV("x", 5, 1); 
    251                 qloss(1).Q.setCh(R); 
    252                 qloss(1).rv = RV("u", 2, 0);             
    253                 lq.Losses = qloss; 
    254                  
    255                 lq.finalLoss.Q.setCh(Q); 
    256                 lq.finalLoss.rv = RV("x", 5, 1); 
    257                  
    258                 lq.validate(); 
    259                                                  
    260                 uab.zeros(); 
    261220        } 
    262221                 
     
    309268                icond(3) = the; 
    310269                icond(4) = Ww; 
    311                 icond(5) = 0; 
     270                icond(5) = 1; 
    312271                vec tmp = L*icond;                   
    313272                 
     
    321280                return uab; 
    322281        }; 
     282        void from_setting(const Setting &set){ 
     283                PMSMCtrl::from_setting(set); 
     284                UI::get(r,set, "r", UI::optional); 
     285                UI::get(rec_hor,set, "h", UI::optional); 
     286        } 
     287 
     288        void validate(){ 
     289                R(0,0)=R(1,1)=r; 
     290 
     291                p_isa.set_length(rec_hor+1); 
     292                p_isb.set_length(rec_hor+1); 
     293                p_ome.set_length(rec_hor+1); 
     294                p_the.set_length(rec_hor+1); 
     295 
     296                Array<quadraticfn> qloss(2); 
     297                qloss(0).Q.setCh(Q); 
     298                qloss(0).rv = RV("x", 5, 1); 
     299                qloss(1).Q.setCh(R); 
     300                qloss(1).rv = RV("u", 2, 0);             
     301                lq.Losses = qloss;               
     302 
     303                                //set lq 
     304                lq.rv = RV("u", 2, 0);                   
     305                lq.set_rvc(RV("x", 5, 0)); 
     306                lq.horizon = rec_hor;    
     307                 
     308                Array<linfnEx> model(2); 
     309                model(0).A = A; 
     310                model(0).B = vec("0 0 0 0 0"); 
     311                model(0).rv = RV("x", 5, 0); 
     312                model(0).rv_ret = RV("x", 5, 1); 
     313                model(1).A = B; 
     314                model(1).B = vec("0 0"); 
     315                model(1).rv = RV("u", 2, 0); 
     316                model(1).rv_ret = RV("x", 5, 1); 
     317                lq.Models = model; 
     318                 
     319                lq.finalLoss.Q.setCh(Q); 
     320                lq.finalLoss.rv = RV("x", 5, 1); 
     321                 
     322                lq.validate(); 
     323                                                 
     324                uab.zeros(); 
     325 
     326        } 
    323327}; 
    324328UIREGISTER(PMSM_LQCtrl);