Files
ISTTOK/epics/css/sys-mng-opi/CSS/MARTe/GAMs/isttokbiblio/IPID_hibd.h
2019-10-21 16:02:55 +01:00

149 lines
2.9 KiB
C++

//******************************************************************************
//
// IPID.cpp - differential PID equation - type C - out(n) = out(n-1) - Kp[PV(n)-PV(n-1)] + Ki*T*e(n) - (Kd/T)*[PV(n) - 2PV(n-1) + PV(n-2)]
// Ivo Carvalho 29/4/2011
//
//******************************************************************************
#if !defined (IPID_H)
#define IPID_H
/** @file
differential PID equation */
#include "Level0.h"
#include "Level1.h"
#include "Level2.h"
//OBJECT_DLL(IPID)
/** differential PID equation */
class IPID {
//OBJECT_DLL_STUFF(IPID)
private:
float error;
float old_error;
float old_old_error;
float Kp_constant;
float Ki_constant;
float Kd_constant;
float T_constant;
float P_realtime_constant;
float I_realtime_constant;
float D_realtime_constant;
float upper_limit;
float lower_limit;
float old_output;
float old_PV;
float old_old_PV;
public:
bool LoadOldOutputWithinLimits(float old_output_to_load);
float GetUpperLimit(){
return (this->upper_limit);
}
float GetLowerLimit(){
return (this->lower_limit);
}
float GetOldOutput(){
return (this->old_output);
}
float GetRealtimeConstantP(){
return (this->P_realtime_constant);
}
float GetRealtimeConstantI(){
return (this->I_realtime_constant);
}
float GetRealtimeConstantD(){
return (this->D_realtime_constant);
}
float GetConstantKp(){
return (this->Kp_constant);
}
float GetConstantKi(){
return (this->Ki_constant);
}
float GetConstantKd(){
return (this->Kd_constant);
}
float GetConstantT(){
return (this->T_constant);
}
float GetError(){
return (this->error);
}
float GetOldProcessVariable(){
return this->old_PV;
}
float GetOldOldProcessVariable(){
return this->old_old_PV;
}
float GetOldError(){
return (this->old_error);
}
float GetOldOldError(){
return (this->old_old_error);
}
IPID (float set_Kp_constant, float set_Ki_constant, float set_Kd_constant, float set_T_constant, float set_upper_limit, float set_lower_limit);
IPID (float set_P_realtime_constant, float set_I_realtime_constant, float set_D_realtime_constant, float set_upper_limit, float set_lower_limit);
bool SetPIDConstants(float set_Kp_constant, float set_Ki_constant, float set_Kd_constant, float set_T_constant);
bool SetRealtimePIDConstants(float set_P_realtime_constant, float set_I_realtime_constant, float set_D_realtime_constant);
bool SetLimits(float set_upper_limit, float set_lower_limit);
float CalculatePID(float process_variable, float setpoint);
float CalculatePI(float process_variable, float setpoint);
float CalculateP(float process_variable, float setpoint);
float CalculatePID_types(float process_variable, float setpoint, float type);
float ReturnErrorInPercentage(float process_variable, float setpoint);
~IPID();
private:
bool SortWaveform();
bool RemoveRepeatedValues();
};
#endif