mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 17:59:27 +02:00
Move stillalive handler to actual messages
This commit is contained in:
parent
c01291d15f
commit
93b30241da
1 changed files with 12 additions and 2 deletions
|
@ -332,6 +332,7 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
|
|
||||||
switch (rx_frame.ID) {
|
switch (rx_frame.ID) {
|
||||||
case 0x17F0007B: // BMS 500ms
|
case 0x17F0007B: // BMS 500ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x17F0007B;
|
can_msg_received |= RX_0x17F0007B;
|
||||||
component_protection_active = (rx_frame.data.u8[0] & 0x01);
|
component_protection_active = (rx_frame.data.u8[0] & 0x01);
|
||||||
shutdown_active = ((rx_frame.data.u8[0] & 0x02) >> 1);
|
shutdown_active = ((rx_frame.data.u8[0] & 0x02) >> 1);
|
||||||
|
@ -347,11 +348,13 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
case 0x17FE007B: // BMS - Offboard tester diag response
|
case 0x17FE007B: // BMS - Offboard tester diag response
|
||||||
break;
|
break;
|
||||||
case 0x1B00007B: // BMS - 200ms
|
case 0x1B00007B: // BMS - 200ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
wakeup_type =
|
wakeup_type =
|
||||||
((rx_frame.data.u8[1] & 0x10) >> 4); //0 passive, SG has not woken up, 1 active, SG has woken up the network
|
((rx_frame.data.u8[1] & 0x10) >> 4); //0 passive, SG has not woken up, 1 active, SG has woken up the network
|
||||||
instrumentation_cluster_request = ((rx_frame.data.u8[1] & 0x40) >> 6); //True/false
|
instrumentation_cluster_request = ((rx_frame.data.u8[1] & 0x40) >> 6); //True/false
|
||||||
break;
|
break;
|
||||||
case 0x12DD54D0: // BMS Limits 100ms
|
case 0x12DD54D0: // BMS Limits 100ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x12DD54D0;
|
can_msg_received |= RX_0x12DD54D0;
|
||||||
max_discharge_power_watt =
|
max_discharge_power_watt =
|
||||||
((rx_frame.data.u8[6] & 0x07) << 10) | (rx_frame.data.u8[5] << 2) | (rx_frame.data.u8[4] & 0xC0) >> 6; //*100
|
((rx_frame.data.u8[6] & 0x07) << 10) | (rx_frame.data.u8[5] << 2) | (rx_frame.data.u8[4] & 0xC0) >> 6; //*100
|
||||||
|
@ -361,6 +364,7 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
max_charge_current_amp = ((rx_frame.data.u8[4] & 0x3F) << 7) | (rx_frame.data.u8[3] >> 1); //*0.2
|
max_charge_current_amp = ((rx_frame.data.u8[4] & 0x3F) << 7) | (rx_frame.data.u8[3] >> 1); //*0.2
|
||||||
break;
|
break;
|
||||||
case 0x12DD54D1: // BMS 100ms
|
case 0x12DD54D1: // BMS 100ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x12DD54D1;
|
can_msg_received |= RX_0x12DD54D1;
|
||||||
if (rx_frame.data.u8[6] != 0xFE || rx_frame.data.u8[7] != 0xFF) { // Init state, values below invalid
|
if (rx_frame.data.u8[6] != 0xFE || rx_frame.data.u8[7] != 0xFF) { // Init state, values below invalid
|
||||||
battery_SOC = ((rx_frame.data.u8[3] & 0x0F) << 7) | (rx_frame.data.u8[2] >> 1); //*0.05
|
battery_SOC = ((rx_frame.data.u8[3] & 0x0F) << 7) | (rx_frame.data.u8[2] >> 1); //*0.05
|
||||||
|
@ -372,6 +376,7 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
warning_support = (rx_frame.data.u8[1] & 0x70) >> 4;
|
warning_support = (rx_frame.data.u8[1] & 0x70) >> 4;
|
||||||
break;
|
break;
|
||||||
case 0x12DD54D2: // BMS 100ms
|
case 0x12DD54D2: // BMS 100ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x12DD54D2;
|
can_msg_received |= RX_0x12DD54D2;
|
||||||
battery_heating_active = (rx_frame.data.u8[4] & 0x40) >> 6;
|
battery_heating_active = (rx_frame.data.u8[4] & 0x40) >> 6;
|
||||||
heating_request = (rx_frame.data.u8[5] & 0xE0) >> 5;
|
heating_request = (rx_frame.data.u8[5] & 0xE0) >> 5;
|
||||||
|
@ -380,6 +385,7 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
power_battery_heating_req_watt = rx_frame.data.u8[7];
|
power_battery_heating_req_watt = rx_frame.data.u8[7];
|
||||||
break;
|
break;
|
||||||
case 0x1A555550: // BMS 500ms
|
case 0x1A555550: // BMS 500ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x1A555550;
|
can_msg_received |= RX_0x1A555550;
|
||||||
balancing_active = (rx_frame.data.u8[1] & 0xC0) >> 6;
|
balancing_active = (rx_frame.data.u8[1] & 0xC0) >> 6;
|
||||||
charging_active = (rx_frame.data.u8[2] & 0x01);
|
charging_active = (rx_frame.data.u8[2] & 0x01);
|
||||||
|
@ -389,6 +395,7 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
isolation_resistance_kOhm = (((rx_frame.data.u8[3] & 0x1F) << 7) | rx_frame.data.u8[2] >> 1); //*5
|
isolation_resistance_kOhm = (((rx_frame.data.u8[3] & 0x1F) << 7) | rx_frame.data.u8[2] >> 1); //*5
|
||||||
break;
|
break;
|
||||||
case 0x1A555551: // BMS 500ms
|
case 0x1A555551: // BMS 500ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x1A555551;
|
can_msg_received |= RX_0x1A555551;
|
||||||
battery_heating_installed = (rx_frame.data.u8[1] & 0x20) >> 5;
|
battery_heating_installed = (rx_frame.data.u8[1] & 0x20) >> 5;
|
||||||
error_NT_circuit = (rx_frame.data.u8[1] & 0x40) >> 6;
|
error_NT_circuit = (rx_frame.data.u8[1] & 0x40) >> 6;
|
||||||
|
@ -402,6 +409,7 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
return_temperature_C = rx_frame.data.u8[7]; //*0,5 -40
|
return_temperature_C = rx_frame.data.u8[7]; //*0,5 -40
|
||||||
break;
|
break;
|
||||||
case 0x1A5555B2: // BMS
|
case 0x1A5555B2: // BMS
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x1A5555B2;
|
can_msg_received |= RX_0x1A5555B2;
|
||||||
performance_index_discharge_peak_temperature_percentage =
|
performance_index_discharge_peak_temperature_percentage =
|
||||||
(((rx_frame.data.u8[3] & 0x07) << 6) | rx_frame.data.u8[2] >> 2); //*0.2
|
(((rx_frame.data.u8[3] & 0x07) << 6) | rx_frame.data.u8[2] >> 2); //*0.2
|
||||||
|
@ -411,6 +419,7 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
temperature_status_charge = (((rx_frame.data.u8[2] & 0x03) << 1) | rx_frame.data.u8[1] >> 7);
|
temperature_status_charge = (((rx_frame.data.u8[2] & 0x03) << 1) | rx_frame.data.u8[1] >> 7);
|
||||||
break;
|
break;
|
||||||
case 0x16A954A6: // BMS
|
case 0x16A954A6: // BMS
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
can_msg_received |= RX_0x16A954A6;
|
can_msg_received |= RX_0x16A954A6;
|
||||||
BMS_16A954A6_counter = (rx_frame.data.u8[1] & 0x0F); // Can be used to check CAN signal integrity later on
|
BMS_16A954A6_counter = (rx_frame.data.u8[1] & 0x0F); // Can be used to check CAN signal integrity later on
|
||||||
isolation_fault = (rx_frame.data.u8[2] & 0xE0) >> 5;
|
isolation_fault = (rx_frame.data.u8[2] & 0xE0) >> 5;
|
||||||
|
@ -424,11 +433,13 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
datalayer.battery.status.cell_max_voltage_mV = actual_cellvoltage_highest_mV + 1000;
|
datalayer.battery.status.cell_max_voltage_mV = actual_cellvoltage_highest_mV + 1000;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x16A954F8: // BMS
|
case 0x16A954F8: // BMS
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
predicted_power_dyn_standard_watt = ((rx_frame.data.u8[6] << 1) | rx_frame.data.u8[5] >> 7); //*50
|
predicted_power_dyn_standard_watt = ((rx_frame.data.u8[6] << 1) | rx_frame.data.u8[5] >> 7); //*50
|
||||||
predicted_time_dyn_standard_minutes = rx_frame.data.u8[7];
|
predicted_time_dyn_standard_minutes = rx_frame.data.u8[7];
|
||||||
break;
|
break;
|
||||||
case 0x16A954E8: // BMS Temperature and cellvoltages - 180ms
|
case 0x16A954E8: // BMS Temperature and cellvoltages - 180ms
|
||||||
|
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
||||||
mux = (rx_frame.data.u8[0] & 0x0F);
|
mux = (rx_frame.data.u8[0] & 0x0F);
|
||||||
switch (mux) {
|
switch (mux) {
|
||||||
case 0: // Temperatures 1-56. Value is 0xFD if sensor not present
|
case 0: // Temperatures 1-56. Value is 0xFD if sensor not present
|
||||||
|
@ -1265,7 +1276,6 @@ void MebBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
|
|
||||||
if (can_msg_received == 0xFFFF && nof_cells_determined) {
|
if (can_msg_received == 0xFFFF && nof_cells_determined) {
|
||||||
if (datalayer.battery.status.real_bms_status == BMS_DISCONNECTED)
|
if (datalayer.battery.status.real_bms_status == BMS_DISCONNECTED)
|
||||||
datalayer.battery.status.real_bms_status = BMS_STANDBY;
|
datalayer.battery.status.real_bms_status = BMS_STANDBY;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue