aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2018-06-19 15:16:09 +0300
committerAvi Levkovich <avi@twine-s.com>2018-06-19 15:16:09 +0300
commit4685cbcaed7a5b7932648e8357d2a405f12ca44a (patch)
tree8859dd0b3cbc1c7f513eb64700e13cecd226f5ea
parent209fb606ead23b9d1beb62c2ebfaa5a993e62881 (diff)
parent62dfa96e0bf7cba8b32a0866a0f8101b1e7ec562 (diff)
downloadTango-4685cbcaed7a5b7932648e8357d2a405f12ca44a.tar.gz
Tango-4685cbcaed7a5b7932648e8357d2a405f12ca44a.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c41
3 files changed, 48 insertions, 1 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h
index 954d0da0f..1878b6e55 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h
@@ -36,6 +36,8 @@ typedef struct HeaterPIDControlConfigstruc
int32_t outputonoffhysteresisvalues;
int32_t processvariablesamplingrate;
int32_t pvinputfilterfactormode;
+ int32_t sensormaxvalue;
+ int32_t sensorminvalue;
double kp;
double ki;
double kd;
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c
index b988e6238..7d5ec7afd 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c
@@ -235,6 +235,12 @@ uint32_t HeaterConfigRequestMessage(HardwarePidControl* request)
HeaterControl[HeaterId].integraltime = request->integraltime;
HeaterControl[HeaterId].derivativetime = request->derivativetime;
HeaterControl[HeaterId].sensorcorrectionadjustment = request->sensorcorrectionadjustment;
+ //sensorminvalue,sensormaxvalue are used for the dryer heater as internal heater control
+ if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w)
+ {
+ HeaterControl[HeaterId].sensormaxvalue = request->sensormaxvalue;
+ HeaterControl[HeaterId].sensorminvalue = request->sensorminvalue;
+ }
//HeaterControl[HeaterId].sensortypeandsetpointlimits = request->sensortypeandsetpointlimits;
HeaterControl[HeaterId].setpointramprateorsoftstartramp = request->setpointramprateorsoftstartramp;
HeaterControl[HeaterId].setpointcontroloutputrate = request->setpointcontroloutputrate;
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 69ff06880..e7711953f 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -43,6 +43,8 @@ typedef struct HeatersControlMessage{
/******************** GLOBAL PARAMETERS ********************************************/
HeaterCommand HeaterCmd[MAX_HEATERS_NUM] = {};
uint32_t ControlIdtoHeaterId [MAX_HEATERS_NUM] = {0xFF};
+uint32_t DryerHeaterMaxTempControl = 0xFF;
+uint32_t DryerInternalPT100Id = ANALOG_DRYER_TEMP2;
bool HeatersRestart = false;
@@ -60,6 +62,7 @@ bool DCInitialHeating[MAX_HEATERS_NUM] = {true};
bool HeaterReady[MAX_HEATERS_NUM] = {true};
/******************** FUNCTIONS ********************************************/
+uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue);
uint32_t HeaterControlCBFunction(uint32_t deviceID, uint32_t readValue);
uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue);
uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue);
@@ -116,6 +119,8 @@ uint32_t HeatersEnd(void)
{
status |=RemoveControlCallback(ControlIdtoHeaterId [i] ,HeaterControlCBFunction);
}
+ if (i == HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w) //DC Heaters
+ status |=RemoveControlCallback(DryerHeaterMaxTempControl ,HeaterMaxTempCBFunction);
DeActivateHeater(i);
}
return status;
@@ -232,6 +237,8 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue)
ControlIdtoHeaterId [HeaterId] = AddControlCallback( HeaterControlCBFunction, eHundredMillisecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0);
}
HeaterReady[HeaterId] = false;
+ if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w) //Dryer Heaters
+ DryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eHundredMillisecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),DryerInternalPT100Id,0);
return OK;
@@ -253,7 +260,39 @@ void HeaterPrepareReady(void)
* called by: Communication from host
* initialized all global data
*/
-
+//DryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction
+uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
+{
+ int index=MAX_HEATERS_NUM;
+ /*char str[100];
+ uint8_t len = 0;*/
+ if (IfIndex>>8 != IfTypeHeaters)
+ {
+ LOG_ERROR (IfIndex, "Wrong Interface type");
+ return 0xFFFFFFFF;
+ }
+ index = IfIndex&0xFF;
+ if (index != HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w) //AC Heaters
+ {
+ LOG_ERROR (IfIndex, "Wrong Interface ");
+ return 0xFFFFFFFF;
+ }
+ if (readValue >= HeaterControl[index].sensormaxvalue)
+ {
+ LOG_ERROR (readValue, "Heater Over the max temperature, turned off");
+ DeActivateHeater(index);
+ return OK;
+ }
+ if (readValue <= (HeaterControl[index].sensormaxvalue-HeaterControl[index].sensorminvalue))
+ {
+ if (HeaterControl[index].sensorminvalue > 0)
+ {
+ ActivateHeater(index);
+ }
+ LOG_ERROR (readValue, "Heater Cooled Off max temperature, turned on");
+ return OK;
+ }
+}
uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
{
int index=MAX_HEATERS_NUM;