From d678ea1981eb58fe475042a1551bb2ae7e33e493 Mon Sep 17 00:00:00 2001 From: mvgalen Date: Tue, 4 Feb 2025 08:40:54 +0100 Subject: [PATCH 1/4] Add event for large temperature difference in battery --- Software/USER_SETTINGS.h | 2 ++ Software/src/devboard/safety/safety.cpp | 7 +++++++ Software/src/devboard/utils/events.cpp | 4 ++++ Software/src/devboard/utils/events.h | 1 + 4 files changed, 14 insertions(+) diff --git a/Software/USER_SETTINGS.h b/Software/USER_SETTINGS.h index 5b56850c2..ab975c8da 100644 --- a/Software/USER_SETTINGS.h +++ b/Software/USER_SETTINGS.h @@ -139,6 +139,8 @@ #define BATTERY_MAXTEMPERATURE 500 // -250 = -25.0 °C , Min temperature (Will produce a battery frozen event if below) #define BATTERY_MINTEMPERATURE -250 +// 150 = 15.0 °C , Max difference between min and max temperature (Will produce a battery temperature deviation event if greater) +#define BATTERY_MAX_TEMPERATURE_DEVIATION 150 // 300 = 30.0A , Max charge in Amp (Some inverters needs to be limited) #define BATTERY_MAX_CHARGE_AMP 300 // 300 = 30.0A , Max discharge in Amp (Some inverters needs to be limited) diff --git a/Software/src/devboard/safety/safety.cpp b/Software/src/devboard/safety/safety.cpp index fe4225589..513308df2 100644 --- a/Software/src/devboard/safety/safety.cpp +++ b/Software/src/devboard/safety/safety.cpp @@ -41,6 +41,13 @@ void update_machineryprotection() { clear_event(EVENT_BATTERY_FROZEN); } + if (datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC > BATTERY_MAX_TEMPERATURE_DEVIATION){ + set_event_latched(EVENT_BATTERY_TEMP_DEVIATION_HIGH, + datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC); + } else { + clear_event(EVENT_BATTERY_TEMP_DEVIATION_HIGH); + } + // Battery voltage is over designed max voltage! if (datalayer.battery.status.voltage_dV > datalayer.battery.info.max_design_voltage_dV) { set_event(EVENT_BATTERY_OVERVOLTAGE, datalayer.battery.status.voltage_dV); diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index a2f0dfbd6..71a37e38a 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -218,6 +218,7 @@ void init_events(void) { events.entries[EVENT_MQTT_DISCONNECT].level = EVENT_LEVEL_INFO; events.entries[EVENT_EQUIPMENT_STOP].level = EVENT_LEVEL_ERROR; events.entries[EVENT_SD_INIT_FAILED].level = EVENT_LEVEL_WARNING; + events.entries[EVENT_BATTERY_TEMP_DEVIATION_HIGH].level = EVENT_LEVEL_ERROR; events.entries[EVENT_EEPROM_WRITE].log = false; // Don't log the logger... @@ -254,6 +255,9 @@ void reset_all_events() { } events.level = EVENT_LEVEL_INFO; update_bms_status(); +#ifdef DEBUG_LOG + logging.println("All events have been cleared."); +#endif } void set_event_MQTTpublished(EVENTS_ENUM_TYPE event) { diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index 4874ee653..9e4a28536 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -116,6 +116,7 @@ XX(EVENT_EQUIPMENT_STOP) \ XX(EVENT_AUTOMATIC_PRECHARGE_FAILURE) \ XX(EVENT_SD_INIT_FAILED) \ + XX(EVENT_BATTERY_TEMP_DEVIATION_HIGH) \ XX(EVENT_NOF_EVENTS) typedef enum { EVENTS_ENUM_TYPE(GENERATE_ENUM) } EVENTS_ENUM_TYPE; From 36ab214ecf6e782e28545541b230bdb93b2dbf78 Mon Sep 17 00:00:00 2001 From: mvgalen Date: Tue, 4 Feb 2025 10:45:56 +0100 Subject: [PATCH 2/4] Fix code formatting. --- Software/src/devboard/safety/safety.cpp | 3 ++- Software/src/devboard/utils/events.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Software/src/devboard/safety/safety.cpp b/Software/src/devboard/safety/safety.cpp index 513308df2..4a98f806f 100644 --- a/Software/src/devboard/safety/safety.cpp +++ b/Software/src/devboard/safety/safety.cpp @@ -41,7 +41,8 @@ void update_machineryprotection() { clear_event(EVENT_BATTERY_FROZEN); } - if (datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC > BATTERY_MAX_TEMPERATURE_DEVIATION){ + if (datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC > + BATTERY_MAX_TEMPERATURE_DEVIATION) { set_event_latched(EVENT_BATTERY_TEMP_DEVIATION_HIGH, datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC); } else { diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index 71a37e38a..2e505a979 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -256,7 +256,7 @@ void reset_all_events() { events.level = EVENT_LEVEL_INFO; update_bms_status(); #ifdef DEBUG_LOG - logging.println("All events have been cleared."); + logging.println("All events have been cleared."); #endif } From 3def2fe5ed2aef2ac96646870fb228545adff78e Mon Sep 17 00:00:00 2001 From: Marijn van Galen Date: Tue, 4 Feb 2025 22:04:06 +0100 Subject: [PATCH 3/4] Change error to warning as agreed. --- Software/src/devboard/utils/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index 2e505a979..4354f873c 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -218,7 +218,7 @@ void init_events(void) { events.entries[EVENT_MQTT_DISCONNECT].level = EVENT_LEVEL_INFO; events.entries[EVENT_EQUIPMENT_STOP].level = EVENT_LEVEL_ERROR; events.entries[EVENT_SD_INIT_FAILED].level = EVENT_LEVEL_WARNING; - events.entries[EVENT_BATTERY_TEMP_DEVIATION_HIGH].level = EVENT_LEVEL_ERROR; + events.entries[EVENT_BATTERY_TEMP_DEVIATION_HIGH].level = EVENT_LEVEL_WARNING; events.entries[EVENT_EEPROM_WRITE].log = false; // Don't log the logger... From 65f16b4c69297367965ec5fd276582121adc366d Mon Sep 17 00:00:00 2001 From: Marijn van Galen Date: Wed, 5 Feb 2025 10:02:42 +0100 Subject: [PATCH 4/4] take absolute value of temp difference --- Software/src/devboard/safety/safety.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Software/src/devboard/safety/safety.cpp b/Software/src/devboard/safety/safety.cpp index 4a98f806f..927f4bab3 100644 --- a/Software/src/devboard/safety/safety.cpp +++ b/Software/src/devboard/safety/safety.cpp @@ -41,7 +41,7 @@ void update_machineryprotection() { clear_event(EVENT_BATTERY_FROZEN); } - if (datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC > + if (labs(datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC) > BATTERY_MAX_TEMPERATURE_DEVIATION) { set_event_latched(EVENT_BATTERY_TEMP_DEVIATION_HIGH, datalayer.battery.status.temperature_max_dC - datalayer.battery.status.temperature_min_dC);