Add RS485 battery and inverter protocol base classes and refactor RS485/Modbus handling

This commit is contained in:
Jaakko Haakana 2025-05-11 21:50:52 +03:00
parent 64d920185b
commit 637d7f7771
21 changed files with 309 additions and 215 deletions

View file

@ -19,7 +19,7 @@ static uint16_t cellvoltage_max_mV = 0;
static uint16_t SOC = 0;
static bool has_fault = false;
void update_values_battery() {
void DalyBms::update_values() {
datalayer.battery.status.real_soc = SOC;
datalayer.battery.status.voltage_dV = voltage_dV; //value is *10 (3700 = 370.0)
datalayer.battery.status.current_dA = current_dA; //value is *10 (150 = 15.0)
@ -60,7 +60,7 @@ void update_values_battery() {
datalayer.battery.status.real_bms_status = has_fault ? BMS_FAULT : BMS_ACTIVE;
}
void setup_battery(void) { // Performs one time setup at startup
void DalyBms::setup(void) { // Performs one time setup at startup
strncpy(datalayer.system.info.battery_protocol, "DALY RS485", 63);
datalayer.system.info.battery_protocol[63] = '\0';
datalayer.battery.info.number_of_cells = CELL_COUNT;
@ -70,6 +70,8 @@ void setup_battery(void) { // Performs one time setup at startup
datalayer.battery.info.min_cell_voltage_mV = MIN_CELL_VOLTAGE_MV;
datalayer.battery.info.total_capacity_Wh = BATTERY_WH_MAX;
datalayer.system.status.battery_allows_contactor_closing = true;
Serial2.begin(baud_rate(), SERIAL_8N1, RS485_RX_PIN, RS485_TX_PIN);
}
uint8_t calculate_checksum(uint8_t buff[12]) {
@ -154,7 +156,7 @@ void decode_packet(uint8_t command, uint8_t data[8]) {
}
}
void transmit_rs485() {
void DalyBms::transmit_rs485() {
static uint8_t nextCommand = 0x90;
if (millis() - lastPacket > 60) {
@ -178,7 +180,7 @@ void transmit_rs485() {
}
}
void receive_RS485() {
void DalyBms::receive_RS485() {
static uint8_t recv_buff[13] = {0};
static uint8_t recv_len = 0;