diff --git a/Software/src/inverter/SOFAR-CAN.cpp b/Software/src/inverter/SOFAR-CAN.cpp index eeb5f715..c97390aa 100644 --- a/Software/src/inverter/SOFAR-CAN.cpp +++ b/Software/src/inverter/SOFAR-CAN.cpp @@ -33,6 +33,17 @@ void SofarInverter:: SOFAR_356.data.u8[4] = (datalayer.battery.status.temperature_max_dC & 0x00FF); SOFAR_356.data.u8[5] = (datalayer.battery.status.temperature_max_dC >> 8); + // frame 0x35E – Manufacturer Name ASCII + memset(SOFAR_35E.data.u8, 0, 8); + strncpy((char*)SOFAR_35E.data.u8, BatteryType, 8); + + //Gets automatically rescaled with SOC scaling. Calculated with max design voltage, better would be to calculate with nominal voltage + calculated_capacity_AH = + (datalayer.battery.info.reported_total_capacity_Wh / (datalayer.battery.info.max_design_voltage_dV * 0.1)); + //Battery Nominal Capacity + SOFAR_35F.data.u8[4] = calculated_capacity_AH & 0x00FF; + SOFAR_35F.data.u8[5] = (calculated_capacity_AH >> 8); + // Charge and discharge consent dependent on SoC with hysteresis at 99% soc //SoC deception only to CAN (we do not touch datalayer) uint16_t spoofed_soc = datalayer.battery.status.reported_soc; @@ -56,7 +67,7 @@ void SofarInverter:: enable_flags = 0x03; // Both charge and discharge allowed } - // Ramka 0x30F – operation mode + // Frame 0x30F – operation mode SOFAR_30F.data.u8[0] = 0x00; // Normal mode SOFAR_30F.data.u8[1] = enable_flags; } diff --git a/Software/src/inverter/SOFAR-CAN.h b/Software/src/inverter/SOFAR-CAN.h index 71db46a9..d779bb71 100644 --- a/Software/src/inverter/SOFAR-CAN.h +++ b/Software/src/inverter/SOFAR-CAN.h @@ -19,8 +19,8 @@ class SofarInverter : public CanInverterProtocol { private: unsigned long previousMillis100 = 0; // will store last time a 100ms CAN Message was send uint8_t battery_index = 0; // Predefined battery ID (0–15) - uint16_t BatteryCapacity_Ah = 180; - const char* BatteryType = "BAT-EMU"; + uint16_t calculated_capacity_AH = 0; // Pack Capacity in AH (Updates based on battery stats) + const char* BatteryType = "BATxEMU"; // Manufacturer name in ASCII //Actual content messages //Note that these are technically extended frames. If more batteries are put in parallel,the first battery sends 0x351 the next battery sends 0x1351 etc. 16 batteries in parallel supported