20190816
Dependencies: LCD_DISCO_F429ZI TS_DISCO_F429ZI BSP_DISCO_F429ZI
RxMsgThread.cpp@0:81007dc65bac, 2019-08-16 (annotated)
- Committer:
- VASKO
- Date:
- Fri Aug 16 22:22:05 2019 +0000
- Revision:
- 0:81007dc65bac
20190816
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
VASKO | 0:81007dc65bac | 1 | #include "PrjDefs.h" |
VASKO | 0:81007dc65bac | 2 | |
VASKO | 0:81007dc65bac | 3 | DigitalOut xx(PG_13); |
VASKO | 0:81007dc65bac | 4 | //Ticker Tick; |
VASKO | 0:81007dc65bac | 5 | |
VASKO | 0:81007dc65bac | 6 | float dTprev = 0; |
VASKO | 0:81007dc65bac | 7 | float IntPart = 0; |
VASKO | 0:81007dc65bac | 8 | float PL = 0; |
VASKO | 0:81007dc65bac | 9 | float Power = 0; |
VASKO | 0:81007dc65bac | 10 | float RefT = 0; |
VASKO | 0:81007dc65bac | 11 | bool Expired; |
VASKO | 0:81007dc65bac | 12 | bool Down; |
VASKO | 0:81007dc65bac | 13 | |
VASKO | 0:81007dc65bac | 14 | void ResetPID(){ |
VASKO | 0:81007dc65bac | 15 | dTprev = 0; |
VASKO | 0:81007dc65bac | 16 | IntPart = 0; |
VASKO | 0:81007dc65bac | 17 | PL = 0; |
VASKO | 0:81007dc65bac | 18 | Power = 0; |
VASKO | 0:81007dc65bac | 19 | }//ResetPID |
VASKO | 0:81007dc65bac | 20 | |
VASKO | 0:81007dc65bac | 21 | float GetRefT(float r){ |
VASKO | 0:81007dc65bac | 22 | if (Expired) return TempS; |
VASKO | 0:81007dc65bac | 23 | float _f = r; |
VASKO | 0:81007dc65bac | 24 | if(Start){ |
VASKO | 0:81007dc65bac | 25 | if(Down) _f -= dTdt * 0.1; |
VASKO | 0:81007dc65bac | 26 | else _f += dTdt * 0.1; |
VASKO | 0:81007dc65bac | 27 | } |
VASKO | 0:81007dc65bac | 28 | else _f = 0; |
VASKO | 0:81007dc65bac | 29 | if(Down && (_f<=TempS)) { Expired = 1; return TempS; } |
VASKO | 0:81007dc65bac | 30 | else if((!Down) && (_f>=TempS)){ Expired = 1; return TempS; } |
VASKO | 0:81007dc65bac | 31 | else return _f; |
VASKO | 0:81007dc65bac | 32 | }//GetRefT |
VASKO | 0:81007dc65bac | 33 | |
VASKO | 0:81007dc65bac | 34 | void ReStartH(){ |
VASKO | 0:81007dc65bac | 35 | RefT = cT; |
VASKO | 0:81007dc65bac | 36 | Expired = 0; |
VASKO | 0:81007dc65bac | 37 | if(cT<=TempS) Down =0; |
VASKO | 0:81007dc65bac | 38 | else Down = 1; |
VASKO | 0:81007dc65bac | 39 | }//StartH |
VASKO | 0:81007dc65bac | 40 | |
VASKO | 0:81007dc65bac | 41 | void Start_H(){ |
VASKO | 0:81007dc65bac | 42 | ReStartH(); |
VASKO | 0:81007dc65bac | 43 | Start = 1; |
VASKO | 0:81007dc65bac | 44 | }//StartH |
VASKO | 0:81007dc65bac | 45 | |
VASKO | 0:81007dc65bac | 46 | void StopH(){ |
VASKO | 0:81007dc65bac | 47 | RefT = 0; |
VASKO | 0:81007dc65bac | 48 | Expired = 0; |
VASKO | 0:81007dc65bac | 49 | Down = 0; |
VASKO | 0:81007dc65bac | 50 | Start = 0; |
VASKO | 0:81007dc65bac | 51 | ResetPID(); |
VASKO | 0:81007dc65bac | 52 | PWM = 0; |
VASKO | 0:81007dc65bac | 53 | }//StopH |
VASKO | 0:81007dc65bac | 54 | |
VASKO | 0:81007dc65bac | 55 | void PID(){ |
VASKO | 0:81007dc65bac | 56 | float _f = dT * KProp / 10.0; |
VASKO | 0:81007dc65bac | 57 | Power = _f; |
VASKO | 0:81007dc65bac | 58 | LoUpLimit(Power, 0, MaxPower); |
VASKO | 0:81007dc65bac | 59 | IntPart += (dT * KInt / 100.0); |
VASKO | 0:81007dc65bac | 60 | LoUpLimit(IntPart, 0, MaxPower); |
VASKO | 0:81007dc65bac | 61 | Power += IntPart; |
VASKO | 0:81007dc65bac | 62 | _f = -(KDif * (dT - dTprev) / 10.0); |
VASKO | 0:81007dc65bac | 63 | LoUpLimit(_f, 0, MaxPower); |
VASKO | 0:81007dc65bac | 64 | Power += _f; |
VASKO | 0:81007dc65bac | 65 | LoUpLimit(Power, 0, MaxPower); |
VASKO | 0:81007dc65bac | 66 | PWM = Power; |
VASKO | 0:81007dc65bac | 67 | dTprev = dT; |
VASKO | 0:81007dc65bac | 68 | }//PID |
VASKO | 0:81007dc65bac | 69 | |
VASKO | 0:81007dc65bac | 70 | void RxMsgThrdFunc(){ |
VASKO | 0:81007dc65bac | 71 | MsgType _msg; |
VASKO | 0:81007dc65bac | 72 | MsgType *_mail; |
VASKO | 0:81007dc65bac | 73 | TxRxServiceInit(); |
VASKO | 0:81007dc65bac | 74 | while (1) { |
VASKO | 0:81007dc65bac | 75 | TxRxStates _trs = GetMsg(&_msg.cmd); |
VASKO | 0:81007dc65bac | 76 | if(_trs == RxRcvd){ |
VASKO | 0:81007dc65bac | 77 | cT = _msg.pars.f[0]; |
VASKO | 0:81007dc65bac | 78 | if(Start){ |
VASKO | 0:81007dc65bac | 79 | RefT = GetRefT(RefT); |
VASKO | 0:81007dc65bac | 80 | dT = RefT - cT; |
VASKO | 0:81007dc65bac | 81 | xx=1; |
VASKO | 0:81007dc65bac | 82 | PID(); |
VASKO | 0:81007dc65bac | 83 | xx=0; |
VASKO | 0:81007dc65bac | 84 | _mail = MsgMail.alloc(); |
VASKO | 0:81007dc65bac | 85 | if(ExtraSelected == PWM_Selected) _mail->cmd = PWM_Selected; |
VASKO | 0:81007dc65bac | 86 | else if(ExtraSelected == PWM_Changing) _mail->cmd = PWM_Changing; |
VASKO | 0:81007dc65bac | 87 | else _mail->cmd = PrjEventNone; |
VASKO | 0:81007dc65bac | 88 | _mail->pars.f[0] = PWM; |
VASKO | 0:81007dc65bac | 89 | MsgMail.put(_mail); |
VASKO | 0:81007dc65bac | 90 | |
VASKO | 0:81007dc65bac | 91 | _mail = MsgMail.alloc(); |
VASKO | 0:81007dc65bac | 92 | if(TempR_Selected == cT_Selected){ |
VASKO | 0:81007dc65bac | 93 | _mail->cmd = cT_Selected; |
VASKO | 0:81007dc65bac | 94 | _mail->pars.f[0] = cT; |
VASKO | 0:81007dc65bac | 95 | }else{ |
VASKO | 0:81007dc65bac | 96 | _mail->cmd = dT_Selected; |
VASKO | 0:81007dc65bac | 97 | _mail->pars.f[0] = dT; |
VASKO | 0:81007dc65bac | 98 | } |
VASKO | 0:81007dc65bac | 99 | MsgMail.put(_mail); |
VASKO | 0:81007dc65bac | 100 | }else{//if(Start) |
VASKO | 0:81007dc65bac | 101 | PWM = 0; |
VASKO | 0:81007dc65bac | 102 | ResetPID(); |
VASKO | 0:81007dc65bac | 103 | _mail = MsgMail.alloc(); |
VASKO | 0:81007dc65bac | 104 | _mail->cmd = cT_Selected; |
VASKO | 0:81007dc65bac | 105 | _mail->pars.f[0] = cT; |
VASKO | 0:81007dc65bac | 106 | MsgMail.put(_mail); |
VASKO | 0:81007dc65bac | 107 | }//else{//if(Start) |
VASKO | 0:81007dc65bac | 108 | |
VASKO | 0:81007dc65bac | 109 | |
VASKO | 0:81007dc65bac | 110 | |
VASKO | 0:81007dc65bac | 111 | _msg.cmd = CmdPWM; |
VASKO | 0:81007dc65bac | 112 | _msg.pars.f[0] = PWM; |
VASKO | 0:81007dc65bac | 113 | SendMsg(&_msg.cmd); |
VASKO | 0:81007dc65bac | 114 | |
VASKO | 0:81007dc65bac | 115 | }//if(_trs == RxRcvd) |
VASKO | 0:81007dc65bac | 116 | ThisThread::sleep_for(1); |
VASKO | 0:81007dc65bac | 117 | }//while(1) |
VASKO | 0:81007dc65bac | 118 | }//RxMsgThrdFunc |