20190816

Dependencies:   LCD_DISCO_F429ZI TS_DISCO_F429ZI BSP_DISCO_F429ZI

Revision:
0:81007dc65bac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RxMsgThread.cpp	Fri Aug 16 22:22:05 2019 +0000
@@ -0,0 +1,118 @@
+#include "PrjDefs.h"
+
+DigitalOut xx(PG_13);
+//Ticker Tick;
+
+float dTprev = 0;
+float IntPart = 0;
+float PL = 0;
+float Power = 0;
+float RefT = 0;
+bool Expired;
+bool Down;
+
+void ResetPID(){
+    dTprev = 0;
+    IntPart = 0;
+    PL = 0;
+    Power = 0;
+    }//ResetPID
+    
+float GetRefT(float r){
+    if (Expired) return TempS;
+    float _f = r;
+    if(Start){
+        if(Down) _f -= dTdt * 0.1;
+        else _f += dTdt * 0.1;
+        }
+    else _f = 0;
+    if(Down && (_f<=TempS)) { Expired = 1; return TempS; } 
+    else if((!Down) && (_f>=TempS)){ Expired = 1; return TempS; }
+    else return _f; 
+    }//GetRefT
+
+void ReStartH(){
+    RefT = cT;
+    Expired = 0;
+    if(cT<=TempS) Down =0;
+    else Down = 1;
+    }//StartH        
+    
+void Start_H(){
+    ReStartH();
+    Start = 1;
+    }//StartH        
+    
+void StopH(){
+    RefT = 0;
+    Expired = 0;
+    Down = 0;
+    Start = 0;
+    ResetPID();
+    PWM = 0;
+    }//StopH        
+    
+void PID(){
+    float _f = dT * KProp / 10.0;
+    Power = _f;
+    LoUpLimit(Power, 0, MaxPower);
+    IntPart += (dT * KInt / 100.0);
+    LoUpLimit(IntPart, 0, MaxPower);
+    Power += IntPart;
+    _f = -(KDif * (dT - dTprev) / 10.0);
+    LoUpLimit(_f, 0, MaxPower);
+    Power += _f;
+    LoUpLimit(Power, 0, MaxPower);
+    PWM = Power;
+    dTprev = dT;
+    }//PID
+
+void RxMsgThrdFunc(){
+MsgType _msg;
+MsgType *_mail;
+TxRxServiceInit();
+while (1) {
+    TxRxStates _trs = GetMsg(&_msg.cmd);
+    if(_trs == RxRcvd){
+        cT = _msg.pars.f[0];
+        if(Start){
+            RefT = GetRefT(RefT);
+            dT = RefT - cT;
+            xx=1;
+            PID();
+            xx=0;
+            _mail = MsgMail.alloc();
+            if(ExtraSelected == PWM_Selected) _mail->cmd = PWM_Selected;
+            else if(ExtraSelected == PWM_Changing) _mail->cmd = PWM_Changing;
+            else _mail->cmd = PrjEventNone;
+            _mail->pars.f[0] = PWM;
+            MsgMail.put(_mail);
+                
+            _mail = MsgMail.alloc();
+            if(TempR_Selected == cT_Selected){
+                _mail->cmd = cT_Selected;
+                _mail->pars.f[0] = cT;
+                }else{
+                    _mail->cmd = dT_Selected;
+                    _mail->pars.f[0] = dT;
+                    }
+            MsgMail.put(_mail);
+            }else{//if(Start)
+                PWM = 0;
+                ResetPID();
+                _mail = MsgMail.alloc();
+                _mail->cmd = cT_Selected;
+                _mail->pars.f[0] = cT;
+                MsgMail.put(_mail);
+                }//else{//if(Start)
+        
+        
+        
+        _msg.cmd = CmdPWM;
+        _msg.pars.f[0] =  PWM;
+        SendMsg(&_msg.cmd);
+        
+        }//if(_trs == RxRcvd)
+    ThisThread::sleep_for(1);
+    }//while(1)
+}//RxMsgThrdFunc
\ No newline at end of file