From 047fc04468969ff3fde70f285c7c010978173474 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sat, 4 Jan 2025 23:15:14 +1300 Subject: [PATCH 01/26] Add 0x72A BMS_serialNumber Fix BrickModelTMax mistake. --- Software/src/battery/TESLA-BATTERY.cpp | 25 +++++++++++++++++++ Software/src/datalayer/datalayer_extended.h | 1 + .../webserver/advanced_battery_html.cpp | 7 +++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 3f31068d5..7d266affa 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -117,6 +117,8 @@ static bool battery_fcCtrsOpenRequested = false; // Change to bool static uint8_t battery_fcCtrsRequestStatus = 0; static bool battery_fcCtrsResetRequestRequired = false; // Change to bool static bool battery_fcLinkAllowedToEnergize = false; // Change to bool +//0x72A: BMS_serialNumber +static uint8_t BMS_SerialNumber[14] = {0}; // Stores raw HEX values for ASCII chars //0x212: 530 BMS_status static bool battery_BMS_hvacPowerRequest = false; //Change to bool static bool battery_BMS_notEnoughPowerForDrive = false; //Change to bool @@ -917,6 +919,8 @@ void update_values_battery() { //This function maps all the values fetched via datalayer_extended.tesla.battery_packCtrsRequestStatus = battery_packCtrsRequestStatus; datalayer_extended.tesla.battery_packCtrsResetRequestRequired = battery_packCtrsResetRequestRequired; datalayer_extended.tesla.battery_dcLinkAllowedToEnergize = battery_dcLinkAllowedToEnergize; + //0x72A + memcpy(datalayer_extended.tesla.BMS_SerialNumber, BMS_SerialNumber, sizeof(BMS_SerialNumber)); //0x2B4 datalayer_extended.tesla.battery_dcdcLvBusVolt = battery_dcdcLvBusVolt; datalayer_extended.tesla.battery_dcdcHvBusVolt = battery_dcdcHvBusVolt; @@ -1804,6 +1808,27 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { battery_BMS_a180_SW_ECU_reset_blocked = ((rx_frame.data.u8[7] >> 7) & (0x01U)); //63|1@1+ (1,0) [0|0] "" X } break; + case 0x72A: //1834 ID72ABMS_serialNumber +//Work in progress to display BMS Serial Number in ASCII: 00 54 47 33 32 31 32 30 (mux 0) .TG32120 + 01 32 30 30 33 41 48 58 (mux 1) .2003AHX = TG321202003AHX + if (rx_frame.data.u8[0] == 0x00) { + BMS_SerialNumber[1] = rx_frame.data.u8[1]; + BMS_SerialNumber[2] = rx_frame.data.u8[2]; + BMS_SerialNumber[3] = rx_frame.data.u8[3]; + BMS_SerialNumber[4] = rx_frame.data.u8[4]; + BMS_SerialNumber[5] = rx_frame.data.u8[5]; + BMS_SerialNumber[6] = rx_frame.data.u8[6]; + BMS_SerialNumber[7] = rx_frame.data.u8[7]; + } + if (rx_frame.data.u8[0] == 0x01) { + BMS_SerialNumber[8] = rx_frame.data.u8[1]; + BMS_SerialNumber[9] = rx_frame.data.u8[2]; + BMS_SerialNumber[10] = rx_frame.data.u8[3]; + BMS_SerialNumber[11] = rx_frame.data.u8[4]; + BMS_SerialNumber[12] = rx_frame.data.u8[5]; + BMS_SerialNumber[13] = rx_frame.data.u8[6]; + BMS_SerialNumber[14] = rx_frame.data.u8[7]; + } + break; default: break; } diff --git a/Software/src/datalayer/datalayer_extended.h b/Software/src/datalayer/datalayer_extended.h index 3148194ea..1409d1d11 100644 --- a/Software/src/datalayer/datalayer_extended.h +++ b/Software/src/datalayer/datalayer_extended.h @@ -221,6 +221,7 @@ typedef struct { uint8_t battery_packCtrsRequestStatus = 0; bool battery_packCtrsResetRequestRequired = false; bool battery_dcLinkAllowedToEnergize = false; + uint8_t BMS_SerialNumber[15] = {0}; //stores raw HEX values for ASCII chars uint8_t battery_beginning_of_life = 0; uint8_t battery_battTempPct = 0; uint16_t battery_dcdcLvBusVolt = 0; diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 308d22a74..f4afedf60 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -366,7 +366,7 @@ String advanced_battery_processor(const String& var) { float soc_ui = static_cast(datalayer_extended.tesla.battery_soc_ui) * 0.1; float BrickVoltageMax = static_cast(datalayer_extended.tesla.battery_BrickVoltageMax) * 0.002; float BrickVoltageMin = static_cast(datalayer_extended.tesla.battery_BrickVoltageMin) * 0.002; - float BrickModelTMax = static_cast(datalayer_extended.tesla.battery_BrickTempMinNum) * 0.5 - 40; + float BrickModelTMax = static_cast(datalayer_extended.tesla.battery_BrickModelTMax) * 0.5 - 40; float BrickModelTMin = static_cast(datalayer_extended.tesla.battery_BrickModelTMin) * 0.5 - 40; float isolationResistance = static_cast(datalayer_extended.tesla.battery_BMS_isolationResistance) * 10; float PCS_dcdcMaxOutputCurrentAllowed = @@ -519,6 +519,11 @@ String advanced_battery_processor(const String& var) { content += "

DC Link Allowed to Energize: " + String(noYes[datalayer_extended.tesla.battery_dcLinkAllowedToEnergize]) + "

"; //bool + char readableSerialNumber[16]; // One extra space for null terminator + memcpy(readableSerialNumber, datalayer_extended.tesla.BMS_SerialNumber, + sizeof(datalayer_extended.tesla.BMS_SerialNumber)); + readableSerialNumber[15] = '\0'; // Null terminate the string + content += "

BMS Serial number: " + String(readableSerialNumber) + "

"; // Comment what data you would like to dislay, order can be changed. //0x292 658 BMS_socStates content += "

Battery Beginning of Life: " + String(beginning_of_life) + " KWh

"; From f9209dbf688c6db674d17813e712c4a6a14ecbe4 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sat, 4 Jan 2025 23:16:48 +1300 Subject: [PATCH 02/26] format --- Software/src/battery/TESLA-BATTERY.cpp | 2 +- Software/src/datalayer/datalayer_extended.h | 2 +- Software/src/devboard/webserver/advanced_battery_html.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 7d266affa..437d5e100 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1809,7 +1809,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { } break; case 0x72A: //1834 ID72ABMS_serialNumber -//Work in progress to display BMS Serial Number in ASCII: 00 54 47 33 32 31 32 30 (mux 0) .TG32120 + 01 32 30 30 33 41 48 58 (mux 1) .2003AHX = TG321202003AHX + //Work in progress to display BMS Serial Number in ASCII: 00 54 47 33 32 31 32 30 (mux 0) .TG32120 + 01 32 30 30 33 41 48 58 (mux 1) .2003AHX = TG321202003AHX if (rx_frame.data.u8[0] == 0x00) { BMS_SerialNumber[1] = rx_frame.data.u8[1]; BMS_SerialNumber[2] = rx_frame.data.u8[2]; diff --git a/Software/src/datalayer/datalayer_extended.h b/Software/src/datalayer/datalayer_extended.h index 1409d1d11..65c60d473 100644 --- a/Software/src/datalayer/datalayer_extended.h +++ b/Software/src/datalayer/datalayer_extended.h @@ -221,7 +221,7 @@ typedef struct { uint8_t battery_packCtrsRequestStatus = 0; bool battery_packCtrsResetRequestRequired = false; bool battery_dcLinkAllowedToEnergize = false; - uint8_t BMS_SerialNumber[15] = {0}; //stores raw HEX values for ASCII chars + uint8_t BMS_SerialNumber[15] = {0}; //stores raw HEX values for ASCII chars uint8_t battery_beginning_of_life = 0; uint8_t battery_battTempPct = 0; uint16_t battery_dcdcLvBusVolt = 0; diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index f4afedf60..5ab77412f 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -518,7 +518,7 @@ String advanced_battery_processor(const String& var) { String(noYes[datalayer_extended.tesla.battery_packCtrsResetRequestRequired]) + ""; //bool content += "

DC Link Allowed to Energize: " + String(noYes[datalayer_extended.tesla.battery_dcLinkAllowedToEnergize]) + - "

"; //bool + ""; //bool char readableSerialNumber[16]; // One extra space for null terminator memcpy(readableSerialNumber, datalayer_extended.tesla.BMS_SerialNumber, sizeof(datalayer_extended.tesla.BMS_SerialNumber)); From 64af15890a9a5a2e04a62ae4bdc03178f2002cba Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Mon, 6 Jan 2025 14:16:06 +1300 Subject: [PATCH 03/26] SN place correction Uncomment false error log SW messages --- Software/src/battery/TESLA-BATTERY.cpp | 79 ++++++++++++------- .../webserver/advanced_battery_html.cpp | 14 ++-- 2 files changed, 58 insertions(+), 35 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 437d5e100..834a09dea 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -503,6 +503,8 @@ static bool battery2_fcCtrsOpenRequested = false; static uint8_t battery2_fcCtrsRequestStatus = 0; static bool battery2_fcCtrsResetRequestRequired = false; static bool battery2_fcLinkAllowedToEnergize = false; +//0x72A +memcpy(datalayer_extended.tesla.BMS2_SerialNumber, BMS2_SerialNumber, sizeof(BMS2_SerialNumber)); //0x212: 530 BMS_status static bool battery2_BMS_hvacPowerRequest = false; static bool battery2_BMS_notEnoughPowerForDrive = false; @@ -1811,22 +1813,22 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { case 0x72A: //1834 ID72ABMS_serialNumber //Work in progress to display BMS Serial Number in ASCII: 00 54 47 33 32 31 32 30 (mux 0) .TG32120 + 01 32 30 30 33 41 48 58 (mux 1) .2003AHX = TG321202003AHX if (rx_frame.data.u8[0] == 0x00) { - BMS_SerialNumber[1] = rx_frame.data.u8[1]; - BMS_SerialNumber[2] = rx_frame.data.u8[2]; - BMS_SerialNumber[3] = rx_frame.data.u8[3]; - BMS_SerialNumber[4] = rx_frame.data.u8[4]; - BMS_SerialNumber[5] = rx_frame.data.u8[5]; - BMS_SerialNumber[6] = rx_frame.data.u8[6]; - BMS_SerialNumber[7] = rx_frame.data.u8[7]; + BMS_SerialNumber[0] = rx_frame.data.u8[1]; + BMS_SerialNumber[1] = rx_frame.data.u8[2]; + BMS_SerialNumber[2] = rx_frame.data.u8[3]; + BMS_SerialNumber[3] = rx_frame.data.u8[4]; + BMS_SerialNumber[4] = rx_frame.data.u8[5]; + BMS_SerialNumber[5] = rx_frame.data.u8[6]; + BMS_SerialNumber[6] = rx_frame.data.u8[7]; } if (rx_frame.data.u8[0] == 0x01) { - BMS_SerialNumber[8] = rx_frame.data.u8[1]; - BMS_SerialNumber[9] = rx_frame.data.u8[2]; - BMS_SerialNumber[10] = rx_frame.data.u8[3]; - BMS_SerialNumber[11] = rx_frame.data.u8[4]; - BMS_SerialNumber[12] = rx_frame.data.u8[5]; - BMS_SerialNumber[13] = rx_frame.data.u8[6]; - BMS_SerialNumber[14] = rx_frame.data.u8[7]; + BMS_SerialNumber[7] = rx_frame.data.u8[1]; + BMS_SerialNumber[8] = rx_frame.data.u8[2]; + BMS_SerialNumber[9] = rx_frame.data.u8[3]; + BMS_SerialNumber[10] = rx_frame.data.u8[4]; + BMS_SerialNumber[11] = rx_frame.data.u8[5]; + BMS_SerialNumber[12] = rx_frame.data.u8[6]; + BMS_SerialNumber[13] = rx_frame.data.u8[7]; } break; default: @@ -2456,6 +2458,27 @@ void handle_incoming_can_frame_battery2(CAN_frame rx_frame) { battery2_BMS_a180_SW_ECU_reset_blocked = ((rx_frame.data.u8[7] >> 7) & (0x01U)); //63|1@1+ (1,0) [0|0] "" X } break; + case 0x72A: //1834 ID72ABMS_serialNumber + //Work in progress to display BMS Serial Number in ASCII: 00 54 47 33 32 31 32 30 (mux 0) .TG32120 + 01 32 30 30 33 41 48 58 (mux 1) .2003AHX = TG321202003AHX + if (rx_frame.data.u8[0] == 0x00) { + BMS2_SerialNumber[0] = rx_frame.data.u8[1]; + BMS2_SerialNumber[1] = rx_frame.data.u8[2]; + BMS2_SerialNumber[2] = rx_frame.data.u8[3]; + BMS2_SerialNumber[3] = rx_frame.data.u8[4]; + BMS2_SerialNumber[4] = rx_frame.data.u8[5]; + BMS2_SerialNumber[5] = rx_frame.data.u8[6]; + BMS2_SerialNumber[6] = rx_frame.data.u8[7]; + } + if (rx_frame.data.u8[0] == 0x01) { + BMS2_SerialNumber[7] = rx_frame.data.u8[1]; + BMS2_SerialNumber[8] = rx_frame.data.u8[2]; + BMS2_SerialNumber[9] = rx_frame.data.u8[3]; + BMS2_SerialNumber[10] = rx_frame.data.u8[4]; + BMS2_SerialNumber[11] = rx_frame.data.u8[5]; + BMS2_SerialNumber[12] = rx_frame.data.u8[6]; + BMS2_SerialNumber[13] = rx_frame.data.u8[7]; + } + break; default: break; } @@ -2820,7 +2843,7 @@ void printFaultCodesIfActive() { printDebugIfActive(battery_BMS_a018_SW_Brick_UV, "ERROR: BMS_a018_SW_Brick_UV"); printDebugIfActive(battery_BMS_a019_SW_Module_OT, "ERROR: BMS_a019_SW_Module_OT"); printDebugIfActive(battery_BMS_a021_SW_Dr_Limits_Regulation, "ERROR: BMS_a021_SW_Dr_Limits_Regulation"); - printDebugIfActive(battery_BMS_a022_SW_Over_Current, "ERROR: BMS_a022_SW_Over_Current"); + //printDebugIfActive(battery_BMS_a022_SW_Over_Current, "ERROR: BMS_a022_SW_Over_Current"); printDebugIfActive(battery_BMS_a023_SW_Stack_OV, "ERROR: BMS_a023_SW_Stack_OV"); printDebugIfActive(battery_BMS_a024_SW_Islanded_Brick, "ERROR: BMS_a024_SW_Islanded_Brick"); printDebugIfActive(battery_BMS_a025_SW_PwrBalance_Anomaly, "ERROR: BMS_a025_SW_PwrBalance_Anomaly"); @@ -2838,7 +2861,7 @@ void printFaultCodesIfActive() { printDebugIfActive(battery_BMS_a046_SW_Task_Stack_Usage, "ERROR: BMS_a046_SW_Task_Stack_Usage"); printDebugIfActive(battery_BMS_a047_SW_Task_Stack_Overflow, "ERROR: BMS_a047_SW_Task_Stack_Overflow"); printDebugIfActive(battery_BMS_a048_SW_Log_Upload_Request, "ERROR: BMS_a048_SW_Log_Upload_Request"); - printDebugIfActive(battery_BMS_a050_SW_Brick_Voltage_MIA, "ERROR: BMS_a050_SW_Brick_Voltage_MIA"); + //printDebugIfActive(battery_BMS_a050_SW_Brick_Voltage_MIA, "ERROR: BMS_a050_SW_Brick_Voltage_MIA"); printDebugIfActive(battery_BMS_a051_SW_HVC_Vref_Bad, "ERROR: BMS_a051_SW_HVC_Vref_Bad"); printDebugIfActive(battery_BMS_a052_SW_PCS_MIA, "ERROR: BMS_a052_SW_PCS_MIA"); printDebugIfActive(battery_BMS_a053_SW_ThermalModel_Sanity, "ERROR: BMS_a053_SW_ThermalModel_Sanity"); @@ -2861,10 +2884,10 @@ void printFaultCodesIfActive() { printDebugIfActive(battery_BMS_a087_SW_Feim_Test_Blocked, "ERROR: BMS_a087_SW_Feim_Test_Blocked"); printDebugIfActive(battery_BMS_a088_SW_VcFront_MIA_InDrive, "ERROR: BMS_a088_SW_VcFront_MIA_InDrive"); printDebugIfActive(battery_BMS_a089_SW_VcFront_MIA, "ERROR: BMS_a089_SW_VcFront_MIA"); - printDebugIfActive(battery_BMS_a090_SW_Gateway_MIA, "ERROR: BMS_a090_SW_Gateway_MIA"); - printDebugIfActive(battery_BMS_a091_SW_ChargePort_MIA, "ERROR: BMS_a091_SW_ChargePort_MIA"); - printDebugIfActive(battery_BMS_a092_SW_ChargePort_Mia_On_Hv, "ERROR: BMS_a092_SW_ChargePort_Mia_On_Hv"); - printDebugIfActive(battery_BMS_a094_SW_Drive_Inverter_MIA, "ERROR: BMS_a094_SW_Drive_Inverter_MIA"); + //printDebugIfActive(battery_BMS_a090_SW_Gateway_MIA, "ERROR: BMS_a090_SW_Gateway_MIA"); + //printDebugIfActive(battery_BMS_a091_SW_ChargePort_MIA, "ERROR: BMS_a091_SW_ChargePort_MIA"); + //printDebugIfActive(battery_BMS_a092_SW_ChargePort_Mia_On_Hv, "ERROR: BMS_a092_SW_ChargePort_Mia_On_Hv"); + //printDebugIfActive(battery_BMS_a094_SW_Drive_Inverter_MIA, "ERROR: BMS_a094_SW_Drive_Inverter_MIA"); printDebugIfActive(battery_BMS_a099_SW_BMB_Communication, "ERROR: BMS_a099_SW_BMB_Communication"); printDebugIfActive(battery_BMS_a105_SW_One_Module_Tsense, "ERROR: BMS_a105_SW_One_Module_Tsense"); printDebugIfActive(battery_BMS_a106_SW_All_Module_Tsense, "ERROR: BMS_a106_SW_All_Module_Tsense"); @@ -2901,7 +2924,7 @@ void printFaultCodesIfActive() { printDebugIfActive(battery_BMS_a167_SW_FC_Partial_Weld, "ERROR: BMS_a167_SW_FC_Partial_Weld"); printDebugIfActive(battery_BMS_a168_SW_FC_Full_Weld, "ERROR: BMS_a168_SW_FC_Full_Weld"); printDebugIfActive(battery_BMS_a169_SW_FC_Pack_Weld, "ERROR: BMS_a169_SW_FC_Pack_Weld"); - printDebugIfActive(battery_BMS_a170_SW_Limp_Mode, "ERROR: BMS_a170_SW_Limp_Mode"); + //printDebugIfActive(battery_BMS_a170_SW_Limp_Mode, "ERROR: BMS_a170_SW_Limp_Mode"); printDebugIfActive(battery_BMS_a171_SW_Stack_Voltage_Sense, "ERROR: BMS_a171_SW_Stack_Voltage_Sense"); printDebugIfActive(battery_BMS_a174_SW_Charge_Failure, "ERROR: BMS_a174_SW_Charge_Failure"); printDebugIfActive(battery_BMS_a176_SW_GracefulPowerOff, "ERROR: BMS_a176_SW_GracefulPowerOff"); @@ -2990,7 +3013,7 @@ void printFaultCodesIfActive_battery2() { printDebugIfActive(battery2_BMS_a018_SW_Brick_UV, "ERROR: BMS_a018_SW_Brick_UV"); printDebugIfActive(battery2_BMS_a019_SW_Module_OT, "ERROR: BMS_a019_SW_Module_OT"); printDebugIfActive(battery2_BMS_a021_SW_Dr_Limits_Regulation, "ERROR: BMS_a021_SW_Dr_Limits_Regulation"); - printDebugIfActive(battery2_BMS_a022_SW_Over_Current, "ERROR: BMS_a022_SW_Over_Current"); + //printDebugIfActive(battery2_BMS_a022_SW_Over_Current, "ERROR: BMS_a022_SW_Over_Current"); printDebugIfActive(battery2_BMS_a023_SW_Stack_OV, "ERROR: BMS_a023_SW_Stack_OV"); printDebugIfActive(battery2_BMS_a024_SW_Islanded_Brick, "ERROR: BMS_a024_SW_Islanded_Brick"); printDebugIfActive(battery2_BMS_a025_SW_PwrBalance_Anomaly, "ERROR: BMS_a025_SW_PwrBalance_Anomaly"); @@ -3008,7 +3031,7 @@ void printFaultCodesIfActive_battery2() { printDebugIfActive(battery2_BMS_a046_SW_Task_Stack_Usage, "ERROR: BMS_a046_SW_Task_Stack_Usage"); printDebugIfActive(battery2_BMS_a047_SW_Task_Stack_Overflow, "ERROR: BMS_a047_SW_Task_Stack_Overflow"); printDebugIfActive(battery2_BMS_a048_SW_Log_Upload_Request, "ERROR: BMS_a048_SW_Log_Upload_Request"); - printDebugIfActive(battery2_BMS_a050_SW_Brick_Voltage_MIA, "ERROR: BMS_a050_SW_Brick_Voltage_MIA"); + //printDebugIfActive(battery2_BMS_a050_SW_Brick_Voltage_MIA, "ERROR: BMS_a050_SW_Brick_Voltage_MIA"); printDebugIfActive(battery2_BMS_a051_SW_HVC_Vref_Bad, "ERROR: BMS_a051_SW_HVC_Vref_Bad"); printDebugIfActive(battery2_BMS_a052_SW_PCS_MIA, "ERROR: BMS_a052_SW_PCS_MIA"); printDebugIfActive(battery2_BMS_a053_SW_ThermalModel_Sanity, "ERROR: BMS_a053_SW_ThermalModel_Sanity"); @@ -3031,10 +3054,10 @@ void printFaultCodesIfActive_battery2() { printDebugIfActive(battery2_BMS_a087_SW_Feim_Test_Blocked, "ERROR: BMS_a087_SW_Feim_Test_Blocked"); printDebugIfActive(battery2_BMS_a088_SW_VcFront_MIA_InDrive, "ERROR: BMS_a088_SW_VcFront_MIA_InDrive"); printDebugIfActive(battery2_BMS_a089_SW_VcFront_MIA, "ERROR: BMS_a089_SW_VcFront_MIA"); - printDebugIfActive(battery2_BMS_a090_SW_Gateway_MIA, "ERROR: BMS_a090_SW_Gateway_MIA"); - printDebugIfActive(battery2_BMS_a091_SW_ChargePort_MIA, "ERROR: BMS_a091_SW_ChargePort_MIA"); - printDebugIfActive(battery2_BMS_a092_SW_ChargePort_Mia_On_Hv, "ERROR: BMS_a092_SW_ChargePort_Mia_On_Hv"); - printDebugIfActive(battery2_BMS_a094_SW_Drive_Inverter_MIA, "ERROR: BMS_a094_SW_Drive_Inverter_MIA"); + //printDebugIfActive(battery2_BMS_a090_SW_Gateway_MIA, "ERROR: BMS_a090_SW_Gateway_MIA"); + //printDebugIfActive(battery2_BMS_a091_SW_ChargePort_MIA, "ERROR: BMS_a091_SW_ChargePort_MIA"); + //printDebugIfActive(battery2_BMS_a092_SW_ChargePort_Mia_On_Hv, "ERROR: BMS_a092_SW_ChargePort_Mia_On_Hv"); + //printDebugIfActive(battery2_BMS_a094_SW_Drive_Inverter_MIA, "ERROR: BMS_a094_SW_Drive_Inverter_MIA"); printDebugIfActive(battery2_BMS_a099_SW_BMB_Communication, "ERROR: BMS_a099_SW_BMB_Communication"); printDebugIfActive(battery2_BMS_a105_SW_One_Module_Tsense, "ERROR: BMS_a105_SW_One_Module_Tsense"); printDebugIfActive(battery2_BMS_a106_SW_All_Module_Tsense, "ERROR: BMS_a106_SW_All_Module_Tsense"); @@ -3071,7 +3094,7 @@ void printFaultCodesIfActive_battery2() { printDebugIfActive(battery2_BMS_a167_SW_FC_Partial_Weld, "ERROR: BMS_a167_SW_FC_Partial_Weld"); printDebugIfActive(battery2_BMS_a168_SW_FC_Full_Weld, "ERROR: BMS_a168_SW_FC_Full_Weld"); printDebugIfActive(battery2_BMS_a169_SW_FC_Pack_Weld, "ERROR: BMS_a169_SW_FC_Pack_Weld"); - printDebugIfActive(battery2_BMS_a170_SW_Limp_Mode, "ERROR: BMS_a170_SW_Limp_Mode"); + //printDebugIfActive(battery2_BMS_a170_SW_Limp_Mode, "ERROR: BMS_a170_SW_Limp_Mode"); printDebugIfActive(battery2_BMS_a171_SW_Stack_Voltage_Sense, "ERROR: BMS_a171_SW_Stack_Voltage_Sense"); printDebugIfActive(battery2_BMS_a174_SW_Charge_Failure, "ERROR: BMS_a174_SW_Charge_Failure"); printDebugIfActive(battery2_BMS_a176_SW_GracefulPowerOff, "ERROR: BMS_a176_SW_GracefulPowerOff"); diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 644ad3dc8..c7ceedfc0 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -532,10 +532,10 @@ String advanced_battery_processor(const String& var) { content += "

DC Link Allowed to Energize: " + String(noYes[datalayer_extended.tesla.battery_dcLinkAllowedToEnergize]) + "

"; //bool - char readableSerialNumber[16]; // One extra space for null terminator + char readableSerialNumber[15]; // One extra space for null terminator memcpy(readableSerialNumber, datalayer_extended.tesla.BMS_SerialNumber, sizeof(datalayer_extended.tesla.BMS_SerialNumber)); - readableSerialNumber[15] = '\0'; // Null terminate the string + readableSerialNumber[14] = '\0'; // Null terminate the string content += "

BMS Serial number: " + String(readableSerialNumber) + "

"; // Comment what data you would like to dislay, order can be changed. //0x292 658 BMS_socStates @@ -655,18 +655,18 @@ String advanced_battery_processor(const String& var) { content += "

Brick Voltage Min: " + String(BrickVoltageMin) + " V

"; content += "

Brick Temp Max Num: " + String(datalayer_extended.tesla.battery_BrickTempMaxNum) + "

"; content += "

Brick Temp Min Num: " + String(datalayer_extended.tesla.battery_BrickTempMinNum) + "

"; - content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

"; - content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

"; + //content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

"; + //content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

"; //0x252 594 BMS_powerAvailable content += "

Max Regen Power: " + String(BMS_maxRegenPower) + " KW

"; content += "

Max Discharge Power: " + String(BMS_maxDischargePower) + " KW

"; content += "

Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh

"; - content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; - content += "

Not Enough Power For Heat Pump: " + + //content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; + //content += "

Not Enough Power For Heat Pump: " + String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + "

"; //bool content += "

Power Limit State: " + String(BMS_powerLimitState[datalayer_extended.tesla.BMS_powerLimitState]) + "

"; - content += "

Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "

"; + //content += "

Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "

"; //0x312 786 BMS_thermalStatus content += "

Power Dissipation: " + String(BMS_powerDissipation) + " kW

"; content += "

Flow Request: " + String(BMS_flowRequest) + " LPM

"; From 4168cc02d58644ebf06723ab697728b34b6c4185 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Mon, 6 Jan 2025 14:17:09 +1300 Subject: [PATCH 04/26] format --- Software/src/battery/TESLA-BATTERY.cpp | 2 +- Software/src/devboard/webserver/advanced_battery_html.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 834a09dea..0e3e723bb 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -2458,7 +2458,7 @@ void handle_incoming_can_frame_battery2(CAN_frame rx_frame) { battery2_BMS_a180_SW_ECU_reset_blocked = ((rx_frame.data.u8[7] >> 7) & (0x01U)); //63|1@1+ (1,0) [0|0] "" X } break; - case 0x72A: //1834 ID72ABMS_serialNumber + case 0x72A: //1834 ID72ABMS_serialNumber //Work in progress to display BMS Serial Number in ASCII: 00 54 47 33 32 31 32 30 (mux 0) .TG32120 + 01 32 30 30 33 41 48 58 (mux 1) .2003AHX = TG321202003AHX if (rx_frame.data.u8[0] == 0x00) { BMS2_SerialNumber[0] = rx_frame.data.u8[1]; diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index c7ceedfc0..361e666b9 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -663,7 +663,7 @@ String advanced_battery_processor(const String& var) { content += "

Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh

"; //content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; //content += "

Not Enough Power For Heat Pump: " + - String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + "

"; //bool + String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + ""; //bool content += "

Power Limit State: " + String(BMS_powerLimitState[datalayer_extended.tesla.BMS_powerLimitState]) + "

"; //content += "

Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "

"; From 39a94ba149126f3ec6be4ffee89f419ca971b8e2 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:42:41 +1300 Subject: [PATCH 05/26] uncomment data not useable --- .../webserver/advanced_battery_html.cpp | 45 +++++++++---------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 361e666b9..6b191f2bc 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -550,8 +550,8 @@ String advanced_battery_processor(const String& var) { content += "

PCS Hv Bus: " + String(dcdcHvBusVolt) + " V

"; content += "

PCS Lv Output: " + String(dcdcLvOutputCurrent) + " A

"; //0x2A4 676 PCS_thermalStatus - content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC

"; - content += "

PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC

"; + //content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC

"; // Not giving useable data + //content += "

PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC

"; // Not giving useable data //0x224 548 PCS_dcdcStatus content += "

Precharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcPrechargeStatus]) + @@ -640,9 +640,9 @@ String advanced_battery_processor(const String& var) { content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; content += "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool //0x392 BMS_packConfig - //content += "

packConfigMultiplexer: " + String(datalayer_extended.tesla.battery_packConfigMultiplexer) + "

"; - //content += "

moduleType: " + String(datalayer_extended.tesla.battery_moduleType) + "

"; - //content += "

reserveConfig: " + String(datalayer_extended.tesla.battery_reservedConfig) + "

"; + //content += "

packConfigMultiplexer: " + String(datalayer_extended.tesla.battery_packConfigMultiplexer) + "

"; // Not giving useable data + //content += "

moduleType: " + String(datalayer_extended.tesla.battery_moduleType) + "

"; // Not giving useable data + //content += "

reserveConfig: " + String(datalayer_extended.tesla.battery_reservedConfig) + "

"; // Not giving useable data content += "

Battery Pack Mass: " + String(packMass) + " KG

"; content += "

Platform Max Bus Voltage: " + String(platformMaxBusVoltage) + " V

"; //0x2D2 722 BMSVAlimits @@ -661,12 +661,11 @@ String advanced_battery_processor(const String& var) { content += "

Max Regen Power: " + String(BMS_maxRegenPower) + " KW

"; content += "

Max Discharge Power: " + String(BMS_maxDischargePower) + " KW

"; content += "

Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh

"; - //content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; - //content += "

Not Enough Power For Heat Pump: " + - String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + "

"; //bool + //content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; // Not giving useable data + //content += "

Not Enough Power For Heat Pump: " + String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + "

"; // Not giving useable data content += "

Power Limit State: " + String(BMS_powerLimitState[datalayer_extended.tesla.BMS_powerLimitState]) + "

"; - //content += "

Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "

"; + //content += "

Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "

"; // Not giving useable data //0x312 786 BMS_thermalStatus content += "

Power Dissipation: " + String(BMS_powerDissipation) + " kW

"; content += "

Flow Request: " + String(BMS_flowRequest) + " LPM

"; @@ -735,32 +734,28 @@ String advanced_battery_processor(const String& var) { content += "

HVP_shuntHwMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntHwMia]) + "

"; //bool content += "

HVP_dcLinkVoltage: " + String(HVP_dcLinkVoltage) + " V

"; content += "

HVP_packVoltage: " + String(HVP_packVoltage) + " V

"; - content += "

HVP_fcLinkVoltage: " + String(HVP_fcLinkVoltage) + " V

"; + //content += "

HVP_fcLinkVoltage: " + String(HVP_fcLinkVoltage) + " V

"; // Not giving useable data content += "

HVP_packContVoltage: " + String(HVP_packContVoltage) + " V

"; content += "

HVP_packNegativeV: " + String(HVP_packNegativeV) + " V

"; content += "

HVP_packPositiveV: " + String(HVP_packPositiveV) + " V

"; content += "

HVP_pyroAnalog: " + String(HVP_pyroAnalog) + " V

"; content += "

HVP_dcLinkNegativeV: " + String(HVP_dcLinkNegativeV) + " V

"; content += "

HVP_dcLinkPositiveV: " + String(HVP_dcLinkPositiveV) + " V

"; - content += "

HVP_fcLinkNegativeV: " + String(HVP_fcLinkNegativeV) + " V

"; - content += "

HVP_fcContCoilCurrent: " + String(HVP_fcContCoilCurrent) + " A

"; - content += "

HVP_fcContVoltage: " + String(HVP_fcContVoltage) + " V

"; + //content += "

HVP_fcLinkNegativeV: " + String(HVP_fcLinkNegativeV) + " V

"; // Not giving useable data + //content += "

HVP_fcContCoilCurrent: " + String(HVP_fcContCoilCurrent) + " A

"; // Not giving useable data + //content += "

HVP_fcContVoltage: " + String(HVP_fcContVoltage) + " V

"; // Not giving useable data content += "

HVP_hvilInVoltage: " + String(HVP_hvilInVoltage) + " V

"; content += "

HVP_hvilOutVoltage: " + String(HVP_hvilOutVoltage) + " V

"; - content += "

HVP_fcLinkPositiveV: " + String(HVP_fcLinkPositiveV) + " V

"; + //content += "

HVP_fcLinkPositiveV: " + String(HVP_fcLinkPositiveV) + " V

"; // Not giving useable data content += "

HVP_packContCoilCurrent: " + String(HVP_packContCoilCurrent) + " A

"; content += "

HVP_battery12V: " + String(HVP_battery12V) + " V

"; - content += "

HVP_shuntRefVoltageDbg: " + String(HVP_shuntRefVoltageDbg) + " V

"; - content += "

HVP_shuntAuxCurrentDbg: " + String(HVP_shuntAuxCurrentDbg) + " A

"; - content += "

HVP_shuntBarTempDbg: " + String(HVP_shuntBarTempDbg) + " DegC

"; - content += "

HVP_shuntAsicTempDbg: " + String(HVP_shuntAsicTempDbg) + " DegC

"; - content += - "

HVP_shuntAuxCurrentStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntAuxCurrentStatus]) + - "

"; - content += - "

HVP_shuntBarTempStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntBarTempStatus]) + "

"; - content += "

HVP_shuntAsicTempStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntAsicTempStatus]) + - "

"; + //content += "

HVP_shuntRefVoltageDbg: " + String(HVP_shuntRefVoltageDbg) + " V

"; // Not giving useable data + //content += "

HVP_shuntAuxCurrentDbg: " + String(HVP_shuntAuxCurrentDbg) + " A

"; // Not giving useable data + //content += "

HVP_shuntBarTempDbg: " + String(HVP_shuntBarTempDbg) + " DegC

"; // Not giving useable data + //content += "

HVP_shuntAsicTempDbg: " + String(HVP_shuntAsicTempDbg) + " DegC

"; // Not giving useable data + //content += "

HVP_shuntAuxCurrentStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntAuxCurrentStatus]) + "

"; // Not giving useable data + //content += "

HVP_shuntBarTempStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntBarTempStatus]) + "

"; // Not giving useable data + //content += "

HVP_shuntAsicTempStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntAsicTempStatus]) + "

"; // Not giving useable data #endif From e1cb5a18b7db7dfce185f638a2d84a73b0a04ee3 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:08:56 +1300 Subject: [PATCH 06/26] Add BMS352_mux detect --- Software/src/battery/TESLA-BATTERY.cpp | 6 ++++-- Software/src/datalayer/datalayer_extended.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 0e3e723bb..bd717f802 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -32,6 +32,7 @@ static bool cellvoltagesRead = false; static uint32_t battery_total_discharge = 0; static uint32_t battery_total_charge = 0; //0x352: 850 BMS_energyStatus +static bool BMS352_mux = false; // variable to store when 0x352 mux is present static uint16_t battery_energy_buffer = 0; // kWh static uint16_t battery_energy_buffer_m1 = 0; // kWh static uint16_t battery_energy_to_charge_complete = 0; // kWh @@ -928,6 +929,7 @@ void update_values_battery() { //This function maps all the values fetched via datalayer_extended.tesla.battery_dcdcHvBusVolt = battery_dcdcHvBusVolt; datalayer_extended.tesla.battery_dcdcLvOutputCurrent = battery_dcdcLvOutputCurrent; //0x352 + datalayer_extended.tesla.BMS352_mux = BMS352_mux; datalayer_extended.tesla.battery_nominal_full_pack_energy = battery_nominal_full_pack_energy; datalayer_extended.tesla.battery_nominal_full_pack_energy_m0 = battery_nominal_full_pack_energy_m0; datalayer_extended.tesla.battery_nominal_energy_remaining = battery_nominal_energy_remaining; @@ -1164,7 +1166,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { switch (rx_frame.ID) { case 0x352: // 850 BMS_energyStatus newer BMS mux = (rx_frame.data.u8[0] & 0x02); //BMS_energyStatusIndex M : 0|2@1+ (1,0) [0|0] "" X - + if (mux <= 1) { BMS352_mux = true; } // autodetect when mux is used if (mux == 0) { battery_nominal_full_pack_energy_m0 = ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended @@ -1182,7 +1184,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { battery_energy_to_charge_complete_m1 = (rx_frame.data.u8[7] | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended } - if (mux == 2) {} + //if (mux == 2) {} // Additional information needed on this mux, example frame: 02 26 02 20 02 80 00 00 doesn't change // older BMS <2021 without mux battery_nominal_full_pack_energy = //BMS_nominalFullPackEnergy : 0|11@1+ (0.1,0) [0|204.6] "KWh" //((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)); diff --git a/Software/src/datalayer/datalayer_extended.h b/Software/src/datalayer/datalayer_extended.h index 2dc1f006f..b74f60fc6 100644 --- a/Software/src/datalayer/datalayer_extended.h +++ b/Software/src/datalayer/datalayer_extended.h @@ -238,6 +238,7 @@ typedef struct { uint16_t battery_dcdcLvBusVolt = 0; uint16_t battery_dcdcHvBusVolt = 0; uint16_t battery_dcdcLvOutputCurrent = 0; + bool BMS352_mux = false; // variable to store when 0x352 mux is present uint16_t battery_nominal_full_pack_energy = 0; uint16_t battery_nominal_full_pack_energy_m0 = 0; uint16_t battery_nominal_energy_remaining = 0; From 9b6e89a84a1d265c89f1bad04ee3cd7008fa6dde Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:10:01 +1300 Subject: [PATCH 07/26] format --- Software/src/battery/TESLA-BATTERY.cpp | 6 ++++-- Software/src/datalayer/datalayer_extended.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index bd717f802..22a9731bc 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -32,7 +32,7 @@ static bool cellvoltagesRead = false; static uint32_t battery_total_discharge = 0; static uint32_t battery_total_charge = 0; //0x352: 850 BMS_energyStatus -static bool BMS352_mux = false; // variable to store when 0x352 mux is present +static bool BMS352_mux = false; // variable to store when 0x352 mux is present static uint16_t battery_energy_buffer = 0; // kWh static uint16_t battery_energy_buffer_m1 = 0; // kWh static uint16_t battery_energy_to_charge_complete = 0; // kWh @@ -1166,7 +1166,9 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { switch (rx_frame.ID) { case 0x352: // 850 BMS_energyStatus newer BMS mux = (rx_frame.data.u8[0] & 0x02); //BMS_energyStatusIndex M : 0|2@1+ (1,0) [0|0] "" X - if (mux <= 1) { BMS352_mux = true; } // autodetect when mux is used + if (mux <= 1) { + BMS352_mux = true; + } // autodetect when mux is used if (mux == 0) { battery_nominal_full_pack_energy_m0 = ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended diff --git a/Software/src/datalayer/datalayer_extended.h b/Software/src/datalayer/datalayer_extended.h index b74f60fc6..66fbcf26b 100644 --- a/Software/src/datalayer/datalayer_extended.h +++ b/Software/src/datalayer/datalayer_extended.h @@ -238,7 +238,7 @@ typedef struct { uint16_t battery_dcdcLvBusVolt = 0; uint16_t battery_dcdcHvBusVolt = 0; uint16_t battery_dcdcLvOutputCurrent = 0; - bool BMS352_mux = false; // variable to store when 0x352 mux is present + bool BMS352_mux = false; // variable to store when 0x352 mux is present uint16_t battery_nominal_full_pack_energy = 0; uint16_t battery_nominal_full_pack_energy_m0 = 0; uint16_t battery_nominal_energy_remaining = 0; From 353c584b88e08a0a776671e8bbde007bba942a45 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:23:03 +1300 Subject: [PATCH 08/26] Update advanced_battery_html.cpp Add Button for Refresh and Export to .txt, not functioning yet --- .../src/devboard/webserver/advanced_battery_html.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 6b191f2bc..81a0b1c10 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -14,7 +14,8 @@ String advanced_battery_processor(const String& var) { "cursor: pointer; border-radius: 10px; }"; content += "button:hover { background-color: #3A4A52; }"; content += ""; - + content += " "; // Refresh before export + content += " "; // TO DO make this work content += ""; // Start a new block with a specific background color @@ -1193,7 +1194,12 @@ String advanced_battery_processor(const String& var) { content += "}"; content += "function goToMainPage() { window.location.href = '/'; }"; content += ""; - + // Additial functions added + content += ""; + return content; } return String(); From e61d34f0e9195d3a8f1ffee0b1e9cfc4390e254e Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:24:43 +1300 Subject: [PATCH 09/26] Update advanced_battery_html.cpp Format --- Software/src/devboard/webserver/advanced_battery_html.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 81a0b1c10..5961bed0b 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -14,8 +14,8 @@ String advanced_battery_processor(const String& var) { "cursor: pointer; border-radius: 10px; }"; content += "button:hover { background-color: #3A4A52; }"; content += ""; - content += " "; // Refresh before export - content += " "; // TO DO make this work + content += " "; // Refresh before export + content += " "; // TO DO make this work content += ""; // Start a new block with a specific background color @@ -1199,7 +1199,7 @@ String advanced_battery_processor(const String& var) { content += "function refreshPage(){ location.reload(true); }"; content += "function exportLog() { window.location.href = '/export_log'; }"; content += ""; - + return content; } return String(); From 81d05c91b989e2d3c319d7731c80839ab0fd07d6 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sun, 12 Jan 2025 11:44:12 +1300 Subject: [PATCH 10/26] Add BMS352_mux --- Software/src/datalayer/datalayer_extended.h | 1 + .../webserver/advanced_battery_html.cpp | 40 ++++++++++--------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Software/src/datalayer/datalayer_extended.h b/Software/src/datalayer/datalayer_extended.h index 66fbcf26b..cbf9df92d 100644 --- a/Software/src/datalayer/datalayer_extended.h +++ b/Software/src/datalayer/datalayer_extended.h @@ -393,6 +393,7 @@ typedef struct { uint8_t HVP_shuntAuxCurrentStatus = 0; uint8_t HVP_shuntBarTempStatus = 0; uint8_t HVP_shuntAsicTempStatus = 0; + bool BMS352_mux = false; } DATALAYER_INFO_TESLA; typedef struct { diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index b47165a6b..e795d2b48 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -14,7 +14,6 @@ String advanced_battery_processor(const String& var) { "cursor: pointer; border-radius: 10px; }"; content += "button:hover { background-color: #3A4A52; }"; content += ""; - content += " "; // Refresh before export content += " "; // TO DO make this work content += ""; @@ -623,25 +622,29 @@ String advanced_battery_processor(const String& var) { content += "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + "

"; //bool //0x352 850 BMS_energyStatus - content += "

Early BMS 0x352:

"; //if using older BMS <2021 and comment 0x352 without MUX - content += "

Calculated SOH: " + String(nominal_full_pack_energy * 100 / beginning_of_life) + "

"; - content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy) + " KWh

"; - content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining) + " KWh

"; - content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining) + " KWh

"; - content += "

Energy to Charge Complete: " + String(energy_to_charge_complete) + " KWh

"; - content += "

Energy Buffer: " + String(energy_buffer) + " KWh

"; - content += "

Full Charge Complete: " + String(noYes[datalayer_extended.tesla.battery_full_charge_complete]) + + if (datalayer_extended.tesla.BMS352_mux == false){ + content += "

Early BMS 0x352:

"; //if using older BMS <2021 and comment 0x352 without MUX + content += "

Calculated SOH: " + String(nominal_full_pack_energy * 100 / beginning_of_life) + "

"; + content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy) + " KWh

"; + content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining) + " KWh

"; + content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining) + " KWh

"; + content += "

Energy to Charge Complete: " + String(energy_to_charge_complete) + " KWh

"; + content += "

Energy Buffer: " + String(energy_buffer) + " KWh

"; + content += "

Full Charge Complete: " + String(noYes[datalayer_extended.tesla.battery_full_charge_complete]) + "

"; //bool + } //0x352 850 BMS_energyStatus - content += "

Late BMS 0x352 with Mux:

"; //if using newer BMS >2021 and comment 0x352 with MUX - content += "

Calculated SOH: " + String(nominal_full_pack_energy_m0 * 100 / beginning_of_life) + "

"; - content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy_m0) + " KWh

"; - content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining_m0) + " KWh

"; - content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining_m0) + " KWh

"; - content += "

Energy to Charge Complete: " + String(energy_to_charge_complete_m1) + " KWh

"; - content += "

Energy Buffer: " + String(energy_buffer_m1) + " KWh

"; - content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; - content += "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool + if (datalayer_extended.tesla.BMS352_mux == true){ + content += "

Late BMS 0x352 with Mux:

"; //if using newer BMS >2021 and comment 0x352 with MUX + content += "

Calculated SOH: " + String(nominal_full_pack_energy_m0 * 100 / beginning_of_life) + "

"; + content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy_m0) + " KWh

"; + content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining_m0) + " KWh

"; + content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining_m0) + " KWh

"; + content += "

Energy to Charge Complete: " + String(energy_to_charge_complete_m1) + " KWh

"; + content += "

Energy Buffer: " + String(energy_buffer_m1) + " KWh

"; + content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; + content += "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool + } //0x392 BMS_packConfig //content += "

packConfigMultiplexer: " + String(datalayer_extended.tesla.battery_packConfigMultiplexer) + "

"; // Not giving useable data //content += "

moduleType: " + String(datalayer_extended.tesla.battery_moduleType) + "

"; // Not giving useable data @@ -1210,7 +1213,6 @@ String advanced_battery_processor(const String& var) { content += ""; // Additial functions added content += ""; From cdfe8440608519c890181f7540ebb44fdf7475f1 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sun, 12 Jan 2025 11:44:49 +1300 Subject: [PATCH 11/26] Update advanced_battery_html.cpp format --- .../src/devboard/webserver/advanced_battery_html.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index e795d2b48..2d63da198 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -622,7 +622,7 @@ String advanced_battery_processor(const String& var) { content += "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + "

"; //bool //0x352 850 BMS_energyStatus - if (datalayer_extended.tesla.BMS352_mux == false){ + if (datalayer_extended.tesla.BMS352_mux == false) { content += "

Early BMS 0x352:

"; //if using older BMS <2021 and comment 0x352 without MUX content += "

Calculated SOH: " + String(nominal_full_pack_energy * 100 / beginning_of_life) + "

"; content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy) + " KWh

"; @@ -631,10 +631,10 @@ String advanced_battery_processor(const String& var) { content += "

Energy to Charge Complete: " + String(energy_to_charge_complete) + " KWh

"; content += "

Energy Buffer: " + String(energy_buffer) + " KWh

"; content += "

Full Charge Complete: " + String(noYes[datalayer_extended.tesla.battery_full_charge_complete]) + - "

"; //bool + ""; //bool } //0x352 850 BMS_energyStatus - if (datalayer_extended.tesla.BMS352_mux == true){ + if (datalayer_extended.tesla.BMS352_mux == true) { content += "

Late BMS 0x352 with Mux:

"; //if using newer BMS >2021 and comment 0x352 with MUX content += "

Calculated SOH: " + String(nominal_full_pack_energy_m0 * 100 / beginning_of_life) + "

"; content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy_m0) + " KWh

"; @@ -643,7 +643,8 @@ String advanced_battery_processor(const String& var) { content += "

Energy to Charge Complete: " + String(energy_to_charge_complete_m1) + " KWh

"; content += "

Energy Buffer: " + String(energy_buffer_m1) + " KWh

"; content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; - content += "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool + content += + "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool } //0x392 BMS_packConfig //content += "

packConfigMultiplexer: " + String(datalayer_extended.tesla.battery_packConfigMultiplexer) + "

"; // Not giving useable data From bfab0921e0443d808ac02baad9d406d3562740cb Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sun, 12 Jan 2025 11:55:13 +1300 Subject: [PATCH 12/26] Update datalayer_extended.h correction --- Software/src/datalayer/datalayer_extended.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Software/src/datalayer/datalayer_extended.h b/Software/src/datalayer/datalayer_extended.h index cbf9df92d..66fbcf26b 100644 --- a/Software/src/datalayer/datalayer_extended.h +++ b/Software/src/datalayer/datalayer_extended.h @@ -393,7 +393,6 @@ typedef struct { uint8_t HVP_shuntAuxCurrentStatus = 0; uint8_t HVP_shuntBarTempStatus = 0; uint8_t HVP_shuntAsicTempStatus = 0; - bool BMS352_mux = false; } DATALAYER_INFO_TESLA; typedef struct { From 2644a3de2b742dff430e3da64f58f8b4b0361cc8 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sun, 12 Jan 2025 21:16:40 +1300 Subject: [PATCH 13/26] Update advanced_battery_html.cpp Delete button to exportLog --- Software/src/devboard/webserver/advanced_battery_html.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 2d63da198..2bdb14445 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -14,7 +14,6 @@ String advanced_battery_processor(const String& var) { "cursor: pointer; border-radius: 10px; }"; content += "button:hover { background-color: #3A4A52; }"; content += ""; - content += " "; // TO DO make this work content += ""; // Start a new block with a specific background color From 86e93b1dff2e0e7e9ac2475dd455cd9a23e38e3d Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Mon, 13 Jan 2025 22:23:34 +1300 Subject: [PATCH 14/26] Update advanced_battery_html.cpp Organize data displayed --- .../webserver/advanced_battery_html.cpp | 171 +++++++++--------- 1 file changed, 85 insertions(+), 86 deletions(-) diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 2bdb14445..b35b03373 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -539,20 +539,98 @@ String advanced_battery_processor(const String& var) { readableSerialNumber[14] = '\0'; // Null terminate the string content += "

BMS Serial number: " + String(readableSerialNumber) + "

"; // Comment what data you would like to dislay, order can be changed. + //0x352 850 BMS_energyStatus + if (datalayer_extended.tesla.BMS352_mux == false) { + content += "

BMS 0x352 w/o mux

"; //if using older BMS <2021 and comment 0x352 without MUX + content += "

Calculated SOH: " + String(nominal_full_pack_energy * 100 / beginning_of_life) + "

"; + content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy) + " KWh

"; + content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining) + " KWh

"; + content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining) + " KWh

"; + content += "

Energy to Charge Complete: " + String(energy_to_charge_complete) + " KWh

"; + content += "

Energy Buffer: " + String(energy_buffer) + " KWh

"; + content += "

Full Charge Complete: " + String(noYes[datalayer_extended.tesla.battery_full_charge_complete]) + + "

"; //bool + } + //0x352 850 BMS_energyStatus + if (datalayer_extended.tesla.BMS352_mux == true) { + content += "

BMS 0x352 w/ mux

"; //if using newer BMS >2021 and comment 0x352 with MUX + content += "

Calculated SOH: " + String(nominal_full_pack_energy_m0 * 100 / beginning_of_life) + "

"; + content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy_m0) + " KWh

"; + content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining_m0) + " KWh

"; + content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining_m0) + " KWh

"; + content += "

Energy to Charge Complete: " + String(energy_to_charge_complete_m1) + " KWh

"; + content += "

Energy Buffer: " + String(energy_buffer_m1) + " KWh

"; + content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; + content += + "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool + } + //0x3D2 978 BMS_kwhCounter + content += "

Total Discharge: " + String(total_discharge) + " KWh

"; + content += "

Total Charge: " + String(total_charge) + " KWh

"; //0x292 658 BMS_socStates content += "

Battery Beginning of Life: " + String(beginning_of_life) + " KWh

"; - content += "

BattTempPct: " + String(battTempPct) + "

"; + content += "

Battery SOC UI: " + String(soc_ui) + "

"; content += "

Battery SOC Ave: " + String(soc_ave) + "

"; content += "

Battery SOC Max: " + String(soc_max) + "

"; content += "

Battery SOC Min: " + String(soc_min) + "

"; - content += "

Battery SOC UI: " + String(soc_ui) + "

"; + content += "

Battery Temp Percent: " + String(battTempPct) + "

"; //0x2B4 PCS_dcdcRailStatus + content += "

PCS Lv Output: " + String(dcdcLvOutputCurrent) + " A

"; content += "

PCS Lv Bus: " + String(dcdcLvBusVolt) + " V

"; content += "

PCS Hv Bus: " + String(dcdcHvBusVolt) + " V

"; - content += "

PCS Lv Output: " + String(dcdcLvOutputCurrent) + " A

"; + //0x392 BMS_packConfig + //content += "

packConfigMultiplexer: " + String(datalayer_extended.tesla.battery_packConfigMultiplexer) + "

"; // Not giving useable data + //content += "

moduleType: " + String(datalayer_extended.tesla.battery_moduleType) + "

"; // Not giving useable data + //content += "

reserveConfig: " + String(datalayer_extended.tesla.battery_reservedConfig) + "

"; // Not giving useable data + content += "

Battery Pack Mass: " + String(packMass) + " KG

"; + content += "

Platform Max Bus Voltage: " + String(platformMaxBusVoltage) + " V

"; + //0x2D2 722 BMSVAlimits + content += "

BMS Min Voltage: " + String(bms_min_voltage) + " V

"; + content += "

BMS Max Voltage: " + String(bms_max_voltage) + " V

"; + content += "

Max Charge Current: " + String(max_charge_current) + " A

"; + content += "

Max Discharge Current: " + String(max_discharge_current) + " A

"; + //0x332 818 BMS_bmbMinMax + content += "

Brick Voltage Max: " + String(BrickVoltageMax) + " V

"; + content += "

Brick Voltage Min: " + String(BrickVoltageMin) + " V

"; + content += "

Brick Temp Max Num: " + String(datalayer_extended.tesla.battery_BrickTempMaxNum) + "

"; + content += "

Brick Temp Min Num: " + String(datalayer_extended.tesla.battery_BrickTempMinNum) + "

"; + //content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

"; + //content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

"; //0x2A4 676 PCS_thermalStatus //content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC

"; // Not giving useable data //content += "

PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC

"; // Not giving useable data + //0x252 594 BMS_powerAvailable + content += "

Max Regen Power: " + String(BMS_maxRegenPower) + " KW

"; + content += "

Max Discharge Power: " + String(BMS_maxDischargePower) + " KW

"; + //content += "

Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh

"; + //content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; // Not giving useable data + //content += "

Not Enough Power For Heat Pump: " + String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + "

"; // Not giving useable data + content += + "

Power Limit State: " + String(BMS_powerLimitState[datalayer_extended.tesla.BMS_powerLimitState]) + "

"; + //content += "

Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "

"; // Not giving useable data + //0x212 530 BMS_status + content += "

Isolation Resistance: " + String(isolationResistance) + " kOhms

"; + content += + "

BMS Contactor State: " + String(BMS_contactorState[datalayer_extended.tesla.battery_BMS_contactorState]) + + "

"; + content += "

BMS State: " + String(BMS_state[datalayer_extended.tesla.battery_BMS_state]) + "

"; + content += "

BMS HV State: " + String(BMS_hvState[datalayer_extended.tesla.battery_BMS_hvState]) + "

"; + content += "

BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) + + "

"; + content += "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + + "

"; //bool + //0x312 786 BMS_thermalStatus + content += "

Power Dissipation: " + String(BMS_powerDissipation) + " kW

"; + content += "

Flow Request: " + String(BMS_flowRequest) + " LPM

"; + content += "

Inlet Active Cool Target Temp: " + String(BMS_inletActiveCoolTargetT) + " DegC

"; + content += "

Inlet Passive Target Temp: " + String(BMS_inletPassiveTargetT) + " DegC

"; + content += "

Inlet Active Heat Target Temp: " + String(BMS_inletActiveHeatTargetT) + " DegC

"; + content += "

Pack Temp Min: " + String(BMS_packTMin) + " DegC

"; + content += "

Pack Temp Max: " + String(BMS_packTMax) + " DegC

"; + content += + "

PCS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_pcsNoFlowRequest]) + "

"; //bool + content += + "

BMS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_noFlowRequest]) + "

"; //bool //0x224 548 PCS_dcdcStatus content += "

Precharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcPrechargeStatus]) + @@ -606,84 +684,6 @@ String advanced_battery_processor(const String& var) { content += "

PCS_dcdcIntervalMinLvBusVolt: " + String(PCS_dcdcIntervalMinLvBusVolt) + " V

"; content += "

PCS_dcdcIntervalMinLvOutputCurr: " + String(PCS_dcdcIntervalMinLvOutputCurr) + " A

"; content += "

PCS_dcdc12vSupportLifetimekWh: " + String(PCS_dcdc12vSupportLifetimekWh) + " kWh

"; - //0x3D2 978 BMS_kwhCounter - content += "

Total Discharge: " + String(total_discharge) + " KWh

"; - content += "

Total Charge: " + String(total_charge) + " KWh

"; - //0x212 530 BMS_status - content += "

Isolation Resistance: " + String(isolationResistance) + " kOhms

"; - content += - "

BMS Contactor State: " + String(BMS_contactorState[datalayer_extended.tesla.battery_BMS_contactorState]) + - "

"; - content += "

BMS State: " + String(BMS_state[datalayer_extended.tesla.battery_BMS_state]) + "

"; - content += "

BMS HV State: " + String(BMS_hvState[datalayer_extended.tesla.battery_BMS_hvState]) + "

"; - content += "

BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) + - "

"; - content += "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + - "

"; //bool - //0x352 850 BMS_energyStatus - if (datalayer_extended.tesla.BMS352_mux == false) { - content += "

Early BMS 0x352:

"; //if using older BMS <2021 and comment 0x352 without MUX - content += "

Calculated SOH: " + String(nominal_full_pack_energy * 100 / beginning_of_life) + "

"; - content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy) + " KWh

"; - content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining) + " KWh

"; - content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining) + " KWh

"; - content += "

Energy to Charge Complete: " + String(energy_to_charge_complete) + " KWh

"; - content += "

Energy Buffer: " + String(energy_buffer) + " KWh

"; - content += "

Full Charge Complete: " + String(noYes[datalayer_extended.tesla.battery_full_charge_complete]) + - "

"; //bool - } - //0x352 850 BMS_energyStatus - if (datalayer_extended.tesla.BMS352_mux == true) { - content += "

Late BMS 0x352 with Mux:

"; //if using newer BMS >2021 and comment 0x352 with MUX - content += "

Calculated SOH: " + String(nominal_full_pack_energy_m0 * 100 / beginning_of_life) + "

"; - content += "

Nominal Full Pack Energy: " + String(nominal_full_pack_energy_m0) + " KWh

"; - content += "

Nominal Energy Remaining: " + String(nominal_energy_remaining_m0) + " KWh

"; - content += "

Ideal Energy Remaining: " + String(ideal_energy_remaining_m0) + " KWh

"; - content += "

Energy to Charge Complete: " + String(energy_to_charge_complete_m1) + " KWh

"; - content += "

Energy Buffer: " + String(energy_buffer_m1) + " KWh

"; - content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; - content += - "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool - } - //0x392 BMS_packConfig - //content += "

packConfigMultiplexer: " + String(datalayer_extended.tesla.battery_packConfigMultiplexer) + "

"; // Not giving useable data - //content += "

moduleType: " + String(datalayer_extended.tesla.battery_moduleType) + "

"; // Not giving useable data - //content += "

reserveConfig: " + String(datalayer_extended.tesla.battery_reservedConfig) + "

"; // Not giving useable data - content += "

Battery Pack Mass: " + String(packMass) + " KG

"; - content += "

Platform Max Bus Voltage: " + String(platformMaxBusVoltage) + " V

"; - //0x2D2 722 BMSVAlimits - content += "

BMS Min Voltage: " + String(bms_min_voltage) + " V

"; - content += "

BMS Max Voltage: " + String(bms_max_voltage) + " V

"; - content += "

Max Charge Current: " + String(max_charge_current) + " A

"; - content += "

Max Discharge Current: " + String(max_discharge_current) + " A

"; - //0x332 818 BMS_bmbMinMax - content += "

Brick Voltage Max: " + String(BrickVoltageMax) + " V

"; - content += "

Brick Voltage Min: " + String(BrickVoltageMin) + " V

"; - content += "

Brick Temp Max Num: " + String(datalayer_extended.tesla.battery_BrickTempMaxNum) + "

"; - content += "

Brick Temp Min Num: " + String(datalayer_extended.tesla.battery_BrickTempMinNum) + "

"; - //content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

"; - //content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

"; - //0x252 594 BMS_powerAvailable - content += "

Max Regen Power: " + String(BMS_maxRegenPower) + " KW

"; - content += "

Max Discharge Power: " + String(BMS_maxDischargePower) + " KW

"; - content += "

Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh

"; - //content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; // Not giving useable data - //content += "

Not Enough Power For Heat Pump: " + String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + "

"; // Not giving useable data - content += - "

Power Limit State: " + String(BMS_powerLimitState[datalayer_extended.tesla.BMS_powerLimitState]) + "

"; - //content += "

Inverter TQF: " + String(datalayer_extended.tesla.BMS_inverterTQF) + "

"; // Not giving useable data - //0x312 786 BMS_thermalStatus - content += "

Power Dissipation: " + String(BMS_powerDissipation) + " kW

"; - content += "

Flow Request: " + String(BMS_flowRequest) + " LPM

"; - content += "

Inlet Active Cool Target Temp: " + String(BMS_inletActiveCoolTargetT) + " DegC

"; - content += "

Inlet Passive Target Temp: " + String(BMS_inletPassiveTargetT) + " DegC

"; - content += "

Inlet Active Heat Target Temp: " + String(BMS_inletActiveHeatTargetT) + " DegC

"; - content += "

Pack Temp Min: " + String(BMS_packTMin) + " DegC

"; - content += "

Pack Temp Max: " + String(BMS_packTMax) + " DegC

"; - content += - "

PCS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_pcsNoFlowRequest]) + "

"; //bool - content += - "

BMS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_noFlowRequest]) + "

"; //bool //0x7AA 1962 HVP_debugMessage content += "

HVP_gpioPassivePyroDepl: " + String(Fault[datalayer_extended.tesla.HVP_gpioPassivePyroDepl]) + "

"; //bool @@ -742,11 +742,11 @@ String advanced_battery_processor(const String& var) { content += "

HVP_packVoltage: " + String(HVP_packVoltage) + " V

"; //content += "

HVP_fcLinkVoltage: " + String(HVP_fcLinkVoltage) + " V

"; // Not giving useable data content += "

HVP_packContVoltage: " + String(HVP_packContVoltage) + " V

"; - content += "

HVP_packNegativeV: " + String(HVP_packNegativeV) + " V

"; - content += "

HVP_packPositiveV: " + String(HVP_packPositiveV) + " V

"; + //content += "

HVP_packNegativeV: " + String(HVP_packNegativeV) + " V

"; + //content += "

HVP_packPositiveV: " + String(HVP_packPositiveV) + " V

"; content += "

HVP_pyroAnalog: " + String(HVP_pyroAnalog) + " V

"; - content += "

HVP_dcLinkNegativeV: " + String(HVP_dcLinkNegativeV) + " V

"; - content += "

HVP_dcLinkPositiveV: " + String(HVP_dcLinkPositiveV) + " V

"; + //content += "

HVP_dcLinkNegativeV: " + String(HVP_dcLinkNegativeV) + " V

"; + //content += "

HVP_dcLinkPositiveV: " + String(HVP_dcLinkPositiveV) + " V

"; //content += "

HVP_fcLinkNegativeV: " + String(HVP_fcLinkNegativeV) + " V

"; // Not giving useable data //content += "

HVP_fcContCoilCurrent: " + String(HVP_fcContCoilCurrent) + " A

"; // Not giving useable data //content += "

HVP_fcContVoltage: " + String(HVP_fcContVoltage) + " V

"; // Not giving useable data @@ -762,7 +762,6 @@ String advanced_battery_processor(const String& var) { //content += "

HVP_shuntAuxCurrentStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntAuxCurrentStatus]) + "

"; // Not giving useable data //content += "

HVP_shuntBarTempStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntBarTempStatus]) + "

"; // Not giving useable data //content += "

HVP_shuntAsicTempStatus: " + String(HVP_status[datalayer_extended.tesla.HVP_shuntAsicTempStatus]) + "

"; // Not giving useable data - #endif #ifdef NISSAN_LEAF_BATTERY From b0dd606b63c9468286044844d5b8e53e5afbc7b0 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 15 Jan 2025 15:55:27 +1300 Subject: [PATCH 15/26] Update 0x352 mux detection. Organize advanced battery information --- Software/src/battery/TESLA-BATTERY.cpp | 24 +-- .../webserver/advanced_battery_html.cpp | 165 +++++++----------- 2 files changed, 79 insertions(+), 110 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index e9a5f9039..725c6e939 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1191,28 +1191,28 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { switch (rx_frame.ID) { case 0x352: // 850 BMS_energyStatus newer BMS - mux = (rx_frame.data.u8[0] & 0x02); //BMS_energyStatusIndex M : 0|2@1+ (1,0) [0|0] "" X - if (mux <= 1) { + mux = ((rx_frame.data.u8[0]) & 0x03); //BMS_energyStatusIndex M : 0|2@1+ (1,0) [0|0] "" X + if (mux == 1 || mux == 2) { BMS352_mux = true; - } // autodetect when mux is used + } // autodetect when mux 1 or 2 is used, mux 0 is always present if (mux == 0) { battery_nominal_full_pack_energy_m0 = - ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + (((rx_frame.data.u8[3]) << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended battery_nominal_energy_remaining_m0 = - ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + (((rx_frame.data.u8[5]) << 8) | rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended battery_ideal_energy_remaining_m0 = - ((rx_frame.data.u8[7] << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + (((rx_frame.data.u8[7]) << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended } if (mux == 1) { battery_fully_charged = (rx_frame.data.u8[1] & 0x01); //15|1@1+ (1,0) [0|1]//to datalayer_extended battery_energy_buffer_m1 = - (rx_frame.data.u8[3] | rx_frame.data.u8[2]); //16|16@1+ (0.01,0) [0|0] "kWh"//to datalayer_extended + ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.01,0) [0|0] "kWh"//to datalayer_extended battery_expected_energy_remaining_m1 = - (rx_frame.data.u8[5] | rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended battery_energy_to_charge_complete_m1 = - (rx_frame.data.u8[7] | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + ((rx_frame.data.u8[7] << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended } - //if (mux == 2) {} + if (mux == 2) {} // Additional information needed on this mux, example frame: 02 26 02 20 02 80 00 00 doesn't change // older BMS <2021 without mux battery_nominal_full_pack_energy = //BMS_nominalFullPackEnergy : 0|11@1+ (0.1,0) [0|204.6] "KWh" //((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)); @@ -1227,9 +1227,9 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { battery_energy_to_charge_complete = // BMS_energyToChargeComplete : 44|11@1+ (0.1,0) [0|204.6] "KWh"// ((_d[6] & (0x7FU)) << 4) | ((_d[5] >> 4) & (0x0FU)); (((rx_frame.data.u8[6] & 0x7F) << 4) | ((rx_frame.data.u8[5] & 0x0F) << 4)); //Example 147 * 0.1 = 14.7kWh battery_energy_buffer = //BMS_energyBuffer : 55|8@1+ (0.1,0) [0|25.4] "KWh"// ((_d[7] & (0x7FU)) << 1) | ((_d[6] >> 7) & (0x01U)); - (((rx_frame.data.u8[7] & 0x7F) << 1) | ((rx_frame.data.u8[6] & 0x01) >> 7)); //Example 1 * 0.1 = 0 + (((rx_frame.data.u8[7] & 0xFE) >> 1) | ((rx_frame.data.u8[6] & 0x80) >> 7)); //Example 1 * 0.1 = 0 battery_full_charge_complete = //BMS_fullChargeComplete : 63|1@1+ (1,0) [0|1] ""//((_d[7] >> 7) & (0x01U)); - ((rx_frame.data.u8[7] & 0x01) >> 7); + ((rx_frame.data.u8[7] >> 7) & 0x01); break; case 0x20A: //522 HVP_contactorState: battery_packContNegativeState = diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index b35b03373..3762a1d9f 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -518,21 +518,21 @@ String advanced_battery_processor(const String& var) { content += "

Positive contactor: " + String(contactorState[datalayer_extended.tesla.packContPositiveState]) + "

"; content += - "

Closing allowed?: " + String(noYes[datalayer_extended.tesla.packCtrsClosingAllowed]) + "

"; //bool + "

Closing allowed?: " + String(noYes[datalayer_extended.tesla.packCtrsClosingAllowed]) + "

"; content += - "

Pyrotest in Progress: " + String(noYes[datalayer_extended.tesla.pyroTestInProgress]) + "

"; //bool + "

Pyrotest in Progress: " + String(noYes[datalayer_extended.tesla.pyroTestInProgress]) + "

"; content += "

Contactors Open Now Requested: " + - String(noYes[datalayer_extended.tesla.battery_packCtrsOpenNowRequested]) + "

"; //bool + String(noYes[datalayer_extended.tesla.battery_packCtrsOpenNowRequested]) + ""; content += "

Contactors Open Requested: " + String(noYes[datalayer_extended.tesla.battery_packCtrsOpenRequested]) + - "

"; //bool + ""; content += "

Contactors Request Status: " + String(HVP_contactor[datalayer_extended.tesla.battery_packCtrsRequestStatus]) + "

"; content += "

Contactors Reset Request Required: " + - String(noYes[datalayer_extended.tesla.battery_packCtrsResetRequestRequired]) + "

"; //bool + String(noYes[datalayer_extended.tesla.battery_packCtrsResetRequestRequired]) + ""; content += "

DC Link Allowed to Energize: " + String(noYes[datalayer_extended.tesla.battery_dcLinkAllowedToEnergize]) + - "

"; //bool + ""; char readableSerialNumber[15]; // One extra space for null terminator memcpy(readableSerialNumber, datalayer_extended.tesla.BMS_SerialNumber, sizeof(datalayer_extended.tesla.BMS_SerialNumber)); @@ -562,7 +562,7 @@ String advanced_battery_processor(const String& var) { content += "

Energy Buffer: " + String(energy_buffer_m1) + " KWh

"; content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; content += - "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; //bool + "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; } //0x3D2 978 BMS_kwhCounter content += "

Total Discharge: " + String(total_discharge) + " KWh

"; @@ -594,15 +594,15 @@ String advanced_battery_processor(const String& var) { content += "

Brick Voltage Min: " + String(BrickVoltageMin) + " V

"; content += "

Brick Temp Max Num: " + String(datalayer_extended.tesla.battery_BrickTempMaxNum) + "

"; content += "

Brick Temp Min Num: " + String(datalayer_extended.tesla.battery_BrickTempMinNum) + "

"; - //content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

"; - //content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

"; + //content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

";// Not giving useable data + //content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

";// Not giving useable data //0x2A4 676 PCS_thermalStatus //content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC

"; // Not giving useable data //content += "

PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC

"; // Not giving useable data //0x252 594 BMS_powerAvailable content += "

Max Regen Power: " + String(BMS_maxRegenPower) + " KW

"; content += "

Max Discharge Power: " + String(BMS_maxDischargePower) + " KW

"; - //content += "

Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh

"; + //content += "

Max Stationary Heat Power: " + String(BMS_maxStationaryHeatPower) + " KWh

"; // Not giving useable data //content += "

HVAC Power Budget: " + String(BMS_hvacPowerBudget) + " KW

"; // Not giving useable data //content += "

Not Enough Power For Heat Pump: " + String(falseTrue[datalayer_extended.tesla.BMS_notEnoughPowerForHeatPump]) + "

"; // Not giving useable data content += @@ -615,10 +615,8 @@ String advanced_battery_processor(const String& var) { ""; content += "

BMS State: " + String(BMS_state[datalayer_extended.tesla.battery_BMS_state]) + "

"; content += "

BMS HV State: " + String(BMS_hvState[datalayer_extended.tesla.battery_BMS_hvState]) + "

"; - content += "

BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) + - "

"; - content += "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + - "

"; //bool + content += "

BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) + "

"; + content += "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + "

"; //0x312 786 BMS_thermalStatus content += "

Power Dissipation: " + String(BMS_powerDissipation) + " kW

"; content += "

Flow Request: " + String(BMS_flowRequest) + " LPM

"; @@ -628,9 +626,9 @@ String advanced_battery_processor(const String& var) { content += "

Pack Temp Min: " + String(BMS_packTMin) + " DegC

"; content += "

Pack Temp Max: " + String(BMS_packTMax) + " DegC

"; content += - "

PCS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_pcsNoFlowRequest]) + "

"; //bool + "

PCS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_pcsNoFlowRequest]) + "

"; content += - "

BMS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_noFlowRequest]) + "

"; //bool + "

BMS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_noFlowRequest]) + "

"; //0x224 548 PCS_dcdcStatus content += "

Precharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcPrechargeStatus]) + @@ -640,27 +638,19 @@ String advanced_battery_processor(const String& var) { "

"; content += "

HV Bus Discharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcHvBusDischargeStatus]) + "

"; - content += - "

Main State: " + String(PCS_dcdcMainState[datalayer_extended.tesla.battery_PCS_dcdcMainState]) + "

"; - content += - "

Sub State: " + String(PCS_dcdcSubState[datalayer_extended.tesla.battery_PCS_dcdcSubState]) + "

"; - content += "

PCS Faulted: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcFaulted]) + "

"; //bool - content += "

Output Is Limited: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcOutputIsLimited]) + - "

"; //bool + content += "

Main State: " + String(PCS_dcdcMainState[datalayer_extended.tesla.battery_PCS_dcdcMainState]) + "

"; + content += "

Sub State: " + String(PCS_dcdcSubState[datalayer_extended.tesla.battery_PCS_dcdcSubState]) + "

"; + content += "

PCS Faulted: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcFaulted]) + "

"; + content += "

Output Is Limited: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcOutputIsLimited]) + "

"; content += "

Max Output Current Allowed: " + String(PCS_dcdcMaxOutputCurrentAllowed) + " A

"; - content += "

Precharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRtyCnt]) + - "

"; //bool - content += - "

12V Support Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdc12VSupportRtyCnt]) + - "

"; // bool - content += "

Discharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcDischargeRtyCnt]) + - "

"; //bool - content += "

PWM Enable Line: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcPwmEnableLine]) + - "

"; //bool + content += "

Precharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRtyCnt]) + "

"; + content += "

12V Support Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdc12VSupportRtyCnt]) + "

"; + content += "

Discharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcDischargeRtyCnt]) + "

"; + content += "

PWM Enable Line: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcPwmEnableLine]) + "

"; content += "

Supporting Fixed LV Target: " + - String(Fault[datalayer_extended.tesla.battery_PCS_dcdcSupportingFixedLvTarget]) + "

"; //bool + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcSupportingFixedLvTarget]) + ""; content += "

Precharge Restart Cnt: " + - String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRestartCnt]) + "

"; //bool + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRestartCnt]) + ""; content += "

Initial Precharge Substate: " + String(PCS_dcdcSubState[datalayer_extended.tesla.battery_PCS_dcdcInitialPrechargeSubState]) + "

"; //0x2C4 708 PCS_logging @@ -685,76 +675,55 @@ String advanced_battery_processor(const String& var) { content += "

PCS_dcdcIntervalMinLvOutputCurr: " + String(PCS_dcdcIntervalMinLvOutputCurr) + " A

"; content += "

PCS_dcdc12vSupportLifetimekWh: " + String(PCS_dcdc12vSupportLifetimekWh) + " kWh

"; //0x7AA 1962 HVP_debugMessage - content += "

HVP_gpioPassivePyroDepl: " + String(Fault[datalayer_extended.tesla.HVP_gpioPassivePyroDepl]) + - "

"; //bool - content += "

HVP_gpioPyroIsoEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioPyroIsoEn]) + "

"; //bool - content += "

HVP_gpioCpFaultIn: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpFaultIn]) + "

"; //bool - content += "

HVP_gpioPackContPowerEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackContPowerEn]) + - "

"; //bool - content += - "

HVP_gpioHvCablesOk: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvCablesOk]) + "

"; //bool - content += - "

HVP_gpioHvpSelfEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvpSelfEnable]) + "

"; //bool - content += "

HVP_gpioLed: " + String(Fault[datalayer_extended.tesla.HVP_gpioLed]) + "

"; //bool - content += - "

HVP_gpioCrashSignal: " + String(Fault[datalayer_extended.tesla.HVP_gpioCrashSignal]) + "

"; //bool - content += "

HVP_gpioShuntDataReady: " + String(Fault[datalayer_extended.tesla.HVP_gpioShuntDataReady]) + - "

"; //bool - content += - "

HVP_gpioFcContPosAux: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContPosAux]) + "

"; //bool - content += - "

HVP_gpioFcContNegAux: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContNegAux]) + "

"; //bool - content += "

HVP_gpioBmsEout: " + String(Fault[datalayer_extended.tesla.HVP_gpioBmsEout]) + "

"; //bool - content += - "

HVP_gpioCpFaultOut: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpFaultOut]) + "

"; //bool - content += "

HVP_gpioPyroPor: " + String(Fault[datalayer_extended.tesla.HVP_gpioPyroPor]) + "

"; //bool - content += "

HVP_gpioShuntEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioShuntEn]) + "

"; //bool - content += "

HVP_gpioHvpVerEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvpVerEn]) + "

"; //bool - content += - "

HVP_gpioPackCoontPosFlywheel: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackCoontPosFlywheel]) + - "

"; //bool - content += - "

HVP_gpioCpLatchEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpLatchEnable]) + "

"; //bool - content += "

HVP_gpioPcsEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsEnable]) + "

"; //bool - content += "

HVP_gpioPcsDcdcPwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsDcdcPwmEnable]) + - "

"; //bool - content += "

HVP_gpioPcsChargePwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsChargePwmEnable]) + - "

"; //bool - content += "

HVP_gpioFcContPowerEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContPowerEnable]) + - "

"; //bool - content += - "

HVP_gpioHvilEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvilEnable]) + "

"; //bool - content += "

HVP_gpioSecDrdy: " + String(Fault[datalayer_extended.tesla.HVP_gpioSecDrdy]) + "

"; //bool - content += "

HVP_hvp1v5Ref: " + String(HVP_hvp1v5Ref) + " V

"; - content += "

HVP_shuntCurrentDebug: " + String(HVP_shuntCurrentDebug) + " A

"; - content += - "

HVP_packCurrentMia: " + String(noYes[datalayer_extended.tesla.HVP_packCurrentMia]) + "

"; //bool - content += "

HVP_auxCurrentMia: " + String(noYes[datalayer_extended.tesla.HVP_auxCurrentMia]) + "

"; //bool - content += - "

HVP_currentSenseMia: " + String(noYes[datalayer_extended.tesla.HVP_currentSenseMia]) + "

"; //bool - content += - "

HVP_shuntRefVoltageMismatch: " + String(noYes[datalayer_extended.tesla.HVP_shuntRefVoltageMismatch]) + - "

"; //bool - content += "

HVP_shuntThermistorMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntThermistorMia]) + - "

"; //bool - content += "

HVP_shuntHwMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntHwMia]) + "

"; //bool + content += "

HVP_battery12V: " + String(HVP_battery12V) + " V

"; content += "

HVP_dcLinkVoltage: " + String(HVP_dcLinkVoltage) + " V

"; content += "

HVP_packVoltage: " + String(HVP_packVoltage) + " V

"; - //content += "

HVP_fcLinkVoltage: " + String(HVP_fcLinkVoltage) + " V

"; // Not giving useable data content += "

HVP_packContVoltage: " + String(HVP_packContVoltage) + " V

"; - //content += "

HVP_packNegativeV: " + String(HVP_packNegativeV) + " V

"; - //content += "

HVP_packPositiveV: " + String(HVP_packPositiveV) + " V

"; + content += "

HVP_packContCoilCurrent: " + String(HVP_packContCoilCurrent) + " A

"; content += "

HVP_pyroAnalog: " + String(HVP_pyroAnalog) + " V

"; - //content += "

HVP_dcLinkNegativeV: " + String(HVP_dcLinkNegativeV) + " V

"; - //content += "

HVP_dcLinkPositiveV: " + String(HVP_dcLinkPositiveV) + " V

"; - //content += "

HVP_fcLinkNegativeV: " + String(HVP_fcLinkNegativeV) + " V

"; // Not giving useable data - //content += "

HVP_fcContCoilCurrent: " + String(HVP_fcContCoilCurrent) + " A

"; // Not giving useable data - //content += "

HVP_fcContVoltage: " + String(HVP_fcContVoltage) + " V

"; // Not giving useable data + content += "

HVP_hvp1v5Ref: " + String(HVP_hvp1v5Ref) + " V

"; content += "

HVP_hvilInVoltage: " + String(HVP_hvilInVoltage) + " V

"; content += "

HVP_hvilOutVoltage: " + String(HVP_hvilOutVoltage) + " V

"; - //content += "

HVP_fcLinkPositiveV: " + String(HVP_fcLinkPositiveV) + " V

"; // Not giving useable data - content += "

HVP_packContCoilCurrent: " + String(HVP_packContCoilCurrent) + " A

"; - content += "

HVP_battery12V: " + String(HVP_battery12V) + " V

"; + content += "

HVP_gpioPassivePyroDepl: " + String(Fault[datalayer_extended.tesla.HVP_gpioPassivePyroDepl]) + "

"; + content += "

HVP_gpioPyroIsoEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioPyroIsoEn]) + "

"; + content += "

HVP_gpioCpFaultIn: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpFaultIn]) + "

"; + content += "

HVP_gpioPackContPowerEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackContPowerEn]) + "

"; + content += "

HVP_gpioHvCablesOk: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvCablesOk]) + "

"; + content += "

HVP_gpioHvpSelfEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvpSelfEnable]) + "

"; + content += "

HVP_gpioLed: " + String(Fault[datalayer_extended.tesla.HVP_gpioLed]) + "

"; + content += "

HVP_gpioCrashSignal: " + String(Fault[datalayer_extended.tesla.HVP_gpioCrashSignal]) + "

"; + content += "

HVP_gpioShuntDataReady: " + String(Fault[datalayer_extended.tesla.HVP_gpioShuntDataReady]) + "

"; + content += "

HVP_gpioFcContPosAux: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContPosAux]) + "

"; + content += "

HVP_gpioFcContNegAux: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContNegAux]) + "

"; + content += "

HVP_gpioBmsEout: " + String(Fault[datalayer_extended.tesla.HVP_gpioBmsEout]) + "

"; + content += "

HVP_gpioCpFaultOut: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpFaultOut]) + "

"; + content += "

HVP_gpioPyroPor: " + String(Fault[datalayer_extended.tesla.HVP_gpioPyroPor]) + "

"; + content += "

HVP_gpioShuntEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioShuntEn]) + "

"; + content += "

HVP_gpioHvpVerEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvpVerEn]) + "

"; + content += "

HVP_gpioPackCoontPosFlywheel: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackCoontPosFlywheel]) + "

"; + content += "

HVP_gpioCpLatchEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpLatchEnable]) + "

"; + content += "

HVP_gpioPcsEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsEnable]) + "

"; + content += "

HVP_gpioPcsDcdcPwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsDcdcPwmEnable]) + "

"; + content += "

HVP_gpioPcsChargePwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsChargePwmEnable]) + "

"; + content += "

HVP_gpioFcContPowerEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContPowerEnable]) + "

"; + content += "

HVP_gpioHvilEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvilEnable]) + "

"; + content += "

HVP_gpioSecDrdy: " + String(Fault[datalayer_extended.tesla.HVP_gpioSecDrdy]) + "

"; + content += "

HVP_shuntCurrentDebug: " + String(HVP_shuntCurrentDebug) + " A

"; + content += "

HVP_packCurrentMia: " + String(noYes[datalayer_extended.tesla.HVP_packCurrentMia]) + "

"; + content += "

HVP_auxCurrentMia: " + String(noYes[datalayer_extended.tesla.HVP_auxCurrentMia]) + "

"; + content += "

HVP_currentSenseMia: " + String(noYes[datalayer_extended.tesla.HVP_currentSenseMia]) + "

"; + content += "

HVP_shuntRefVoltageMismatch: " + String(noYes[datalayer_extended.tesla.HVP_shuntRefVoltageMismatch]) + "

"; + content += "

HVP_shuntThermistorMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntThermistorMia]) + "

"; + content += "

HVP_shuntHwMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntHwMia]) + "

"; + //content += "

HVP_fcLinkVoltage: " + String(HVP_fcLinkVoltage) + " V

"; // Not giving useable data + //content += "

HVP_packNegativeV: " + String(HVP_packNegativeV) + " V

"; // Not giving useable data + //content += "

HVP_packPositiveV: " + String(HVP_packPositiveV) + " V

"; // Not giving useable data + //content += "

HVP_dcLinkNegativeV: " + String(HVP_dcLinkNegativeV) + " V

"; // Not giving useable data + //content += "

HVP_dcLinkPositiveV: " + String(HVP_dcLinkPositiveV) + " V

"; // Not giving useable data + //content += "

HVP_fcLinkNegativeV: " + String(HVP_fcLinkNegativeV) + " V

"; // Not giving useable data + //content += "

HVP_fcContCoilCurrent: " + String(HVP_fcContCoilCurrent) + " A

"; // Not giving useable data + //content += "

HVP_fcContVoltage: " + String(HVP_fcContVoltage) + " V

"; // Not giving useable data + //content += "

HVP_fcLinkPositiveV: " + String(HVP_fcLinkPositiveV) + " V

"; // Not giving useable data //content += "

HVP_shuntRefVoltageDbg: " + String(HVP_shuntRefVoltageDbg) + " V

"; // Not giving useable data //content += "

HVP_shuntAuxCurrentDbg: " + String(HVP_shuntAuxCurrentDbg) + " A

"; // Not giving useable data //content += "

HVP_shuntBarTempDbg: " + String(HVP_shuntBarTempDbg) + " DegC

"; // Not giving useable data From 761aa8817f1b56aee2d9ee0fb428981b9a4cc964 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 15 Jan 2025 15:56:04 +1300 Subject: [PATCH 16/26] format change --- Software/src/battery/TESLA-BATTERY.cpp | 11 ++- .../webserver/advanced_battery_html.cpp | 88 +++++++++++-------- 2 files changed, 59 insertions(+), 40 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 725c6e939..274e4aec7 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1190,18 +1190,21 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { static uint16_t temp = 0; switch (rx_frame.ID) { - case 0x352: // 850 BMS_energyStatus newer BMS + case 0x352: // 850 BMS_energyStatus newer BMS mux = ((rx_frame.data.u8[0]) & 0x03); //BMS_energyStatusIndex M : 0|2@1+ (1,0) [0|0] "" X if (mux == 1 || mux == 2) { BMS352_mux = true; } // autodetect when mux 1 or 2 is used, mux 0 is always present if (mux == 0) { battery_nominal_full_pack_energy_m0 = - (((rx_frame.data.u8[3]) << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + (((rx_frame.data.u8[3]) << 8) | + rx_frame.data.u8[2]); //16|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended battery_nominal_energy_remaining_m0 = - (((rx_frame.data.u8[5]) << 8) | rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + (((rx_frame.data.u8[5]) << 8) | + rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended battery_ideal_energy_remaining_m0 = - (((rx_frame.data.u8[7]) << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + (((rx_frame.data.u8[7]) << 8) | + rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended } if (mux == 1) { battery_fully_charged = (rx_frame.data.u8[1] & 0x01); //15|1@1+ (1,0) [0|1]//to datalayer_extended diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 3762a1d9f..4c179035c 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -517,10 +517,8 @@ String advanced_battery_processor(const String& var) { "

Negative contactor: " + String(contactorState[datalayer_extended.tesla.packContNegativeState]) + "

"; content += "

Positive contactor: " + String(contactorState[datalayer_extended.tesla.packContPositiveState]) + "

"; - content += - "

Closing allowed?: " + String(noYes[datalayer_extended.tesla.packCtrsClosingAllowed]) + "

"; - content += - "

Pyrotest in Progress: " + String(noYes[datalayer_extended.tesla.pyroTestInProgress]) + "

"; + content += "

Closing allowed?: " + String(noYes[datalayer_extended.tesla.packCtrsClosingAllowed]) + "

"; + content += "

Pyrotest in Progress: " + String(noYes[datalayer_extended.tesla.pyroTestInProgress]) + "

"; content += "

Contactors Open Now Requested: " + String(noYes[datalayer_extended.tesla.battery_packCtrsOpenNowRequested]) + "

"; content += @@ -561,8 +559,7 @@ String advanced_battery_processor(const String& var) { content += "

Energy to Charge Complete: " + String(energy_to_charge_complete_m1) + " KWh

"; content += "

Energy Buffer: " + String(energy_buffer_m1) + " KWh

"; content += "

Expected Energy Remaining: " + String(expected_energy_remaining_m1) + " KWh

"; - content += - "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; + content += "

Fully Charged: " + String(noYes[datalayer_extended.tesla.battery_fully_charged]) + "

"; } //0x3D2 978 BMS_kwhCounter content += "

Total Discharge: " + String(total_discharge) + " KWh

"; @@ -615,8 +612,10 @@ String advanced_battery_processor(const String& var) { ""; content += "

BMS State: " + String(BMS_state[datalayer_extended.tesla.battery_BMS_state]) + "

"; content += "

BMS HV State: " + String(BMS_hvState[datalayer_extended.tesla.battery_BMS_hvState]) + "

"; - content += "

BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) + "

"; - content += "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + "

"; + content += "

BMS UI Charge Status: " + String(BMS_uiChargeStatus[datalayer_extended.tesla.battery_BMS_hvState]) + + "

"; + content += + "

BMS PCS PWM Enabled: " + String(Fault[datalayer_extended.tesla.battery_BMS_pcsPwmEnabled]) + "

"; //0x312 786 BMS_thermalStatus content += "

Power Dissipation: " + String(BMS_powerDissipation) + " kW

"; content += "

Flow Request: " + String(BMS_flowRequest) + " LPM

"; @@ -625,10 +624,8 @@ String advanced_battery_processor(const String& var) { content += "

Inlet Active Heat Target Temp: " + String(BMS_inletActiveHeatTargetT) + " DegC

"; content += "

Pack Temp Min: " + String(BMS_packTMin) + " DegC

"; content += "

Pack Temp Max: " + String(BMS_packTMax) + " DegC

"; - content += - "

PCS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_pcsNoFlowRequest]) + "

"; - content += - "

BMS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_noFlowRequest]) + "

"; + content += "

PCS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_pcsNoFlowRequest]) + "

"; + content += "

BMS No Flow Request: " + String(Fault[datalayer_extended.tesla.BMS_noFlowRequest]) + "

"; //0x224 548 PCS_dcdcStatus content += "

Precharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcPrechargeStatus]) + @@ -638,15 +635,23 @@ String advanced_battery_processor(const String& var) { "

"; content += "

HV Bus Discharge Status: " + String(PCS_dcdcStatus[datalayer_extended.tesla.battery_PCS_dcdcHvBusDischargeStatus]) + "

"; - content += "

Main State: " + String(PCS_dcdcMainState[datalayer_extended.tesla.battery_PCS_dcdcMainState]) + "

"; - content += "

Sub State: " + String(PCS_dcdcSubState[datalayer_extended.tesla.battery_PCS_dcdcSubState]) + "

"; + content += + "

Main State: " + String(PCS_dcdcMainState[datalayer_extended.tesla.battery_PCS_dcdcMainState]) + "

"; + content += + "

Sub State: " + String(PCS_dcdcSubState[datalayer_extended.tesla.battery_PCS_dcdcSubState]) + "

"; content += "

PCS Faulted: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcFaulted]) + "

"; - content += "

Output Is Limited: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcOutputIsLimited]) + "

"; + content += + "

Output Is Limited: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcOutputIsLimited]) + "

"; content += "

Max Output Current Allowed: " + String(PCS_dcdcMaxOutputCurrentAllowed) + " A

"; - content += "

Precharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRtyCnt]) + "

"; - content += "

12V Support Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdc12VSupportRtyCnt]) + "

"; - content += "

Discharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcDischargeRtyCnt]) + "

"; - content += "

PWM Enable Line: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcPwmEnableLine]) + "

"; + content += "

Precharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcPrechargeRtyCnt]) + + "

"; + content += + "

12V Support Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdc12VSupportRtyCnt]) + + "

"; + content += "

Discharge Rty Cnt: " + String(falseTrue[datalayer_extended.tesla.battery_PCS_dcdcDischargeRtyCnt]) + + "

"; + content += + "

PWM Enable Line: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcPwmEnableLine]) + "

"; content += "

Supporting Fixed LV Target: " + String(Fault[datalayer_extended.tesla.battery_PCS_dcdcSupportingFixedLvTarget]) + "

"; content += "

Precharge Restart Cnt: " + @@ -684,15 +689,18 @@ String advanced_battery_processor(const String& var) { content += "

HVP_hvp1v5Ref: " + String(HVP_hvp1v5Ref) + " V

"; content += "

HVP_hvilInVoltage: " + String(HVP_hvilInVoltage) + " V

"; content += "

HVP_hvilOutVoltage: " + String(HVP_hvilOutVoltage) + " V

"; - content += "

HVP_gpioPassivePyroDepl: " + String(Fault[datalayer_extended.tesla.HVP_gpioPassivePyroDepl]) + "

"; + content += + "

HVP_gpioPassivePyroDepl: " + String(Fault[datalayer_extended.tesla.HVP_gpioPassivePyroDepl]) + "

"; content += "

HVP_gpioPyroIsoEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioPyroIsoEn]) + "

"; content += "

HVP_gpioCpFaultIn: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpFaultIn]) + "

"; - content += "

HVP_gpioPackContPowerEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackContPowerEn]) + "

"; + content += + "

HVP_gpioPackContPowerEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackContPowerEn]) + "

"; content += "

HVP_gpioHvCablesOk: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvCablesOk]) + "

"; content += "

HVP_gpioHvpSelfEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvpSelfEnable]) + "

"; content += "

HVP_gpioLed: " + String(Fault[datalayer_extended.tesla.HVP_gpioLed]) + "

"; content += "

HVP_gpioCrashSignal: " + String(Fault[datalayer_extended.tesla.HVP_gpioCrashSignal]) + "

"; - content += "

HVP_gpioShuntDataReady: " + String(Fault[datalayer_extended.tesla.HVP_gpioShuntDataReady]) + "

"; + content += + "

HVP_gpioShuntDataReady: " + String(Fault[datalayer_extended.tesla.HVP_gpioShuntDataReady]) + "

"; content += "

HVP_gpioFcContPosAux: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContPosAux]) + "

"; content += "

HVP_gpioFcContNegAux: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContNegAux]) + "

"; content += "

HVP_gpioBmsEout: " + String(Fault[datalayer_extended.tesla.HVP_gpioBmsEout]) + "

"; @@ -700,30 +708,38 @@ String advanced_battery_processor(const String& var) { content += "

HVP_gpioPyroPor: " + String(Fault[datalayer_extended.tesla.HVP_gpioPyroPor]) + "

"; content += "

HVP_gpioShuntEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioShuntEn]) + "

"; content += "

HVP_gpioHvpVerEn: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvpVerEn]) + "

"; - content += "

HVP_gpioPackCoontPosFlywheel: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackCoontPosFlywheel]) + "

"; + content += + "

HVP_gpioPackCoontPosFlywheel: " + String(Fault[datalayer_extended.tesla.HVP_gpioPackCoontPosFlywheel]) + + "

"; content += "

HVP_gpioCpLatchEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioCpLatchEnable]) + "

"; content += "

HVP_gpioPcsEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsEnable]) + "

"; - content += "

HVP_gpioPcsDcdcPwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsDcdcPwmEnable]) + "

"; - content += "

HVP_gpioPcsChargePwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsChargePwmEnable]) + "

"; - content += "

HVP_gpioFcContPowerEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContPowerEnable]) + "

"; + content += + "

HVP_gpioPcsDcdcPwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsDcdcPwmEnable]) + "

"; + content += "

HVP_gpioPcsChargePwmEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioPcsChargePwmEnable]) + + "

"; + content += + "

HVP_gpioFcContPowerEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioFcContPowerEnable]) + "

"; content += "

HVP_gpioHvilEnable: " + String(Fault[datalayer_extended.tesla.HVP_gpioHvilEnable]) + "

"; content += "

HVP_gpioSecDrdy: " + String(Fault[datalayer_extended.tesla.HVP_gpioSecDrdy]) + "

"; content += "

HVP_shuntCurrentDebug: " + String(HVP_shuntCurrentDebug) + " A

"; content += "

HVP_packCurrentMia: " + String(noYes[datalayer_extended.tesla.HVP_packCurrentMia]) + "

"; content += "

HVP_auxCurrentMia: " + String(noYes[datalayer_extended.tesla.HVP_auxCurrentMia]) + "

"; content += "

HVP_currentSenseMia: " + String(noYes[datalayer_extended.tesla.HVP_currentSenseMia]) + "

"; - content += "

HVP_shuntRefVoltageMismatch: " + String(noYes[datalayer_extended.tesla.HVP_shuntRefVoltageMismatch]) + "

"; - content += "

HVP_shuntThermistorMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntThermistorMia]) + "

"; - content += "

HVP_shuntHwMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntHwMia]) + "

"; - //content += "

HVP_fcLinkVoltage: " + String(HVP_fcLinkVoltage) + " V

"; // Not giving useable data - //content += "

HVP_packNegativeV: " + String(HVP_packNegativeV) + " V

"; // Not giving useable data - //content += "

HVP_packPositiveV: " + String(HVP_packPositiveV) + " V

"; // Not giving useable data - //content += "

HVP_dcLinkNegativeV: " + String(HVP_dcLinkNegativeV) + " V

"; // Not giving useable data - //content += "

HVP_dcLinkPositiveV: " + String(HVP_dcLinkPositiveV) + " V

"; // Not giving useable data + content += + "

HVP_shuntRefVoltageMismatch: " + String(noYes[datalayer_extended.tesla.HVP_shuntRefVoltageMismatch]) + + "

"; + content += + "

HVP_shuntThermistorMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntThermistorMia]) + "

"; + content += "

HVP_shuntHwMia: " + String(noYes[datalayer_extended.tesla.HVP_shuntHwMia]) + "

"; + //content += "

HVP_fcLinkVoltage: " + String(HVP_fcLinkVoltage) + " V

"; // Not giving useable data + //content += "

HVP_packNegativeV: " + String(HVP_packNegativeV) + " V

"; // Not giving useable data + //content += "

HVP_packPositiveV: " + String(HVP_packPositiveV) + " V

"; // Not giving useable data + //content += "

HVP_dcLinkNegativeV: " + String(HVP_dcLinkNegativeV) + " V

"; // Not giving useable data + //content += "

HVP_dcLinkPositiveV: " + String(HVP_dcLinkPositiveV) + " V

"; // Not giving useable data //content += "

HVP_fcLinkNegativeV: " + String(HVP_fcLinkNegativeV) + " V

"; // Not giving useable data //content += "

HVP_fcContCoilCurrent: " + String(HVP_fcContCoilCurrent) + " A

"; // Not giving useable data - //content += "

HVP_fcContVoltage: " + String(HVP_fcContVoltage) + " V

"; // Not giving useable data - //content += "

HVP_fcLinkPositiveV: " + String(HVP_fcLinkPositiveV) + " V

"; // Not giving useable data + //content += "

HVP_fcContVoltage: " + String(HVP_fcContVoltage) + " V

"; // Not giving useable data + //content += "

HVP_fcLinkPositiveV: " + String(HVP_fcLinkPositiveV) + " V

"; // Not giving useable data //content += "

HVP_shuntRefVoltageDbg: " + String(HVP_shuntRefVoltageDbg) + " V

"; // Not giving useable data //content += "

HVP_shuntAuxCurrentDbg: " + String(HVP_shuntAuxCurrentDbg) + " A

"; // Not giving useable data //content += "

HVP_shuntBarTempDbg: " + String(HVP_shuntBarTempDbg) + " DegC

"; // Not giving useable data From d049d9f49eb7110c2b341c523f79a7aafc8b4e93 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 15 Jan 2025 20:04:53 +1300 Subject: [PATCH 17/26] Update TESLA-BATTERY.cpp Update double battery --- Software/src/battery/TESLA-BATTERY.cpp | 38 ++++++++++++++++---------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 274e4aec7..2a1758dba 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -510,8 +510,8 @@ static bool battery2_fcCtrsOpenRequested = false; static uint8_t battery2_fcCtrsRequestStatus = 0; static bool battery2_fcCtrsResetRequestRequired = false; static bool battery2_fcLinkAllowedToEnergize = false; -//0x72A -memcpy(datalayer_extended.tesla.BMS2_SerialNumber, BMS2_SerialNumber, sizeof(BMS2_SerialNumber)); +//0x72A: BMS_serialNumber +static uint8_t BMS2_SerialNumber[14] = {0}; // Stores raw HEX values for ASCII chars //0x212: 530 BMS_status static bool battery2_BMS_hvacPowerRequest = false; static bool battery2_BMS_notEnoughPowerForDrive = false; @@ -597,7 +597,7 @@ static bool HVP2_gpioPyroIsoEn = false; static bool HVP2_gpioCpFaultIn = false; static bool HVP2_gpioPackContPowerEn = false; static bool HVP2_gpioHvCablesOk = false; -static bool HVP2_gpioHVPSelfEnable = false; +static bool HVP2_gpioHvpSelfEnable = false; static bool HVP2_gpioLed = false; static bool HVP2_gpioCrashSignal = false; static bool HVP2_gpioShuntDataReady = false; @@ -607,7 +607,7 @@ static bool HVP2_gpioBmsEout = false; static bool HVP2_gpioCpFaultOut = false; static bool HVP2_gpioPyroPor = false; static bool HVP2_gpioShuntEn = false; -static bool HVP2_gpioHVPVerEn = false; +static bool HVP2_gpioHvpVerEn = false; static bool HVP2_gpioPackCoontPosFlywheel = false; static bool HVP2_gpioCpLatchEnable = false; static bool HVP2_gpioPcsEnable = false; @@ -789,7 +789,7 @@ static bool battery2_BMS_a151_SW_external_isolation = false; static bool battery2_BMS_a156_SW_BMB_Vref_bad = false; static bool battery2_BMS_a157_SW_HVP_HVS_Comms = false; static bool battery2_BMS_a159_SW_HVP_ECU_Error = false; -static bool battery2_BMS_a16false_SW_DI_Open_Request = false; +static bool battery2_BMS_a161_SW_DI_Open_Request = false; static bool battery2_BMS_a162_SW_No_Power_For_Support = false; static bool battery2_BMS_a163_SW_Contactor_Mismatch = false; static bool battery2_BMS_a164_SW_Uncontrolled_Regen = false; @@ -2013,16 +2013,24 @@ void handle_incoming_can_frame_battery2(CAN_frame rx_frame) { ((rx_frame.data.u8[7] >> 3) & (0x1FU)); //0 "PWR_UP_INIT" 1 "STANDBY" 2 "12V_SUPPORT_ACTIVE" 3 "DIS_HVBUS" 4 "PCHG_FAST_DIS_HVBUS" 5 "PCHG_SLOW_DIS_HVBUS" 6 "PCHG_DWELL_CHARGE" 7 "PCHG_DWELL_WAIT" 8 "PCHG_DI_RECOVERY_WAIT" 9 "PCHG_ACTIVE" 10 "PCHG_FLT_FAST_DIS_HVBUS" 11 "SHUTDOWN" 12 "12V_SUPPORT_FAULTED" 13 "DIS_HVBUS_FAULTED" 14 "PCHG_FAULTED" 15 "CLEAR_FAULTS" 16 "FAULTED" 17 "NUM" ; break; - case 0x252: - //Limits - battery2_regenerative_limit = - ((rx_frame.data.u8[1] << 8) | rx_frame.data.u8[0]) * 0.01; //Example 4715 * 0.01 = 47.15kW - battery2_discharge_limit = - ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]) * 0.013; //Example 2009 * 0.013 = 26.117??? - battery2_max_heat_park = - (((rx_frame.data.u8[5] & 0x03) << 8) | rx_frame.data.u8[4]) * 0.01; //Example 500 * 0.01 = 5kW - battery2_hvac_max_power = - (((rx_frame.data.u8[7] << 6) | ((rx_frame.data.u8[6] & 0xFC) >> 2))) * 0.02; //Example 1000 * 0.02 = 20kW? + case 0x252: //Limit //594 BMS_powerAvailable: + BMS2_maxRegenPower = ((rx_frame.data.u8[1] << 8) | + rx_frame.data.u8[0]); //0|16@1+ (0.01,0) [0|655.35] "kW" //Example 4715 * 0.01 = 47.15kW + BMS2_maxDischargePower = + ((rx_frame.data.u8[3] << 8) | + rx_frame.data.u8[2]); //16|16@1+ (0.013,0) [0|655.35] "kW" //Example 2009 * 0.013 = 26.117??? + BMS2_maxStationaryHeatPower = + (((rx_frame.data.u8[5] & 0x03) << 8) | + rx_frame.data.u8[4]); //32|10@1+ (0.01,0) [0|10.23] "kW" //Example 500 * 0.01 = 5kW + BMS2_hvacPowerBudget = + (((rx_frame.data.u8[7] << 6) | + ((rx_frame.data.u8[6] & 0xFC) >> 2))); //50|10@1+ (0.02,0) [0|20.46] "kW" //Example 1000 * 0.02 = 20kW? + BMS2_notEnoughPowerForHeatPump = + ((rx_frame.data.u8[5] >> 2) & (0x01U)); //BMS_notEnoughPowerForHeatPump : 42|1@1+ (1,0) [0|1] "" Receiver + BMS2_powerLimitState = + (rx_frame.data.u8[6] & + (0x01U)); //BMS_powerLimitsState : 48|1@1+ (1,0) [0|1] 0 "NOT_CALCULATED_FOR_DRIVE" 1 "CALCULATED_FOR_DRIVE" + BMS2_inverterTQF = ((rx_frame.data.u8[7] >> 4) & (0x03U)); break; case 0x132: //battery amps/volts From 95dd73e179804b9ac0ee934f6bb1f1b605334e7b Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 15 Jan 2025 20:05:13 +1300 Subject: [PATCH 18/26] Update TESLA-BATTERY.cpp format --- Software/src/battery/TESLA-BATTERY.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 2a1758dba..ab4011343 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -2015,7 +2015,7 @@ void handle_incoming_can_frame_battery2(CAN_frame rx_frame) { break; case 0x252: //Limit //594 BMS_powerAvailable: BMS2_maxRegenPower = ((rx_frame.data.u8[1] << 8) | - rx_frame.data.u8[0]); //0|16@1+ (0.01,0) [0|655.35] "kW" //Example 4715 * 0.01 = 47.15kW + rx_frame.data.u8[0]); //0|16@1+ (0.01,0) [0|655.35] "kW" //Example 4715 * 0.01 = 47.15kW BMS2_maxDischargePower = ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]); //16|16@1+ (0.013,0) [0|655.35] "kW" //Example 2009 * 0.013 = 26.117??? From af76c7c97b82f84c7fd470be93dac9d0ceed7705 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 15 Jan 2025 20:56:50 +1300 Subject: [PATCH 19/26] Updated 0x2A4 PCS_thermalStatus --- Software/src/battery/TESLA-BATTERY.cpp | 13 ++++++++----- Software/src/datalayer/datalayer_extended.h | 3 +++ .../devboard/webserver/advanced_battery_html.cpp | 14 ++++++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index ab4011343..6655c6f75 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1041,6 +1041,9 @@ void update_values_battery() { //This function maps all the values fetched via //0x2A4 datalayer_extended.tesla.PCS_dcdcTemp = PCS_dcdcTemp; datalayer_extended.tesla.PCS_ambientTemp = PCS_ambientTemp; + datalayer_extended.tesla.PCS_chgPhATemp = PCS_chgPhATemp; + datalayer_extended.tesla.PCS_chgPhBTemp = PCS_chgPhBTemp; + datalayer_extended.tesla.PCS_chgPhCTemp = PCS_chgPhCTemp; //0x2C4 datalayer_extended.tesla.PCS_dcdcMaxLvOutputCurrent = PCS_dcdcMaxLvOutputCurrent; datalayer_extended.tesla.PCS_dcdcCurrentLimit = PCS_dcdcCurrentLimit; @@ -1437,15 +1440,15 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { break; case 0x2A4: //676 PCS_thermalStatus PCS_chgPhATemp = - ((rx_frame.data.u8[1] & (0x07U)) << 8) | (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C + ((rx_frame.data.u8[1] & (0x07U)) << 8) | (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C ((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)) PCS_chgPhBTemp = - ((rx_frame.data.u8[2] & (0x3FU)) << 5) | ((rx_frame.data.u8[1] >> 3) & (0x1FU)); //11|11@1- (0.1,40) [0|0] "C + ((rx_frame.data.u8[2] & (0x3FU)) << 5) | ((rx_frame.data.u8[1] >> 3) & (0x1FU)); //11|11@1- (0.1,40) [0|0] "C ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) PCS_chgPhCTemp = - ((rx_frame.data.u8[4] & (0x07U)) << 8) | (rx_frame.data.u8[3] & (0xFFU)); //24|11@1- (0.1,40) [0|0] "C" + ((rx_frame.data.u8[4] & (0x07U)) << 8) | (rx_frame.data.u8[3] & (0xFFU)); //24|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) PCS_dcdcTemp = ((rx_frame.data.u8[5] & (0x3FU)) << 5) | - ((rx_frame.data.u8[4] >> 3) & (0x1FU)); //35|11@1- (0.1,40) [0|0] "C" + ((rx_frame.data.u8[4] >> 3) & (0x1FU)); //35|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) PCS_ambientTemp = - ((rx_frame.data.u8[7] & (0x07U)) << 8) | (rx_frame.data.u8[6] & (0xFFU)); //48|11@1- (0.1,40) [0|0] "C" + ((rx_frame.data.u8[7] & (0x07U)) << 8) | (rx_frame.data.u8[6] & (0xFFU)); //48|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) break; case 0x2C4: // 708 PCS_logging: not all frames are listed, just ones relating to dcdc mux = (rx_frame.data.u8[0] & (0x1FU)); diff --git a/Software/src/datalayer/datalayer_extended.h b/Software/src/datalayer/datalayer_extended.h index 66fbcf26b..91054cb8f 100644 --- a/Software/src/datalayer/datalayer_extended.h +++ b/Software/src/datalayer/datalayer_extended.h @@ -317,6 +317,9 @@ typedef struct { bool BMS_noFlowRequest = false; uint16_t PCS_dcdcTemp = 0; uint16_t PCS_ambientTemp = 0; + uint16_t PCS_chgPhATemp = 0; + uint16_t PCS_chgPhBTemp = 0; + uint16_t PCS_chgPhCTemp = 0; uint16_t PCS_dcdcMaxLvOutputCurrent = 0; uint16_t PCS_dcdcCurrentLimit = 0; uint16_t PCS_dcdcLvOutputCurrentTempLimit = 0; diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 4c179035c..5639e3101 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -383,8 +383,11 @@ String advanced_battery_processor(const String& var) { float isolationResistance = static_cast(datalayer_extended.tesla.battery_BMS_isolationResistance) * 10; float PCS_dcdcMaxOutputCurrentAllowed = static_cast(datalayer_extended.tesla.battery_PCS_dcdcMaxOutputCurrentAllowed) * 0.1; - float PCS_dcdcTemp = static_cast(datalayer_extended.tesla.PCS_dcdcTemp) * 0.1 - 40; - float PCS_ambientTemp = static_cast(datalayer_extended.tesla.PCS_ambientTemp) * 0.1 - 40; + float PCS_dcdcTemp = static_cast(datalayer_extended.tesla.PCS_dcdcTemp) * 0.1 + 40; + float PCS_ambientTemp = static_cast(datalayer_extended.tesla.PCS_ambientTemp) * 0.1 + 40; + float PCS_chgPhATemp = static_cast(datalayer_extended.tesla.PCS_chgPhATemp) * 0.1 + 40; + float PCS_chgPhBTemp = static_cast(datalayer_extended.tesla.PCS_chgPhBTemp) * 0.1 + 40; + float PCS_chgPhCTemp = static_cast(datalayer_extended.tesla.PCS_chgPhCTemp) * 0.1 + 40; float BMS_maxRegenPower = static_cast(datalayer_extended.tesla.BMS_maxRegenPower) * 0.01; float BMS_maxDischargePower = static_cast(datalayer_extended.tesla.BMS_maxDischargePower) * 0.013; float BMS_maxStationaryHeatPower = static_cast(datalayer_extended.tesla.BMS_maxStationaryHeatPower) * 0.01; @@ -594,8 +597,11 @@ String advanced_battery_processor(const String& var) { //content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

";// Not giving useable data //content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

";// Not giving useable data //0x2A4 676 PCS_thermalStatus - //content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC

"; // Not giving useable data - //content += "

PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC

"; // Not giving useable data + content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC

"; + content += "

PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC

"; + content += "

PCS Chg PhA Temp: " + String(PCS_chgPhATemp) + " DegC

"; + content += "

PCS Chg PhB Temp: " + String(PCS_chgPhBTemp) + " DegC

"; + content += "

PCS Chg PhC Temp: " + String(PCS_chgPhCTemp) + " DegC

"; //0x252 594 BMS_powerAvailable content += "

Max Regen Power: " + String(BMS_maxRegenPower) + " KW

"; content += "

Max Discharge Power: " + String(BMS_maxDischargePower) + " KW

"; From 3439cd097335cc8f31d48a6e30503ebc568df913 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Wed, 15 Jan 2025 20:57:23 +1300 Subject: [PATCH 20/26] format --- Software/src/battery/TESLA-BATTERY.cpp | 17 +++++++++++------ .../webserver/advanced_battery_html.cpp | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 6655c6f75..6d7113fbf 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1440,15 +1440,20 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { break; case 0x2A4: //676 PCS_thermalStatus PCS_chgPhATemp = - ((rx_frame.data.u8[1] & (0x07U)) << 8) | (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C ((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)) - PCS_chgPhBTemp = - ((rx_frame.data.u8[2] & (0x3FU)) << 5) | ((rx_frame.data.u8[1] >> 3) & (0x1FU)); //11|11@1- (0.1,40) [0|0] "C ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) + ((rx_frame.data.u8[1] & (0x07U)) << 8) | + (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C ((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)) + PCS_chgPhBTemp = ((rx_frame.data.u8[2] & (0x3FU)) << 5) | + ((rx_frame.data.u8[1] >> 3) & + (0x1FU)); //11|11@1- (0.1,40) [0|0] "C ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) PCS_chgPhCTemp = - ((rx_frame.data.u8[4] & (0x07U)) << 8) | (rx_frame.data.u8[3] & (0xFFU)); //24|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) + ((rx_frame.data.u8[4] & (0x07U)) << 8) | + (rx_frame.data.u8[3] & (0xFFU)); //24|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) PCS_dcdcTemp = ((rx_frame.data.u8[5] & (0x3FU)) << 5) | - ((rx_frame.data.u8[4] >> 3) & (0x1FU)); //35|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) + ((rx_frame.data.u8[4] >> 3) & + (0x1FU)); //35|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) PCS_ambientTemp = - ((rx_frame.data.u8[7] & (0x07U)) << 8) | (rx_frame.data.u8[6] & (0xFFU)); //48|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) + ((rx_frame.data.u8[7] & (0x07U)) << 8) | + (rx_frame.data.u8[6] & (0xFFU)); //48|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) break; case 0x2C4: // 708 PCS_logging: not all frames are listed, just ones relating to dcdc mux = (rx_frame.data.u8[0] & (0x1FU)); diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 5639e3101..6d965f7bf 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -386,7 +386,7 @@ String advanced_battery_processor(const String& var) { float PCS_dcdcTemp = static_cast(datalayer_extended.tesla.PCS_dcdcTemp) * 0.1 + 40; float PCS_ambientTemp = static_cast(datalayer_extended.tesla.PCS_ambientTemp) * 0.1 + 40; float PCS_chgPhATemp = static_cast(datalayer_extended.tesla.PCS_chgPhATemp) * 0.1 + 40; - float PCS_chgPhBTemp = static_cast(datalayer_extended.tesla.PCS_chgPhBTemp) * 0.1 + 40; + float PCS_chgPhBTemp = static_cast(datalayer_extended.tesla.PCS_chgPhBTemp) * 0.1 + 40; float PCS_chgPhCTemp = static_cast(datalayer_extended.tesla.PCS_chgPhCTemp) * 0.1 + 40; float BMS_maxRegenPower = static_cast(datalayer_extended.tesla.BMS_maxRegenPower) * 0.01; float BMS_maxDischargePower = static_cast(datalayer_extended.tesla.BMS_maxDischargePower) * 0.013; From 94dcd7eb731e9f32b445ae832789eee3f6b51f62 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Thu, 16 Jan 2025 17:36:10 +1300 Subject: [PATCH 21/26] Change to mux read flags More accurate check of reading mux to confirm mux is present. --- Software/src/battery/TESLA-BATTERY.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 6d7113fbf..4f1ba9537 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1191,13 +1191,13 @@ void update_values_battery() { //This function maps all the values fetched via void handle_incoming_can_frame_battery(CAN_frame rx_frame) { static uint8_t mux = 0; static uint16_t temp = 0; + static bool mux0_read = false; + static bool mux1_read = false; + static bool mux2_read = false; switch (rx_frame.ID) { case 0x352: // 850 BMS_energyStatus newer BMS mux = ((rx_frame.data.u8[0]) & 0x03); //BMS_energyStatusIndex M : 0|2@1+ (1,0) [0|0] "" X - if (mux == 1 || mux == 2) { - BMS352_mux = true; - } // autodetect when mux 1 or 2 is used, mux 0 is always present if (mux == 0) { battery_nominal_full_pack_energy_m0 = (((rx_frame.data.u8[3]) << 8) | @@ -1208,6 +1208,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { battery_ideal_energy_remaining_m0 = (((rx_frame.data.u8[7]) << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + mux0_read = true; //Set flag to true } if (mux == 1) { battery_fully_charged = (rx_frame.data.u8[1] & 0x01); //15|1@1+ (1,0) [0|1]//to datalayer_extended @@ -1217,9 +1218,17 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended battery_energy_to_charge_complete_m1 = ((rx_frame.data.u8[7] << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended + mux1_read = true; //Set flag to true } - if (mux == 2) {} - // Additional information needed on this mux, example frame: 02 26 02 20 02 80 00 00 doesn't change + if (mux == 2) { + mux2_read = true; //Set flag to true + } + if (mux0_read && mux1_read && mux2_read) { + mux0_read = false; + mux1_read = false; + mux2_read = false; + } + // Additional information needed on this mux 2, example frame: 02 26 02 20 02 80 00 00 doesn't change // older BMS <2021 without mux battery_nominal_full_pack_energy = //BMS_nominalFullPackEnergy : 0|11@1+ (0.1,0) [0|204.6] "KWh" //((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)); (((rx_frame.data.u8[1] & 0x07) << 8) | (rx_frame.data.u8[0])); //Example 752 (75.2kWh) From 1fd669a0dafb4b7cbec287d2ec62635686e041e8 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Thu, 16 Jan 2025 17:37:03 +1300 Subject: [PATCH 22/26] format change --- Software/src/battery/TESLA-BATTERY.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 4f1ba9537..cba19f397 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1208,7 +1208,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { battery_ideal_energy_remaining_m0 = (((rx_frame.data.u8[7]) << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended - mux0_read = true; //Set flag to true + mux0_read = true; //Set flag to true } if (mux == 1) { battery_fully_charged = (rx_frame.data.u8[1] & 0x01); //15|1@1+ (1,0) [0|1]//to datalayer_extended @@ -1218,10 +1218,10 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[4]); //32|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended battery_energy_to_charge_complete_m1 = ((rx_frame.data.u8[7] << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended - mux1_read = true; //Set flag to true + mux1_read = true; //Set flag to true } if (mux == 2) { - mux2_read = true; //Set flag to true + mux2_read = true; //Set flag to true } if (mux0_read && mux1_read && mux2_read) { mux0_read = false; From d707dcdc45f1a197b252b4c83638f0eac270ce1d Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Fri, 17 Jan 2025 23:03:08 +1300 Subject: [PATCH 23/26] Update 0x2A4 PCS_thermaStatus DBC files did not match up with data received from PCS, adjusted start bit to get data usable. --- Software/src/battery/TESLA-BATTERY.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index cba19f397..1d90a5986 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1450,19 +1450,19 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { case 0x2A4: //676 PCS_thermalStatus PCS_chgPhATemp = ((rx_frame.data.u8[1] & (0x07U)) << 8) | - (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C ((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)) - PCS_chgPhBTemp = ((rx_frame.data.u8[2] & (0x3FU)) << 5) | - ((rx_frame.data.u8[1] >> 3) & - (0x1FU)); //11|11@1- (0.1,40) [0|0] "C ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) - PCS_chgPhCTemp = - ((rx_frame.data.u8[4] & (0x07U)) << 8) | - (rx_frame.data.u8[3] & (0xFFU)); //24|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) - PCS_dcdcTemp = ((rx_frame.data.u8[5] & (0x3FU)) << 5) | - ((rx_frame.data.u8[4] >> 3) & - (0x1FU)); //35|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) - PCS_ambientTemp = - ((rx_frame.data.u8[7] & (0x07U)) << 8) | - (rx_frame.data.u8[6] & (0xFFU)); //48|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) + (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C" ((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)) + PCS_chgPhBTemp = + ((rx_frame.data.u8[2] & (0x3FU)) << 5) | + ((rx_frame.data.u8[1] >> 3) & (0x1FU)); //11|11@1- (0.1,40) [0|0] "C" ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) + PCS_chgPhCTemp = + ((rx_frame.data.u8[2] & (0xC0U)) >> 6) | ((rx_frame.data.u8[3] & (0xFFU)) << 2) | + ((rx_frame.data.u8[4] & (0x03U)) << 10); //22|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) + PCS_dcdcTemp = + ((rx_frame.data.u8[4] >> 1) & 0x1F) | + ((rx_frame.data.u8[5] & 0x3F) << 5); //33|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) + PCS_ambientTemp = + ((rx_frame.data.u8[7] & (0x07U)) << 8) | + (rx_frame.data.u8[6] & (0xFFU)); //44|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) break; case 0x2C4: // 708 PCS_logging: not all frames are listed, just ones relating to dcdc mux = (rx_frame.data.u8[0] & (0x1FU)); From 85cc7fdabe544453c8390c437154e840975be2ce Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Fri, 17 Jan 2025 23:03:40 +1300 Subject: [PATCH 24/26] Update TESLA-BATTERY.cpp format changes --- Software/src/battery/TESLA-BATTERY.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 1d90a5986..58f95e7ea 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1451,18 +1451,18 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { PCS_chgPhATemp = ((rx_frame.data.u8[1] & (0x07U)) << 8) | (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C" ((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)) - PCS_chgPhBTemp = - ((rx_frame.data.u8[2] & (0x3FU)) << 5) | - ((rx_frame.data.u8[1] >> 3) & (0x1FU)); //11|11@1- (0.1,40) [0|0] "C" ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) - PCS_chgPhCTemp = - ((rx_frame.data.u8[2] & (0xC0U)) >> 6) | ((rx_frame.data.u8[3] & (0xFFU)) << 2) | - ((rx_frame.data.u8[4] & (0x03U)) << 10); //22|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) - PCS_dcdcTemp = - ((rx_frame.data.u8[4] >> 1) & 0x1F) | - ((rx_frame.data.u8[5] & 0x3F) << 5); //33|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) - PCS_ambientTemp = - ((rx_frame.data.u8[7] & (0x07U)) << 8) | - (rx_frame.data.u8[6] & (0xFFU)); //44|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) + PCS_chgPhBTemp = ((rx_frame.data.u8[2] & (0x3FU)) << 5) | + ((rx_frame.data.u8[1] >> 3) & + (0x1FU)); //11|11@1- (0.1,40) [0|0] "C" ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) + PCS_chgPhCTemp = ((rx_frame.data.u8[2] & (0xC0U)) >> 6) | ((rx_frame.data.u8[3] & (0xFFU)) << 2) | + ((rx_frame.data.u8[4] & (0x03U)) + << 10); //22|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) + PCS_dcdcTemp = ((rx_frame.data.u8[4] >> 1) & 0x1F) | + ((rx_frame.data.u8[5] & 0x3F) + << 5); //33|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) + PCS_ambientTemp = + ((rx_frame.data.u8[7] & (0x07U)) << 8) | + (rx_frame.data.u8[6] & (0xFFU)); //44|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) break; case 0x2C4: // 708 PCS_logging: not all frames are listed, just ones relating to dcdc mux = (rx_frame.data.u8[0] & (0x1FU)); From e88cfb066a7a37144ca4ae702b5c09b7f3c955e7 Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sun, 19 Jan 2025 20:34:39 +1300 Subject: [PATCH 25/26] correct PCS_thermalStatus bite shift delete 0x352 mux 2 as some batteries do not send mux 2 --- Software/src/battery/TESLA-BATTERY.cpp | 35 +++++-------------- .../webserver/advanced_battery_html.cpp | 10 +++--- 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index 58f95e7ea..b53d6ec7e 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1193,7 +1193,6 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { static uint16_t temp = 0; static bool mux0_read = false; static bool mux1_read = false; - static bool mux2_read = false; switch (rx_frame.ID) { case 0x352: // 850 BMS_energyStatus newer BMS @@ -1220,15 +1219,11 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { ((rx_frame.data.u8[7] << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended mux1_read = true; //Set flag to true } - if (mux == 2) { - mux2_read = true; //Set flag to true - } - if (mux0_read && mux1_read && mux2_read) { + if (mux == 2) {} // Additional information needed on this mux 2, example frame: 02 26 02 20 02 80 00 00 doesn't change + if (mux0_read && mux1_read) { mux0_read = false; mux1_read = false; - mux2_read = false; - } - // Additional information needed on this mux 2, example frame: 02 26 02 20 02 80 00 00 doesn't change + } // older BMS <2021 without mux battery_nominal_full_pack_energy = //BMS_nominalFullPackEnergy : 0|11@1+ (0.1,0) [0|204.6] "KWh" //((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)); (((rx_frame.data.u8[1] & 0x07) << 8) | (rx_frame.data.u8[0])); //Example 752 (75.2kWh) @@ -1448,21 +1443,11 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { BMS_noFlowRequest = ((rx_frame.data.u8[7] >> 7) & (0x01U)); //63|1@1+ (1,0) [0|0] "" break; case 0x2A4: //676 PCS_thermalStatus - PCS_chgPhATemp = - ((rx_frame.data.u8[1] & (0x07U)) << 8) | - (rx_frame.data.u8[0] & (0xFFU)); //0|11@1- (0.1,40) [0|0] "C" ((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)) - PCS_chgPhBTemp = ((rx_frame.data.u8[2] & (0x3FU)) << 5) | - ((rx_frame.data.u8[1] >> 3) & - (0x1FU)); //11|11@1- (0.1,40) [0|0] "C" ((_d[2] & (0x3FU)) << 5) | ((_d[1] >> 3) & (0x1FU)) - PCS_chgPhCTemp = ((rx_frame.data.u8[2] & (0xC0U)) >> 6) | ((rx_frame.data.u8[3] & (0xFFU)) << 2) | - ((rx_frame.data.u8[4] & (0x03U)) - << 10); //22|11@1- (0.1,40) [0|0] "C" ((_d[4] & (0x07U)) << 8) | (_d[3] & (0xFFU)) - PCS_dcdcTemp = ((rx_frame.data.u8[4] >> 1) & 0x1F) | - ((rx_frame.data.u8[5] & 0x3F) - << 5); //33|11@1- (0.1,40) [0|0] "C" ((_d[5] & (0x3FU)) << 5) | ((_d[4] >> 3) & (0x1FU)) - PCS_ambientTemp = - ((rx_frame.data.u8[7] & (0x07U)) << 8) | - (rx_frame.data.u8[6] & (0xFFU)); //44|11@1- (0.1,40) [0|0] "C" ((_d[7] & (0x07U)) << 8) | (_d[6] & (0xFFU)) + PCS_chgPhATemp = (((rx_frame.data.u8[1] & 0x07) << 8) | (rx_frame.data.u8[0] & 0xFF)); //0|11@1- (0.1,40) [0|0] "C" + PCS_chgPhBTemp = (((rx_frame.data.u8[2] & 0x3F) << 5) | ((rx_frame.data.u8[1] >> 3) & 0x1F)); //11|11@1- (0.1,40) [0|0] "C" + PCS_chgPhCTemp = (((rx_frame.data.u8[2] & 0xC0) >> 6) | ((rx_frame.data.u8[3] & 0xFF) << 2) | ((rx_frame.data.u8[4] & 0x03) << 10)); //22|11@1- (0.1,40) [0|0] "C" + PCS_dcdcTemp = (((rx_frame.data.u8[4] >> 1) & 0x1F) | ((rx_frame.data.u8[5] & 0x3F) << 5)); //33|11@1- (0.1,40) [0|0] "C" + PCS_ambientTemp = (((rx_frame.data.u8[7] & 0x07) << 8) | (rx_frame.data.u8[6] & 0xFF)); //44|11@1- (0.1,40) [0|0] "C" break; case 0x2C4: // 708 PCS_logging: not all frames are listed, just ones relating to dcdc mux = (rx_frame.data.u8[0] & (0x1FU)); @@ -1758,9 +1743,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { break; case 0x320: //800 BMS_alertMatrix //BMS_alertMatrix 800 BMS_alertMatrix: 8 VEH mux = (rx_frame.data.u8[0] & (0x0F)); - if (mux == 0) - ; - { //mux0 + if (mux == 0) { //mux0 battery_BMS_matrixIndex = (rx_frame.data.u8[0] & (0x0F)); // 0|4@1+ (1,0) [0|0] "" X battery_BMS_a017_SW_Brick_OV = ((rx_frame.data.u8[2] >> 4) & (0x01)); //20|1@1+ (1,0) [0|0] "" X battery_BMS_a018_SW_Brick_UV = ((rx_frame.data.u8[2] >> 5) & (0x01)); //21|1@1+ (1,0) [0|0] "" X diff --git a/Software/src/devboard/webserver/advanced_battery_html.cpp b/Software/src/devboard/webserver/advanced_battery_html.cpp index 9d2de5e55..04a0ba3d6 100644 --- a/Software/src/devboard/webserver/advanced_battery_html.cpp +++ b/Software/src/devboard/webserver/advanced_battery_html.cpp @@ -597,11 +597,11 @@ String advanced_battery_processor(const String& var) { //content += "

Brick Model Temp Max: " + String(BrickModelTMax) + " C

";// Not giving useable data //content += "

Brick Model Temp Min: " + String(BrickModelTMin) + " C

";// Not giving useable data //0x2A4 676 PCS_thermalStatus - content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp) + " DegC

"; - content += "

PCS Ambient Temp: " + String(PCS_ambientTemp) + " DegC

"; - content += "

PCS Chg PhA Temp: " + String(PCS_chgPhATemp) + " DegC

"; - content += "

PCS Chg PhB Temp: " + String(PCS_chgPhBTemp) + " DegC

"; - content += "

PCS Chg PhC Temp: " + String(PCS_chgPhCTemp) + " DegC

"; + content += "

PCS dcdc Temp: " + String(PCS_dcdcTemp, 2) + " DegC

"; + content += "

PCS Ambient Temp: " + String(PCS_ambientTemp, 2) + " DegC

"; + content += "

PCS Chg PhA Temp: " + String(PCS_chgPhATemp, 2) + " DegC

"; + content += "

PCS Chg PhB Temp: " + String(PCS_chgPhBTemp, 2) + " DegC

"; + content += "

PCS Chg PhC Temp: " + String(PCS_chgPhCTemp, 2) + " DegC

"; //0x252 594 BMS_powerAvailable content += "

Max Regen Power: " + String(BMS_maxRegenPower) + " KW

"; content += "

Max Discharge Power: " + String(BMS_maxDischargePower) + " KW

"; From d676a79ecbceaa8b13effa9e50559523313c79ea Mon Sep 17 00:00:00 2001 From: josiahhiggs <79869367+josiahhiggs@users.noreply.github.com> Date: Sun, 19 Jan 2025 20:34:58 +1300 Subject: [PATCH 26/26] format --- Software/src/battery/TESLA-BATTERY.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Software/src/battery/TESLA-BATTERY.cpp b/Software/src/battery/TESLA-BATTERY.cpp index b53d6ec7e..9be6c52a7 100644 --- a/Software/src/battery/TESLA-BATTERY.cpp +++ b/Software/src/battery/TESLA-BATTERY.cpp @@ -1219,11 +1219,12 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { ((rx_frame.data.u8[7] << 8) | rx_frame.data.u8[6]); //48|16@1+ (0.02,0) [0|0] "kWh"//to datalayer_extended mux1_read = true; //Set flag to true } - if (mux == 2) {} // Additional information needed on this mux 2, example frame: 02 26 02 20 02 80 00 00 doesn't change + if (mux == 2) { + } // Additional information needed on this mux 2, example frame: 02 26 02 20 02 80 00 00 doesn't change if (mux0_read && mux1_read) { mux0_read = false; mux1_read = false; - } + } // older BMS <2021 without mux battery_nominal_full_pack_energy = //BMS_nominalFullPackEnergy : 0|11@1+ (0.1,0) [0|204.6] "KWh" //((_d[1] & (0x07U)) << 8) | (_d[0] & (0xFFU)); (((rx_frame.data.u8[1] & 0x07) << 8) | (rx_frame.data.u8[0])); //Example 752 (75.2kWh) @@ -1443,11 +1444,16 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { BMS_noFlowRequest = ((rx_frame.data.u8[7] >> 7) & (0x01U)); //63|1@1+ (1,0) [0|0] "" break; case 0x2A4: //676 PCS_thermalStatus - PCS_chgPhATemp = (((rx_frame.data.u8[1] & 0x07) << 8) | (rx_frame.data.u8[0] & 0xFF)); //0|11@1- (0.1,40) [0|0] "C" - PCS_chgPhBTemp = (((rx_frame.data.u8[2] & 0x3F) << 5) | ((rx_frame.data.u8[1] >> 3) & 0x1F)); //11|11@1- (0.1,40) [0|0] "C" - PCS_chgPhCTemp = (((rx_frame.data.u8[2] & 0xC0) >> 6) | ((rx_frame.data.u8[3] & 0xFF) << 2) | ((rx_frame.data.u8[4] & 0x03) << 10)); //22|11@1- (0.1,40) [0|0] "C" - PCS_dcdcTemp = (((rx_frame.data.u8[4] >> 1) & 0x1F) | ((rx_frame.data.u8[5] & 0x3F) << 5)); //33|11@1- (0.1,40) [0|0] "C" - PCS_ambientTemp = (((rx_frame.data.u8[7] & 0x07) << 8) | (rx_frame.data.u8[6] & 0xFF)); //44|11@1- (0.1,40) [0|0] "C" + PCS_chgPhATemp = + (((rx_frame.data.u8[1] & 0x07) << 8) | (rx_frame.data.u8[0] & 0xFF)); //0|11@1- (0.1,40) [0|0] "C" + PCS_chgPhBTemp = + (((rx_frame.data.u8[2] & 0x3F) << 5) | ((rx_frame.data.u8[1] >> 3) & 0x1F)); //11|11@1- (0.1,40) [0|0] "C" + PCS_chgPhCTemp = (((rx_frame.data.u8[2] & 0xC0) >> 6) | ((rx_frame.data.u8[3] & 0xFF) << 2) | + ((rx_frame.data.u8[4] & 0x03) << 10)); //22|11@1- (0.1,40) [0|0] "C" + PCS_dcdcTemp = + (((rx_frame.data.u8[4] >> 1) & 0x1F) | ((rx_frame.data.u8[5] & 0x3F) << 5)); //33|11@1- (0.1,40) [0|0] "C" + PCS_ambientTemp = + (((rx_frame.data.u8[7] & 0x07) << 8) | (rx_frame.data.u8[6] & 0xFF)); //44|11@1- (0.1,40) [0|0] "C" break; case 0x2C4: // 708 PCS_logging: not all frames are listed, just ones relating to dcdc mux = (rx_frame.data.u8[0] & (0x1FU)); @@ -1743,7 +1749,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { break; case 0x320: //800 BMS_alertMatrix //BMS_alertMatrix 800 BMS_alertMatrix: 8 VEH mux = (rx_frame.data.u8[0] & (0x0F)); - if (mux == 0) { //mux0 + if (mux == 0) { //mux0 battery_BMS_matrixIndex = (rx_frame.data.u8[0] & (0x0F)); // 0|4@1+ (1,0) [0|0] "" X battery_BMS_a017_SW_Brick_OV = ((rx_frame.data.u8[2] >> 4) & (0x01)); //20|1@1+ (1,0) [0|0] "" X battery_BMS_a018_SW_Brick_UV = ((rx_frame.data.u8[2] >> 5) & (0x01)); //21|1@1+ (1,0) [0|0] "" X