mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 17:59:27 +02:00
Refactor: Code cleanup and optimization
This commit is contained in:
parent
2a4dcb3d63
commit
9d2a3be708
19 changed files with 27 additions and 79 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue