mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-06 03:50:13 +02:00
Further improve PID polling
This commit is contained in:
parent
cf422afd8e
commit
aa6530b109
4 changed files with 77 additions and 4 deletions
|
@ -51,6 +51,16 @@ void KiaHyundai64Battery::
|
||||||
datalayer_battery_extended->inverterVoltage = inverterVoltage;
|
datalayer_battery_extended->inverterVoltage = inverterVoltage;
|
||||||
memcpy(datalayer_battery_extended->ecu_serial_number, ecu_serial_number, sizeof(ecu_serial_number));
|
memcpy(datalayer_battery_extended->ecu_serial_number, ecu_serial_number, sizeof(ecu_serial_number));
|
||||||
memcpy(datalayer_battery_extended->ecu_version_number, ecu_version_number, sizeof(ecu_version_number));
|
memcpy(datalayer_battery_extended->ecu_version_number, ecu_version_number, sizeof(ecu_version_number));
|
||||||
|
datalayer_battery_extended->cumulative_charge_current_ah = cumulative_charge_current_ah;
|
||||||
|
datalayer_battery_extended->cumulative_discharge_current_ah = cumulative_discharge_current_ah;
|
||||||
|
datalayer_battery_extended->cumulative_energy_charged_kWh = cumulative_energy_charged_kWh;
|
||||||
|
datalayer_battery_extended->cumulative_energy_discharged_kWh = cumulative_energy_discharged_kWh;
|
||||||
|
datalayer_battery_extended->powered_on_total_time = powered_on_total_time;
|
||||||
|
datalayer_battery_extended->isolation_resistance_kOhm = isolation_resistance_kOhm;
|
||||||
|
datalayer_battery_extended->number_of_standard_charging_sessions = number_of_standard_charging_sessions;
|
||||||
|
datalayer_battery_extended->number_of_fastcharging_sessions = number_of_fastcharging_sessions;
|
||||||
|
datalayer_battery_extended->accumulated_normal_charging_energy_kWh = accumulated_normal_charging_energy_kWh;
|
||||||
|
datalayer_battery_extended->accumulated_fastcharging_energy_kWh = accumulated_fastcharging_energy_kWh;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KiaHyundai64Battery::update_number_of_cells() {
|
void KiaHyundai64Battery::update_number_of_cells() {
|
||||||
|
@ -138,9 +148,12 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
KIA64_7E4_poll.data.u8[2] = (uint8_t)((POLL_GROUP_6 & 0xFF00) >> 8);
|
KIA64_7E4_poll.data.u8[2] = (uint8_t)((POLL_GROUP_6 & 0xFF00) >> 8);
|
||||||
KIA64_7E4_poll.data.u8[3] = (uint8_t)(POLL_GROUP_6 & 0x00FF);
|
KIA64_7E4_poll.data.u8[3] = (uint8_t)(POLL_GROUP_6 & 0x00FF);
|
||||||
} else if (poll_data_pid == 7) {
|
} else if (poll_data_pid == 7) {
|
||||||
|
KIA64_7E4_poll.data.u8[2] = (uint8_t)((POLL_GROUP_11 & 0xFF00) >> 8);
|
||||||
|
KIA64_7E4_poll.data.u8[3] = (uint8_t)(POLL_GROUP_11 & 0x00FF);
|
||||||
|
} else if (poll_data_pid == 8) {
|
||||||
KIA64_7E4_poll.data.u8[2] = (uint8_t)((POLL_ECU_SERIAL & 0xFF00) >> 8);
|
KIA64_7E4_poll.data.u8[2] = (uint8_t)((POLL_ECU_SERIAL & 0xFF00) >> 8);
|
||||||
KIA64_7E4_poll.data.u8[3] = (uint8_t)(POLL_ECU_SERIAL & 0x00FF);
|
KIA64_7E4_poll.data.u8[3] = (uint8_t)(POLL_ECU_SERIAL & 0x00FF);
|
||||||
} else if (poll_data_pid == 8) {
|
} else if (poll_data_pid == 9) {
|
||||||
KIA64_7E4_poll.data.u8[2] = (uint8_t)((POLL_ECU_VERSION & 0xFF00) >> 8);
|
KIA64_7E4_poll.data.u8[2] = (uint8_t)((POLL_ECU_VERSION & 0xFF00) >> 8);
|
||||||
KIA64_7E4_poll.data.u8[3] = (uint8_t)(POLL_ECU_VERSION & 0x00FF);
|
KIA64_7E4_poll.data.u8[3] = (uint8_t)(POLL_ECU_VERSION & 0x00FF);
|
||||||
poll_data_pid = 0;
|
poll_data_pid = 0;
|
||||||
|
@ -195,6 +208,8 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
cellvoltages_mv[67] = (rx_frame.data.u8[5] * 20);
|
cellvoltages_mv[67] = (rx_frame.data.u8[5] * 20);
|
||||||
cellvoltages_mv[68] = (rx_frame.data.u8[6] * 20);
|
cellvoltages_mv[68] = (rx_frame.data.u8[6] * 20);
|
||||||
cellvoltages_mv[69] = (rx_frame.data.u8[7] * 20);
|
cellvoltages_mv[69] = (rx_frame.data.u8[7] * 20);
|
||||||
|
} else if (pid_reply == POLL_GROUP_11) {
|
||||||
|
number_of_standard_charging_sessions = ((rx_frame.data.u8[4] << 8) | rx_frame.data.u8[5]);
|
||||||
} else if (pid_reply == POLL_ECU_SERIAL) {
|
} else if (pid_reply == POLL_ECU_SERIAL) {
|
||||||
ecu_serial_number[3] = rx_frame.data.u8[1];
|
ecu_serial_number[3] = rx_frame.data.u8[1];
|
||||||
ecu_serial_number[4] = rx_frame.data.u8[2];
|
ecu_serial_number[4] = rx_frame.data.u8[2];
|
||||||
|
@ -214,7 +229,11 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x22: //Second datarow in PID group
|
case 0x22: //Second datarow in PID group
|
||||||
if (pid_reply == POLL_GROUP_2) {
|
if (pid_reply == POLL_GROUP_1) {
|
||||||
|
//battery_max_temperature = rx_frame.data.u8[5];
|
||||||
|
//battery_min_temperature = rx_frame.data.u8[6];
|
||||||
|
//module_1_temperature = rx_frame.data.u8[7];
|
||||||
|
} else if (pid_reply == POLL_GROUP_2) {
|
||||||
cellvoltages_mv[6] = (rx_frame.data.u8[1] * 20);
|
cellvoltages_mv[6] = (rx_frame.data.u8[1] * 20);
|
||||||
cellvoltages_mv[7] = (rx_frame.data.u8[2] * 20);
|
cellvoltages_mv[7] = (rx_frame.data.u8[2] * 20);
|
||||||
cellvoltages_mv[8] = (rx_frame.data.u8[3] * 20);
|
cellvoltages_mv[8] = (rx_frame.data.u8[3] * 20);
|
||||||
|
@ -240,6 +259,9 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
cellvoltages_mv[76] = (rx_frame.data.u8[7] * 20);
|
cellvoltages_mv[76] = (rx_frame.data.u8[7] * 20);
|
||||||
} else if (pid_reply == POLL_GROUP_6) {
|
} else if (pid_reply == POLL_GROUP_6) {
|
||||||
batteryManagementMode = rx_frame.data.u8[5];
|
batteryManagementMode = rx_frame.data.u8[5];
|
||||||
|
} else if (pid_reply == POLL_GROUP_11) {
|
||||||
|
number_of_fastcharging_sessions = ((rx_frame.data.u8[1] << 8) | rx_frame.data.u8[2]);
|
||||||
|
accumulated_normal_charging_energy_kWh = ((rx_frame.data.u8[5] << 8) | rx_frame.data.u8[6]);
|
||||||
} else if (pid_reply == POLL_ECU_SERIAL) {
|
} else if (pid_reply == POLL_ECU_SERIAL) {
|
||||||
ecu_serial_number[10] = rx_frame.data.u8[1];
|
ecu_serial_number[10] = rx_frame.data.u8[1];
|
||||||
ecu_serial_number[11] = rx_frame.data.u8[2];
|
ecu_serial_number[11] = rx_frame.data.u8[2];
|
||||||
|
@ -258,6 +280,9 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
break;
|
break;
|
||||||
case 0x23: //Third datarow in PID group
|
case 0x23: //Third datarow in PID group
|
||||||
if (pid_reply == POLL_GROUP_1) {
|
if (pid_reply == POLL_GROUP_1) {
|
||||||
|
//module_2_temperature = rx_frame.data.u8[1];
|
||||||
|
//module_3_temperature = rx_frame.data.u8[2];
|
||||||
|
//module_4_temperature = rx_frame.data.u8[3];
|
||||||
temperature_water_inlet = rx_frame.data.u8[6];
|
temperature_water_inlet = rx_frame.data.u8[6];
|
||||||
CellVoltMax_mV = (rx_frame.data.u8[7] * 20); //(volts *50) *20 =mV
|
CellVoltMax_mV = (rx_frame.data.u8[7] * 20); //(volts *50) *20 =mV
|
||||||
} else if (pid_reply == POLL_GROUP_2) {
|
} else if (pid_reply == POLL_GROUP_2) {
|
||||||
|
@ -286,6 +311,8 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
cellvoltages_mv[83] = (rx_frame.data.u8[7] * 20);
|
cellvoltages_mv[83] = (rx_frame.data.u8[7] * 20);
|
||||||
} else if (pid_reply == POLL_GROUP_5) {
|
} else if (pid_reply == POLL_GROUP_5) {
|
||||||
heatertemp = rx_frame.data.u8[7];
|
heatertemp = rx_frame.data.u8[7];
|
||||||
|
} else if (pid_reply == POLL_GROUP_11) {
|
||||||
|
accumulated_fastcharging_energy_kWh = ((rx_frame.data.u8[2] << 8) | rx_frame.data.u8[3]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x24: //Fourth datarow in PID group
|
case 0x24: //Fourth datarow in PID group
|
||||||
|
@ -324,7 +351,12 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x25: //Fifth datarow in PID group
|
case 0x25: //Fifth datarow in PID group
|
||||||
if (pid_reply == POLL_GROUP_2) {
|
if (pid_reply == POLL_GROUP_1) {
|
||||||
|
cumulative_charge_current_ah =
|
||||||
|
((rx_frame.data.u8[1] << 16) | (rx_frame.data.u8[2] << 8) | rx_frame.data.u8[3]);
|
||||||
|
cumulative_discharge_current_ah =
|
||||||
|
((rx_frame.data.u8[5] << 16) | (rx_frame.data.u8[6] << 8) | rx_frame.data.u8[7]);
|
||||||
|
} else if (pid_reply == POLL_GROUP_2) {
|
||||||
cellvoltages_mv[27] = (rx_frame.data.u8[1] * 20);
|
cellvoltages_mv[27] = (rx_frame.data.u8[1] * 20);
|
||||||
cellvoltages_mv[28] = (rx_frame.data.u8[2] * 20);
|
cellvoltages_mv[28] = (rx_frame.data.u8[2] * 20);
|
||||||
cellvoltages_mv[29] = (rx_frame.data.u8[3] * 20);
|
cellvoltages_mv[29] = (rx_frame.data.u8[3] * 20);
|
||||||
|
@ -362,7 +394,11 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x26: //Sixth datarow in PID group
|
case 0x26: //Sixth datarow in PID group
|
||||||
if (pid_reply == POLL_GROUP_5) {
|
if (pid_reply == POLL_GROUP_1) {
|
||||||
|
cumulative_energy_charged_kWh =
|
||||||
|
((rx_frame.data.u8[2] << 16) | (rx_frame.data.u8[3] << 8) | rx_frame.data.u8[4]);
|
||||||
|
cumulative_energy_discharged_HIGH_BYTE = ((rx_frame.data.u8[6] << 8) | rx_frame.data.u8[7]);
|
||||||
|
} else if (pid_reply == POLL_GROUP_5) {
|
||||||
//We have read all cells, check that content is valid:
|
//We have read all cells, check that content is valid:
|
||||||
for (uint8_t i = 85; i < 97; ++i) {
|
for (uint8_t i = 85; i < 97; ++i) {
|
||||||
if (cellvoltages_mv[i] < 300) { // Zero the value if it's below 300
|
if (cellvoltages_mv[i] < 300) { // Zero the value if it's below 300
|
||||||
|
@ -377,6 +413,9 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
break;
|
break;
|
||||||
case 0x27: //Seventh datarow in PID group
|
case 0x27: //Seventh datarow in PID group
|
||||||
if (pid_reply == POLL_GROUP_1) {
|
if (pid_reply == POLL_GROUP_1) {
|
||||||
|
cumulative_energy_discharged_kWh = ((cumulative_energy_discharged_HIGH_BYTE << 8) | rx_frame.data.u8[1]);
|
||||||
|
powered_on_total_time = ((rx_frame.data.u8[2] << 24) | (rx_frame.data.u8[3] << 16) |
|
||||||
|
(rx_frame.data.u8[4] << 8) | rx_frame.data.u8[5]);
|
||||||
BMS_ign = rx_frame.data.u8[6];
|
BMS_ign = rx_frame.data.u8[6];
|
||||||
inverterVoltageFrameHigh = rx_frame.data.u8[7];
|
inverterVoltageFrameHigh = rx_frame.data.u8[7];
|
||||||
}
|
}
|
||||||
|
@ -384,6 +423,7 @@ void KiaHyundai64Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
||||||
case 0x28: //Eighth datarow in PID group
|
case 0x28: //Eighth datarow in PID group
|
||||||
if (pid_reply == POLL_GROUP_1) {
|
if (pid_reply == POLL_GROUP_1) {
|
||||||
inverterVoltage = (inverterVoltageFrameHigh << 8) + rx_frame.data.u8[1];
|
inverterVoltage = (inverterVoltageFrameHigh << 8) + rx_frame.data.u8[1];
|
||||||
|
isolation_resistance_kOhm = ((rx_frame.data.u8[6] << 8) | rx_frame.data.u8[7]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -95,6 +95,17 @@ class KiaHyundai64Battery : public CanBattery {
|
||||||
bool startedUp = false;
|
bool startedUp = false;
|
||||||
uint8_t ecu_serial_number[16] = {0};
|
uint8_t ecu_serial_number[16] = {0};
|
||||||
uint8_t ecu_version_number[16] = {0};
|
uint8_t ecu_version_number[16] = {0};
|
||||||
|
uint32_t cumulative_charge_current_ah = 0;
|
||||||
|
uint32_t cumulative_discharge_current_ah = 0;
|
||||||
|
uint32_t cumulative_energy_charged_kWh = 0;
|
||||||
|
uint16_t cumulative_energy_discharged_HIGH_BYTE = 0;
|
||||||
|
uint32_t cumulative_energy_discharged_kWh = 0;
|
||||||
|
uint32_t powered_on_total_time = 0;
|
||||||
|
uint16_t isolation_resistance_kOhm = 0;
|
||||||
|
uint16_t number_of_standard_charging_sessions = 0;
|
||||||
|
uint16_t number_of_fastcharging_sessions = 0;
|
||||||
|
uint16_t accumulated_normal_charging_energy_kWh = 0;
|
||||||
|
uint16_t accumulated_fastcharging_energy_kWh = 0;
|
||||||
|
|
||||||
CAN_frame KIA_HYUNDAI_200 = {.FD = false,
|
CAN_frame KIA_HYUNDAI_200 = {.FD = false,
|
||||||
.ext_ID = false,
|
.ext_ID = false,
|
||||||
|
@ -146,6 +157,7 @@ class KiaHyundai64Battery : public CanBattery {
|
||||||
static const int POLL_GROUP_4 = 0x0104;
|
static const int POLL_GROUP_4 = 0x0104;
|
||||||
static const int POLL_GROUP_5 = 0x0105;
|
static const int POLL_GROUP_5 = 0x0105;
|
||||||
static const int POLL_GROUP_6 = 0x0106;
|
static const int POLL_GROUP_6 = 0x0106;
|
||||||
|
static const int POLL_GROUP_11 = 0x0111;
|
||||||
static const int POLL_ECU_SERIAL = 0xF18C;
|
static const int POLL_ECU_SERIAL = 0xF18C;
|
||||||
static const int POLL_ECU_VERSION = 0xF191;
|
static const int POLL_ECU_VERSION = 0xF191;
|
||||||
};
|
};
|
||||||
|
|
|
@ -37,6 +37,17 @@ class KiaHyundai64HtmlRenderer : public BatteryHtmlRenderer {
|
||||||
content += "<h4>BMS ignition: " + String(data.BMS_ign) + "</h4>";
|
content += "<h4>BMS ignition: " + String(data.BMS_ign) + "</h4>";
|
||||||
content += "<h4>Battery relay: " + String(data.batteryRelay) + "</h4>";
|
content += "<h4>Battery relay: " + String(data.batteryRelay) + "</h4>";
|
||||||
content += "<h4>Inverter voltage: " + String(data.inverterVoltage) + " V</h4>";
|
content += "<h4>Inverter voltage: " + String(data.inverterVoltage) + " V</h4>";
|
||||||
|
content += "<h4>Isolation resistance: " + String(data.isolation_resistance_kOhm) + " kOhm</h4>";
|
||||||
|
content += "<h4>Power on total time: " + String(data.powered_on_total_time) + " s</h4>";
|
||||||
|
content += "<h4>Fastcharging sessions: " + String(data.number_of_fastcharging_sessions) + " x</h4>";
|
||||||
|
content += "<h4>Slowcharging sessions: " + String(data.number_of_standard_charging_sessions) + " x</h4>";
|
||||||
|
content +=
|
||||||
|
"<h4>Normal charged energy amount: " + String(data.accumulated_normal_charging_energy_kWh) + " kWh</h4>";
|
||||||
|
content += "<h4>Fastcharged energy amount: " + String(data.accumulated_fastcharging_energy_kWh) + " kWh</h4>";
|
||||||
|
content += "<h4>Total amount charged energy: " + String(data.cumulative_energy_charged_kWh) + " kWh</h4>";
|
||||||
|
content += "<h4>Total amount discharged energy: " + String(data.cumulative_energy_discharged_kWh) + " kWh</h4>";
|
||||||
|
content += "<h4>Cumulative charge current: " + String(data.cumulative_charge_current_ah / 10) + " Ah</h4>";
|
||||||
|
content += "<h4>Cumulative discharge current: " + String(data.cumulative_discharge_current_ah / 10) + " Ah</h4>";
|
||||||
};
|
};
|
||||||
|
|
||||||
print_hyundai(*kia_datalayer);
|
print_hyundai(*kia_datalayer);
|
||||||
|
|
|
@ -354,6 +354,16 @@ typedef struct {
|
||||||
uint16_t inverterVoltage = 0;
|
uint16_t inverterVoltage = 0;
|
||||||
uint8_t ecu_serial_number[16] = {0};
|
uint8_t ecu_serial_number[16] = {0};
|
||||||
uint8_t ecu_version_number[16] = {0};
|
uint8_t ecu_version_number[16] = {0};
|
||||||
|
uint32_t cumulative_charge_current_ah = 0;
|
||||||
|
uint32_t cumulative_discharge_current_ah = 0;
|
||||||
|
uint32_t cumulative_energy_charged_kWh = 0;
|
||||||
|
uint32_t cumulative_energy_discharged_kWh = 0;
|
||||||
|
uint32_t powered_on_total_time = 0;
|
||||||
|
uint16_t isolation_resistance_kOhm = 0;
|
||||||
|
uint16_t number_of_standard_charging_sessions = 0;
|
||||||
|
uint16_t number_of_fastcharging_sessions = 0;
|
||||||
|
uint16_t accumulated_normal_charging_energy_kWh = 0;
|
||||||
|
uint16_t accumulated_fastcharging_energy_kWh = 0;
|
||||||
} DATALAYER_INFO_KIAHYUNDAI64;
|
} DATALAYER_INFO_KIAHYUNDAI64;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue