Refactor: Code cleanup and optimization

This commit is contained in:
amarofarinha 2024-09-13 22:22:57 +01:00
parent 2a4dcb3d63
commit 9d2a3be708
19 changed files with 27 additions and 79 deletions

View file

@ -376,10 +376,7 @@ void update_values_battery2() { //This function maps all the values fetched via
datalayer.battery2.status.soh_pptt = battery2_soh * 100;
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
if (battery2_BEV_available_power_longterm_discharge > 65000) {
datalayer.battery2.status.max_discharge_power_W = 65000;
} else {
@ -421,10 +418,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.soh_pptt = battery_soh * 100;
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = battery_BEV_available_power_longterm_discharge;
datalayer.battery.status.max_charge_power_W = battery_BEV_available_power_longterm_charge;
}

View file

@ -101,10 +101,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 10000; //TODO: Map from CAN later on
datalayer.battery.status.max_charge_power_W = 10000; //TODO: Map from CAN later on
}

View file

@ -114,10 +114,7 @@ void update_values_battery() {
datalayer.battery.status.real_soc = x102_chg_session.StateOfCharge;
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 10000; //TODO: Map from CAN later on
datalayer.battery.status.max_charge_power_W = 1000;
}

View file

@ -48,10 +48,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
//We do not know the max charge/discharge power is sent by the battery. We hardcode value for now.
datalayer.battery.status.max_discharge_power_W = 10000; // 10kW //TODO: Fix when CAN is decoded
datalayer.battery.status.max_charge_power_W = 10000; // 10kW //TODO: Fix when CAN is decoded

View file

@ -89,10 +89,7 @@ void update_values_battery() {
datalayer.battery.status.temperature_max_dC = HVBattCellTempHottest * 10; // C to dC
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = HVBattDischargeContiniousPowerLimit * 10; // kWh+2 to W
datalayer.battery.status.max_charge_power_W =
HVBattChargeContiniousPowerLimit * 10; // kWh+2 to W (TODO: Check that scaling is right way)

View file

@ -310,10 +310,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
//datalayer.battery.status.max_charge_power_W = (uint16_t)allowedChargePower * 10; //From kW*100 to Watts
//The allowed charge power is not available. We hardcode this value for now
datalayer.battery.status.max_charge_power_W = MAXCHARGEPOWERALLOWED;

View file

@ -123,10 +123,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_charge_power_W = allowedChargePower * 10;
datalayer.battery.status.max_discharge_power_W = allowedDischargePower * 10;
}

View file

@ -64,10 +64,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = available_discharge_power * 10;
datalayer.battery.status.max_charge_power_W = available_charge_power * 10;
}

View file

@ -228,10 +228,7 @@ void update_values_battery() { /* This function maps all the values fetched via
}
}
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = (battery_Discharge_Power_Limit * 1000); //kW to W
datalayer.battery.status.max_charge_power_W = (battery_Charge_Power_Limit * 1000); //kW to W
}
@ -383,10 +380,7 @@ void update_values_battery2() { // Handle the values coming in from battery #2
}
}
if (emulator_pause_request_ON) {
datalayer.battery2.status.max_discharge_power_W = 0;
datalayer.battery2.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery2.status.max_discharge_power_W = (battery2_Discharge_Power_Limit * 1000); //kW to W
datalayer.battery2.status.max_charge_power_W = (battery2_Charge_Power_Limit * 1000); //kW to W
}

View file

@ -63,10 +63,7 @@ void update_values_battery() {
datalayer.battery.status.active_power_W = //Power in watts, Negative = charging batt
((datalayer.battery.status.voltage_dV * datalayer.battery.status.current_dA) / 100);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_charge_power_W = (max_charge_current * (voltage_dV / 10));
datalayer.battery.status.max_discharge_power_W = (-max_discharge_current * (voltage_dV / 10));
}

View file

@ -87,10 +87,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W =
(LB_Discharge_Power_Limit * 500); //Convert value fetched from battery to watts

View file

@ -47,10 +47,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 5000; //TODO: Take from CAN
datalayer.battery.status.max_charge_power_W = LB_Charge_Power_W;
}

View file

@ -81,10 +81,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = allowedDischargePower * 10;
datalayer.battery.status.max_charge_power_W = allowedChargePower * 10;
}

View file

@ -278,10 +278,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.remaining_capacity_Wh = static_cast<uint32_t>(
(static_cast<double>(datalayer.battery.status.real_soc) / 10000) * datalayer.battery.info.total_capacity_Wh);
if (emulator_pause_request_ON) {
datalayer.battery.status.max_charge_power_W = 0;
datalayer.battery.status.max_discharge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
// Define the allowed discharge power
datalayer.battery.status.max_discharge_power_W = (battery_max_discharge_current * battery_volts);
// Cap the allowed discharge power if higher than the maximum discharge power allowed

View file

@ -45,10 +45,7 @@ void update_values_battery() { /* This function puts fake values onto the parame
datalayer.battery.status.temperature_max_dC = 60; // 6.0*C
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 5000; // 5kW
datalayer.battery.status.max_charge_power_W = 5000; // 5kW
}

View file

@ -83,10 +83,7 @@ void update_values_battery() { //This function maps all the values fetched via
datalayer.battery.status.current_dA = BATT_I * 10;
datalayer.battery.status.remaining_capacity_Wh = remaining_capacity;
if (emulator_pause_request_ON) {
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
} else {
if (!emulator_pause_request_ON) {
//datalayer.battery.status.max_discharge_power_W = HvBattPwrLimDchaSoft * 1000; // Use power limit reported from BMS, not trusted ATM
datalayer.battery.status.max_discharge_power_W = 30000;
datalayer.battery.status.max_charge_power_W = 30000;

View file

@ -117,7 +117,7 @@ static void publish_common_info(void) {
doc["pause_status"] = get_emulator_pause_status();
//only publish these values if BMS is active and we are comunication with the battery (can send CAN messages to the battery)
if (datalayer.battery.status.bms_status == ACTIVE && can_send_CAN) {
if (datalayer.battery.status.bms_status == ACTIVE && can_send_CAN && millis() > BOOTUP_TIME) {
doc["SOC"] = ((float)datalayer.battery.status.reported_soc) / 100.0;
doc["SOC_real"] = ((float)datalayer.battery.status.real_soc) / 100.0;
doc["state_of_health"] = ((float)datalayer.battery.status.soh_pptt) / 100.0;

View file

@ -189,6 +189,7 @@ void setBatteryPause(bool pause_battery, bool pause_CAN) {
set_event(EVENT_PAUSE_BEGIN, 1);
emulator_pause_request_ON = true;
emulator_pause_status = PAUSING;
datalayer.battery.status.max_discharge_power_W = 0;
datalayer.battery.status.max_charge_power_W = 0;
#ifdef DOUBLE_BATTERY
@ -196,10 +197,9 @@ void setBatteryPause(bool pause_battery, bool pause_CAN) {
datalayer.battery2.status.max_charge_power_W = 0;
#endif
emulator_pause_status = PAUSING;
} else {
clear_event(EVENT_PAUSE_BEGIN);
set_event(EVENT_PAUSE_END, 0);
set_event(EVENT_PAUSE_END, 1);
emulator_pause_request_ON = false;
emulator_pause_CAN_send_ON = false;
emulator_pause_status = RESUMING;

View file

@ -942,10 +942,12 @@ void onOTAProgress(size_t current, size_t final) {
void onOTAEnd(bool success) {
//try to Resume the battery
setBatteryPause(false, false);
ota_active = false;
clear_event(EVENT_OTA_UPDATE);
// Log when OTA has finished
if (success) {
// a reboot will be done by the OTA library. no need to do anything here
#ifdef DEBUG_VIA_USB
Serial.println("OTA update finished successfully!");
#endif // DEBUG_VIA_USB
@ -953,9 +955,9 @@ void onOTAEnd(bool success) {
#ifdef DEBUG_VIA_USB
Serial.println("There was an error during OTA update!");
#endif // DEBUG_VIA_USB
//try to Resume the battery pause and CAN communication
setBatteryPause(false, false);
}
ota_active = false;
clear_event(EVENT_OTA_UPDATE);
}
template <typename T> // This function makes power values appear as W when under 1000, and kW when over