diff --git a/Software/src/battery/MG-5-BATTERY.cpp b/Software/src/battery/MG-5-BATTERY.cpp index 2ac314dc..f304c7c3 100644 --- a/Software/src/battery/MG-5-BATTERY.cpp +++ b/Software/src/battery/MG-5-BATTERY.cpp @@ -1,5 +1,6 @@ #include "../include.h" #ifdef MG_5_BATTERY_H +#include "../communication/can/comm_can.h" #include "../datalayer/datalayer.h" #include "../devboard/utils/events.h" #include "MG-5-BATTERY.h" @@ -11,19 +12,8 @@ - Most important ones */ -/* Do not change code below unless you are sure what you are doing */ -static unsigned long previousMillis10 = 0; // will store last time a 10ms CAN Message was send -static unsigned long previousMillis100 = 0; // will store last time a 100ms CAN Message was send - -static int BMS_SOC = 0; - -CAN_frame MG_5_100 = {.FD = false, - .ext_ID = false, - .DLC = 8, - .ID = 0x100, - .data = {0x00, 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00}}; - -void update_values_battery() { //This function maps all the values fetched via CAN to the correct parameters used for modbus +void Mg5Battery:: + update_values() { //This function maps all the values fetched via CAN to the correct parameters used for modbus datalayer.battery.status.real_soc; @@ -44,7 +34,7 @@ void update_values_battery() { //This function maps all the values fetched via datalayer.battery.status.temperature_max_dC; } -void handle_incoming_can_frame_battery(CAN_frame rx_frame) { +void Mg5Battery::handle_incoming_can_frame(CAN_frame rx_frame) { datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE; switch (rx_frame.ID) { case 0x171: //Following messages were detected on a MG5 battery BMS @@ -108,7 +98,7 @@ void handle_incoming_can_frame_battery(CAN_frame rx_frame) { break; } } -void transmit_can_battery(unsigned long currentMillis) { +void Mg5Battery::transmit_can(unsigned long currentMillis) { //Send 10ms message if (currentMillis - previousMillis10 >= INTERVAL_10_MS) { previousMillis10 = currentMillis; @@ -123,7 +113,7 @@ void transmit_can_battery(unsigned long currentMillis) { } } -void setup_battery(void) { // Performs one time setup at startup +void Mg5Battery::setup(void) { // Performs one time setup at startup strncpy(datalayer.system.info.battery_protocol, "MG 5 battery", 63); datalayer.system.info.battery_protocol[63] = '\0'; datalayer.system.status.battery_allows_contactor_closing = true; diff --git a/Software/src/battery/MG-5-BATTERY.h b/Software/src/battery/MG-5-BATTERY.h index 415ed0dc..ee34249a 100644 --- a/Software/src/battery/MG-5-BATTERY.h +++ b/Software/src/battery/MG-5-BATTERY.h @@ -3,14 +3,35 @@ #include #include "../include.h" -#define BATTERY_SELECTED -#define MAX_PACK_VOLTAGE_DV 4040 //5000 = 500.0V -#define MIN_PACK_VOLTAGE_DV 3100 -#define MAX_CELL_DEVIATION_MV 150 -#define MAX_CELL_VOLTAGE_MV 4250 //Battery is put into emergency stop if one cell goes over this value -#define MIN_CELL_VOLTAGE_MV 2700 //Battery is put into emergency stop if one cell goes below this value +#include "CanBattery.h" -void setup_battery(void); -void transmit_can_frame(CAN_frame* tx_frame, int interface); +#define BATTERY_SELECTED +#define SELECTED_BATTERY_CLASS Mg5Battery + +class Mg5Battery : public CanBattery { + public: + virtual void setup(void); + virtual void handle_incoming_can_frame(CAN_frame rx_frame); + virtual void update_values(); + virtual void transmit_can(unsigned long currentMillis); + + private: + static const int MAX_PACK_VOLTAGE_DV = 4040; //5000 = 500.0V + static const int MIN_PACK_VOLTAGE_DV = 3100; + static const int MAX_CELL_DEVIATION_MV = 150; + static const int MAX_CELL_VOLTAGE_MV = 4250; //Battery is put into emergency stop if one cell goes over this value + static const int MIN_CELL_VOLTAGE_MV = 2700; //Battery is put into emergency stop if one cell goes below this value + + unsigned long previousMillis10 = 0; // will store last time a 10ms CAN Message was send + unsigned long previousMillis100 = 0; // will store last time a 100ms CAN Message was send + + int BMS_SOC = 0; + + CAN_frame MG_5_100 = {.FD = false, + .ext_ID = false, + .DLC = 8, + .ID = 0x100, + .data = {0x00, 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00}}; +}; #endif