mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 10:49:42 +02:00
Merge branch 'main' into can-frames
This commit is contained in:
commit
df7386596c
3 changed files with 41 additions and 37 deletions
|
@ -24,15 +24,30 @@ void PylonInverter::
|
|||
//There are more mappings that could be added, but this should be enough to use as a starting point
|
||||
// Note we map both 0 and 1 messages
|
||||
|
||||
//Charge / Discharge allowed
|
||||
PYLON_4280.data.u8[0] = 0;
|
||||
PYLON_4280.data.u8[1] = 0;
|
||||
PYLON_4280.data.u8[2] = 0;
|
||||
PYLON_4280.data.u8[3] = 0;
|
||||
PYLON_4281.data.u8[0] = 0;
|
||||
PYLON_4281.data.u8[1] = 0;
|
||||
PYLON_4281.data.u8[2] = 0;
|
||||
PYLON_4281.data.u8[3] = 0;
|
||||
//Charge / Discharge allowed flags
|
||||
if (datalayer.battery.status.max_charge_current_dA == 0) {
|
||||
PYLON_4280.data.u8[0] = 0xAA; //Charge forbidden
|
||||
PYLON_4281.data.u8[0] = 0xAA;
|
||||
} else {
|
||||
PYLON_4280.data.u8[0] = 0; //Charge allowed
|
||||
PYLON_4281.data.u8[0] = 0;
|
||||
}
|
||||
|
||||
if (datalayer.battery.status.max_discharge_current_dA == 0) {
|
||||
PYLON_4280.data.u8[1] = 0xAA; //Discharge forbidden
|
||||
PYLON_4281.data.u8[1] = 0xAA;
|
||||
} else {
|
||||
PYLON_4280.data.u8[1] = 0; //Discharge allowed
|
||||
PYLON_4281.data.u8[1] = 0;
|
||||
}
|
||||
|
||||
//In case run into a FAULT state, let inverter know to stop any charge/discharge
|
||||
if (datalayer.battery.status.bms_status == FAULT) {
|
||||
PYLON_4280.data.u8[0] = 0xAA; //Charge forbidden
|
||||
PYLON_4280.data.u8[1] = 0xAA; //Discharge forbidden
|
||||
PYLON_4281.data.u8[0] = 0xAA; //Charge forbidden
|
||||
PYLON_4281.data.u8[1] = 0xAA; //Discharge forbidden
|
||||
}
|
||||
|
||||
//Voltage (370.0)
|
||||
PYLON_4210.data.u8[0] = (datalayer.battery.status.voltage_dV >> 8);
|
||||
|
@ -280,18 +295,6 @@ void PylonInverter::
|
|||
PYLON_4271.data.u8[2] = (datalayer.battery.status.temperature_min_dC >> 8);
|
||||
PYLON_4271.data.u8[3] = (datalayer.battery.status.temperature_min_dC & 0x00FF);
|
||||
#endif // Not INVERT_LOW_HIGH_BYTES
|
||||
|
||||
//In case we run into any errors/faults, we can set charge / discharge forbidden
|
||||
if (datalayer.battery.status.bms_status == FAULT) {
|
||||
PYLON_4280.data.u8[0] = 0xAA;
|
||||
PYLON_4280.data.u8[1] = 0xAA;
|
||||
PYLON_4280.data.u8[2] = 0xAA;
|
||||
PYLON_4280.data.u8[3] = 0xAA;
|
||||
PYLON_4281.data.u8[0] = 0xAA;
|
||||
PYLON_4281.data.u8[1] = 0xAA;
|
||||
PYLON_4281.data.u8[2] = 0xAA;
|
||||
PYLON_4281.data.u8[3] = 0xAA;
|
||||
}
|
||||
}
|
||||
|
||||
void PylonInverter::map_can_frame_to_variable(CAN_frame rx_frame) {
|
||||
|
|
|
@ -9,29 +9,29 @@ void SofarInverter::
|
|||
update_values() { //This function maps all the values fetched from battery CAN to the correct CAN messages
|
||||
|
||||
//Maxvoltage (eg 400.0V = 4000 , 16bits long) Charge Cutoff Voltage
|
||||
SOFAR_351.data.u8[0] = (datalayer.battery.info.max_design_voltage_dV >> 8);
|
||||
SOFAR_351.data.u8[1] = (datalayer.battery.info.max_design_voltage_dV & 0x00FF);
|
||||
SOFAR_351.data.u8[2] = (datalayer.battery.status.max_charge_current_dA >> 8);
|
||||
SOFAR_351.data.u8[3] = (datalayer.battery.status.max_charge_current_dA & 0x00FF);
|
||||
SOFAR_351.data.u8[4] = (datalayer.battery.status.max_discharge_current_dA >> 8);
|
||||
SOFAR_351.data.u8[5] = (datalayer.battery.status.max_discharge_current_dA & 0x00FF);
|
||||
SOFAR_351.data.u8[0] = (datalayer.battery.info.max_design_voltage_dV & 0x00FF);
|
||||
SOFAR_351.data.u8[1] = (datalayer.battery.info.max_design_voltage_dV >> 8);
|
||||
SOFAR_351.data.u8[2] = (datalayer.battery.status.max_charge_current_dA & 0x00FF);
|
||||
SOFAR_351.data.u8[3] = (datalayer.battery.status.max_charge_current_dA >> 8);
|
||||
SOFAR_351.data.u8[4] = (datalayer.battery.status.max_discharge_current_dA & 0x00FF);
|
||||
SOFAR_351.data.u8[5] = (datalayer.battery.status.max_discharge_current_dA >> 8);
|
||||
//Minvoltage (eg 300.0V = 3000 , 16bits long) Discharge Cutoff Voltage
|
||||
SOFAR_351.data.u8[6] = (datalayer.battery.info.min_design_voltage_dV >> 8);
|
||||
SOFAR_351.data.u8[7] = (datalayer.battery.info.min_design_voltage_dV & 0x00FF);
|
||||
SOFAR_351.data.u8[6] = (datalayer.battery.info.min_design_voltage_dV & 0x00FF);
|
||||
SOFAR_351.data.u8[7] = (datalayer.battery.info.min_design_voltage_dV >> 8);
|
||||
|
||||
//SOC
|
||||
SOFAR_355.data.u8[0] = (datalayer.battery.status.reported_soc / 100);
|
||||
SOFAR_355.data.u8[2] = (datalayer.battery.status.soh_pptt / 100);
|
||||
//SOFAR_355.data.u8[6] = (AH_remaining >> 8);
|
||||
//SOFAR_355.data.u8[7] = (AH_remaining & 0x00FF);
|
||||
//SOFAR_355.data.u8[6] = (AH_remaining & 0x00FF);
|
||||
//SOFAR_355.data.u8[7] = (AH_remaining >> 8);
|
||||
|
||||
//Voltage (370.0)
|
||||
SOFAR_356.data.u8[0] = (datalayer.battery.status.voltage_dV >> 8);
|
||||
SOFAR_356.data.u8[1] = (datalayer.battery.status.voltage_dV & 0x00FF);
|
||||
SOFAR_356.data.u8[2] = (datalayer.battery.status.current_dA >> 8);
|
||||
SOFAR_356.data.u8[3] = (datalayer.battery.status.current_dA & 0x00FF);
|
||||
SOFAR_356.data.u8[2] = (datalayer.battery.status.temperature_max_dC >> 8);
|
||||
SOFAR_356.data.u8[3] = (datalayer.battery.status.temperature_max_dC & 0x00FF);
|
||||
SOFAR_356.data.u8[0] = (datalayer.battery.status.voltage_dV & 0x00FF);
|
||||
SOFAR_356.data.u8[1] = (datalayer.battery.status.voltage_dV >> 8);
|
||||
SOFAR_356.data.u8[2] = (datalayer.battery.status.current_dA & 0x00FF);
|
||||
SOFAR_356.data.u8[3] = (datalayer.battery.status.current_dA >> 8);
|
||||
SOFAR_356.data.u8[4] = (datalayer.battery.status.temperature_max_dC & 0x00FF);
|
||||
SOFAR_356.data.u8[5] = (datalayer.battery.status.temperature_max_dC >> 8);
|
||||
}
|
||||
|
||||
void SofarInverter::map_can_frame_to_variable(CAN_frame rx_frame) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue