diff options
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; |
