From 2cecc3d55a2ccdb335d0f93613689e241eb9ef88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20=C3=96ster?= Date: Mon, 23 Sep 2024 23:22:15 +0300 Subject: [PATCH] Add inverter missing from CAN event, Solax --- Software/src/devboard/utils/events.cpp | 3 +++ Software/src/devboard/utils/events.h | 1 + Software/src/inverter/SOLAX-CAN.cpp | 7 +++++++ 3 files changed, 11 insertions(+) diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index ed41da11..3457bd07 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -148,6 +148,7 @@ void init_events(void) { events.entries[EVENT_CANFD_RX_FAILURE].level = EVENT_LEVEL_ERROR; events.entries[EVENT_CAN_RX_WARNING].level = EVENT_LEVEL_WARNING; events.entries[EVENT_CAN_TX_FAILURE].level = EVENT_LEVEL_ERROR; + events.entries[EVENT_CAN_INVERTER_MISSING].level = EVENT_LEVEL_WARNING; events.entries[EVENT_WATER_INGRESS].level = EVENT_LEVEL_ERROR; events.entries[EVENT_CHARGE_LIMIT_EXCEEDED].level = EVENT_LEVEL_INFO; events.entries[EVENT_DISCHARGE_LIMIT_EXCEEDED].level = EVENT_LEVEL_INFO; @@ -258,6 +259,8 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) { return "ERROR: High amount of corrupted CAN messages detected. Check CAN wire shielding!"; case EVENT_CAN_TX_FAILURE: return "ERROR: CAN messages failed to transmit, or no one on the bus to ACK the message!"; + case EVENT_CAN_INVERTER_MISSING: + return "Warning: Inverter not sending messages on CAN bus. Check wiring!"; case EVENT_CHARGE_LIMIT_EXCEEDED: return "Info: Inverter is charging faster than battery is allowing."; case EVENT_DISCHARGE_LIMIT_EXCEEDED: diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index 570aa302..24f7b282 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -34,6 +34,7 @@ XX(EVENT_CANFD_RX_FAILURE) \ XX(EVENT_CAN_RX_WARNING) \ XX(EVENT_CAN_TX_FAILURE) \ + XX(EVENT_CAN_INVERTER_MISSING) \ XX(EVENT_CHARGE_LIMIT_EXCEEDED) \ XX(EVENT_DISCHARGE_LIMIT_EXCEEDED) \ XX(EVENT_WATER_INGRESS) \ diff --git a/Software/src/inverter/SOLAX-CAN.cpp b/Software/src/inverter/SOLAX-CAN.cpp index 45a5dde8..7aee920c 100644 --- a/Software/src/inverter/SOLAX-CAN.cpp +++ b/Software/src/inverter/SOLAX-CAN.cpp @@ -18,6 +18,7 @@ static unsigned long LastFrameTime = 0; static uint8_t number_of_batteries = 1; static uint16_t capped_capacity_Wh; static uint16_t capped_remaining_capacity_Wh; +static uint16_t inverter_missing_on_can = 0; //CAN message translations from this amazing repository: https://github.com/rand12345/solax_can_bus @@ -88,6 +89,12 @@ void update_values_can_inverter() { //This function maps all the values fetched if (millis() - LastFrameTime >= SolaxTimeout) { datalayer.system.status.inverter_allows_contactor_closing = false; STATE = BATTERY_ANNOUNCE; + inverter_missing_on_can++; + if (inverter_missing_on_can > CAN_STILL_ALIVE) { + set_event(EVENT_CAN_INVERTER_MISSING, 0); + } else { + clear_event(EVENT_CAN_INVERTER_MISSING); + } } //Calculate the required values temperature_average =