diff --git a/Software/Software.ino b/Software/Software.ino index 3b089a5b..10dc413e 100644 --- a/Software/Software.ino +++ b/Software/Software.ino @@ -897,7 +897,9 @@ void transmit_can(CAN_frame_t* tx_frame, int interface) { MCP2515Frame.data[i] = tx_frame->data.u8[i]; } can.tryToSend(MCP2515Frame); -#endif +#else // Interface not compiled, and settings try to use it + set_event(EVENT_INTERFACE_MISSING, interface); +#endif //DUAL_CAN } break; case CAN_ADDON_FD_MCP2518: #ifdef CAN_FD @@ -909,7 +911,9 @@ void transmit_can(CAN_frame_t* tx_frame, int interface) { MCP2518Frame.data[i] = tx_frame->data.u8[i]; } canfd.tryToSend(MCP2518Frame); -#endif +#else // Interface not compiled, and settings try to use it + set_event(EVENT_INTERFACE_MISSING, interface); +#endif //CAN_FD break; default: // Invalid interface sent with function call. TODO: Raise event that coders messed up diff --git a/Software/USER_SETTINGS.cpp b/Software/USER_SETTINGS.cpp index 780b995a..0171c248 100644 --- a/Software/USER_SETTINGS.cpp +++ b/Software/USER_SETTINGS.cpp @@ -3,8 +3,7 @@ #include "src/devboard/hal/hal.h" /* This file contains all the battery settings and limits */ /* They can be defined here, or later on in the WebUI */ - -/* Select which CAN interface each component is connected to */ +/* Most important is to select which CAN interface each component is connected to */ /* CAN_NATIVE = Native CAN port on the LilyGo & Stark hardware CANFD_NATIVE = Native CANFD port on the Stark CMR hardware @@ -13,12 +12,11 @@ CAN_ADDON_FD_MCP2518 = Add-on CAN-FD MCP2518 connected to GPIO pins */ volatile CAN_Configuration can_config = { - .battery = CAN_NATIVE, // Which CAN is your battery connected to? - .inverter = CAN_NATIVE // Which CAN is your inverter connected to? (No need to configure incase you use RS485) - .battery_double = CAN_ADDON_MCP2515, // (OPTIONAL) Which CAN is your second battery connected to? - .charger = CAN_NATIVE; // (OPTIONAL) Which CAN is your charger connected to? -} -; + .battery = CAN_NATIVE, // Which CAN is your battery connected to? + .inverter = CAN_NATIVE, // Which CAN is your inverter connected to? (No need to configure incase you use RS485) + .battery_double = CAN_ADDON_MCP2515, // (OPTIONAL) Which CAN is your second battery connected to? + .charger = CAN_NATIVE // (OPTIONAL) Which CAN is your charger connected to? +}; #ifdef WEBSERVER volatile uint8_t AccessPointEnabled = true; //Set to either true/false to enable direct wifi access point diff --git a/Software/USER_SETTINGS.h b/Software/USER_SETTINGS.h index 0e409c6b..7e9e5481 100644 --- a/Software/USER_SETTINGS.h +++ b/Software/USER_SETTINGS.h @@ -30,7 +30,7 @@ /* Select inverter communication protocol. See Wiki for which to use with your inverter: https://github.com/dalathegreat/BYD-Battery-Emulator-For-Gen24/wiki */ //#define BYD_CAN //Enable this line to emulate a "BYD Battery-Box Premium HVS" over CAN Bus -//#define BYD_MODBUS //Enable this line to emulate a "BYD 11kWh HVM battery" over Modbus RTU +#define BYD_MODBUS //Enable this line to emulate a "BYD 11kWh HVM battery" over Modbus RTU //#define LUNA2000_MODBUS //Enable this line to emulate a "Luna2000 battery" over Modbus RTU //#define PYLON_CAN //Enable this line to emulate a "Pylontech battery" over CAN bus //#define SMA_CAN //Enable this line to emulate a "BYD Battery-Box H 8.9kWh, 7 mod" over CAN bus @@ -48,7 +48,7 @@ //#define INTERLOCK_REQUIRED //Nissan LEAF specific setting, if enabled requires both high voltage conenctors to be seated before starting //#define CONTACTOR_CONTROL //Enable this line to have pins 25,32,33 handle automatic precharge/contactor+/contactor- closing sequence //#define PWM_CONTACTOR_CONTROL //Enable this line to use PWM logic for contactors, which lower power consumption and heat generation -//#define DUAL_CAN //Enable this line to activate an isolated secondary CAN Bus using add-on MCP2515 controller (Needed for some inverters / double battery) +#define DUAL_CAN //Enable this line to activate an isolated secondary CAN Bus using add-on MCP2515 controller (Needed for some inverters / double battery) //#define CAN_FD //Enable this line to activate an isolated secondary CAN-FD bus using add-on MCP2517FD controller (Needed for some batteries) //#define SERIAL_LINK_RECEIVER //Enable this line to receive battery data over RS485 pins from another Lilygo (This LilyGo interfaces with inverter) //#define SERIAL_LINK_TRANSMITTER //Enable this line to send battery data over RS485 pins to another Lilygo (This LilyGo interfaces with battery) @@ -87,8 +87,8 @@ typedef enum { CAN_NATIVE = 0, CANFD_NATIVE = 1, CAN_ADDON_MCP2515 = 2, CAN_ADDON_FD_MCP2518 = 3 } CAN_Interface; typedef struct { CAN_Interface battery; - CAN_Interface battery_double; CAN_Interface inverter; + CAN_Interface battery_double; CAN_Interface charger; } CAN_Configuration; extern volatile CAN_Configuration can_config; diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index 14dc1ea8..e5d24464 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -163,6 +163,7 @@ void init_events(void) { events.entries[EVENT_PRECHARGE_FAILURE].level = EVENT_LEVEL_INFO; events.entries[EVENT_INTERNAL_OPEN_FAULT].level = EVENT_LEVEL_ERROR; events.entries[EVENT_INVERTER_OPEN_CONTACTOR].level = EVENT_LEVEL_INFO; + events.entries[EVENT_INTERFACE_MISSING].level = EVENT_LEVEL_INFO; events.entries[EVENT_MODBUS_INVERTER_MISSING].level = EVENT_LEVEL_INFO; events.entries[EVENT_ERROR_OPEN_CONTACTOR].level = EVENT_LEVEL_INFO; events.entries[EVENT_CELL_UNDER_VOLTAGE].level = EVENT_LEVEL_ERROR; @@ -291,6 +292,8 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) { return "ERROR: High voltage cable removed while battery running. Opening contactors!"; case EVENT_INVERTER_OPEN_CONTACTOR: return "Info: Inverter side opened contactors. Normal operation."; + case EVENT_INTERFACE_MISSING: + return "Info: Configuration trying to use CAN interface not baked into the software. Recompile software!"; case EVENT_ERROR_OPEN_CONTACTOR: return "Info: Too much time spent in error state. Opening contactors, not safe to continue charging. " "Check other error code for reason!"; diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index 850d5d17..86014356 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -6,7 +6,7 @@ // #define INCLUDE_EVENTS_TEST // Enable to run an event test loop, see events_test_on_target.cpp -#define EE_MAGIC_HEADER_VALUE 0x0010 // 0x0000 to 0xFFFF +#define EE_MAGIC_HEADER_VALUE 0x0011 // 0x0000 to 0xFFFF #define GENERATE_ENUM(ENUM) ENUM, #define GENERATE_STRING(STRING) #STRING, @@ -59,6 +59,7 @@ XX(EVENT_PRECHARGE_FAILURE) \ XX(EVENT_INTERNAL_OPEN_FAULT) \ XX(EVENT_INVERTER_OPEN_CONTACTOR) \ + XX(EVENT_INTERFACE_MISSING) \ XX(EVENT_MODBUS_INVERTER_MISSING) \ XX(EVENT_ERROR_OPEN_CONTACTOR) \ XX(EVENT_CELL_UNDER_VOLTAGE) \