rework circulation pump
This commit is contained in:
		| @ -58,13 +58,6 @@ void initControl(void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| typedef enum _BurnerState | ||||
| { | ||||
|     BURNER_UNKNOWN, | ||||
|     BURNER_FIRED, | ||||
|     BURNER_FAULT | ||||
| } eBurnerState; | ||||
|  | ||||
| void taskControl(void *pvParameters) | ||||
| { | ||||
|     bool bHeatingInAction = false; | ||||
| @ -84,7 +77,6 @@ void taskControl(void *pvParameters) | ||||
|             { | ||||
|                 ESP_LOGW(TAG, "Disabling burner due to safety fault"); | ||||
|                 bHeatingInAction = false; | ||||
|                 setCirculationPumpState(ENABLED); | ||||
|                 setBurnerState(DISABLED); | ||||
|                 setSafetyControlState(ENABLED); | ||||
|             } | ||||
| @ -100,7 +92,6 @@ void taskControl(void *pvParameters) | ||||
|             { | ||||
|                 ESP_LOGW(TAG, "Disabling burner due to SNTP fault"); | ||||
|                 bHeatingInAction = false; | ||||
|                 setCirculationPumpState(ENABLED); | ||||
|                 setBurnerState(DISABLED); | ||||
|                 setSafetyControlState(ENABLED); | ||||
|             } | ||||
| @ -110,46 +101,12 @@ void taskControl(void *pvParameters) | ||||
|         // Get current temperature entry | ||||
|         sControlTemperatureEntry currentControlEntry = getCurrentTemperatureEntry(); | ||||
|  | ||||
|         if (bHeatingInAction) | ||||
|         { | ||||
|             if ((getChamberTemperature().fCurrentValue >= currentControlEntry.fChamberTemperature) || | ||||
|                 (getChamberTemperature().predict60s.fValue >= currentControlEntry.fChamberTemperature)) | ||||
|             { | ||||
|                 ESP_LOGI(TAG, "Chamber target temperature reached: Disabling burner"); | ||||
|                 bHeatingInAction = false; | ||||
|                 setCirculationPumpState(ENABLED); | ||||
|                 setBurnerState(DISABLED); | ||||
|                 setSafetyControlState(ENABLED); | ||||
|             } | ||||
|             else if (esp_timer_get_time() - i64BurnerEnableTimestamp >= BURNER_FAULT_DETECTION_THRESHOLD * 1000000U) | ||||
|             { | ||||
|                 if (eBurnerState == BURNER_UNKNOWN) | ||||
|                 { | ||||
|                     if (getBurnerError() == FAULT) | ||||
|                     { | ||||
|                         ESP_LOGW(TAG, "Burner fault detected after threshold!"); | ||||
|                         bHeatingInAction = false; | ||||
|                         eBurnerState = BURNER_FAULT; | ||||
|                         sControlState = CONTROL_FAULT_BURNER; | ||||
|                         setCirculationPumpState(ENABLED); | ||||
|                         setBurnerState(DISABLED); | ||||
|                         setSafetyControlState(ENABLED); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         ESP_LOGW(TAG, "No Burner fault detected after threshold!"); | ||||
|                         eBurnerState = BURNER_FIRED; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // Enable burner if outdoor temperature is low and return flow temperature is cooled down | ||||
|         if (!bHeatingInAction && (eBurnerState != BURNER_FAULT)) | ||||
|         { | ||||
|             if (getOutdoorTemperature().average60s.fValue >= OUTDOOR_TEMPERATURE_THRESHOLD) | ||||
|             { | ||||
|                 // ESP_LOGI(TAG, "Outdoor temperature too warm: Disabling heating"); | ||||
|                 setCirculationPumpState(DISABLED); | ||||
|                 setBurnerState(DISABLED); | ||||
|                 setSafetyControlState(DISABLED); | ||||
|                 sControlState = CONTROL_OUTDOOR_TOO_WARM; | ||||
| @ -160,7 +117,6 @@ void taskControl(void *pvParameters) | ||||
|                 ESP_LOGI(TAG, "Enabling burner: Return flow temperature target reached"); | ||||
|                 eBurnerState = BURNER_UNKNOWN; | ||||
|                 bHeatingInAction = true; | ||||
|                 setCirculationPumpState(ENABLED); | ||||
|                 setBurnerState(ENABLED); | ||||
|                 setSafetyControlState(ENABLED); | ||||
|                 i64BurnerEnableTimestamp = esp_timer_get_time(); | ||||
| @ -168,10 +124,57 @@ void taskControl(void *pvParameters) | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 // ESP_LOGI(TAG, "Return flow temperature is still to warm: Disabling heating"); | ||||
|                 sControlState = CONTROL_RETURN_FLOW_TOO_WARM; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|         // Disable burner if target temperature is reached or a fault occurred | ||||
|         if (bHeatingInAction) | ||||
|         { | ||||
|             if ((getChamberTemperature().fCurrentValue >= currentControlEntry.fChamberTemperature) || | ||||
|                 (getChamberTemperature().predict60s.fValue >= currentControlEntry.fChamberTemperature)) | ||||
|             { | ||||
|                 ESP_LOGI(TAG, "Chamber target temperature reached: Disabling burner"); | ||||
|                 bHeatingInAction = false; | ||||
|                 setBurnerState(DISABLED); | ||||
|                 setSafetyControlState(ENABLED); | ||||
|             } | ||||
|             else if (esp_timer_get_time() - i64BurnerEnableTimestamp >= BURNER_FAULT_DETECTION_THRESHOLD * 1000000U) | ||||
|             { | ||||
|                 if (eBurnerState == BURNER_UNKNOWN) | ||||
|                 { | ||||
|                     if (getBurnerError() == FAULT) | ||||
|                     { | ||||
|                         // ESP_LOGI(TAG, "Burner fault detected after threshold!"); | ||||
|                         bHeatingInAction = false; | ||||
|                         eBurnerState = BURNER_FAULT; | ||||
|                         sControlState = CONTROL_FAULT_BURNER; | ||||
|                         setBurnerState(DISABLED); | ||||
|                         setSafetyControlState(ENABLED); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         // ESP_LOGI(TAG, "No Burner fault detected after threshold!"); | ||||
|                         eBurnerState = BURNER_FIRED; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // Handle circulation pump state | ||||
|         if ((getReturnFlowTemperature().average60s.fValue <= currentControlEntry.fReturnFlowTemperature) && | ||||
|             (getChamberTemperature().fCurrentValue <= CHAMBER_TEMPERATURE_THRESHOLD)) | ||||
|         { | ||||
|             // ESP_LOGI(TAG, "Burner is cooled down: Disable circulation pump"); | ||||
|             setCirculationPumpState(DISABLED); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             // ESP_LOGI(TAG, "Burner is heated: Enable circulation pump"); | ||||
|             setCirculationPumpState(ENABLED); | ||||
|         } | ||||
|     } // End of while(1) | ||||
| } | ||||
|  | ||||
| eControlState getControlState(void) | ||||
|  | ||||
| @ -14,6 +14,13 @@ typedef enum _ControlState | ||||
|     CONTROL_FAULT_SNTP, | ||||
| } eControlState; | ||||
|  | ||||
| typedef enum _BurnerState | ||||
| { | ||||
|     BURNER_UNKNOWN, // Burner is disabled or state after enabling is still unkown | ||||
|     BURNER_FIRED,   // Burner fired successfully | ||||
|     BURNER_FAULT    // Burner was unable to fire successfully | ||||
| } eBurnerState; | ||||
|  | ||||
| typedef enum _ControlWeekday | ||||
| { | ||||
|     MONDAY, | ||||
|  | ||||
		Reference in New Issue
	
	Block a user