diff --git a/Frontend/src/Components/Faults/FaultsView.js b/Frontend/src/Components/Faults/FaultsView.js index 06afa925..320d02fa 100644 --- a/Frontend/src/Components/Faults/FaultsView.js +++ b/Frontend/src/Components/Faults/FaultsView.js @@ -1,10 +1,10 @@ -import {Box, Tooltip, Image, SimpleGrid, useColorMode} from "@chakra-ui/react"; +import {Box, Tooltip, Image, SimpleGrid, Center, useColorMode} from "@chakra-ui/react"; import { FaultsViewImages } from "./Images/Images"; import CONSTANTS from "../../data-constants.json"; export default function Faults(props) { const fitType = "scale-down"; - const imageHeight = "7vh"; + const imageHeight = "5vh"; const { colorMode } = useColorMode(); @@ -23,7 +23,7 @@ export default function Faults(props) { */ const _checkBooleanData = (dataLabel) => { return ( - (props.data?.[dataLabel][0] ?? CONSTANTS[dataLabel].MIN) !== + (props.data?.[dataLabel][0] ?? CONSTANTS[dataLabel].MIN) != CONSTANTS[dataLabel].MIN ); }; @@ -89,47 +89,153 @@ export default function Faults(props) { }; /** - * Checks all of the BMS failsafe statuses. + * Checks all of the BMS failure statuses. * - * @returns {boolean} true if any of the BMS failsafe statuses are true; false otherwise + * @returns {boolean} true if any of the BMS failure statuses are true; false otherwise */ - const checkBMSFailsafes = () => { + const checkBMSFailures = () => { return ( _checkBooleanData("voltage_failsafe") || _checkBooleanData("current_failsafe") || + _checkBooleanData("relay_failsafe") || + _checkBooleanData("cell_balancing_active") || + _checkBooleanData("charge_interlock_failsafe") || + _checkBooleanData("thermistor_b_value_table_invalid") || _checkBooleanData("input_power_supply_failsafe") || - _checkBooleanData("relay_failsafe") + _checkBooleanData("discharge_limit_enforcement_fault") || + _checkBooleanData("charger_safety_relay_fault") || + _checkBooleanData("internal_hardware_fault") || + _checkBooleanData("internal_heatsink_fault") || + _checkBooleanData("internal_software_fault") || + _checkBooleanData("highest_cell_voltage_too_high_fault") || + _checkBooleanData("lowest_cell_voltage_too_low_fault") || + _checkBooleanData("pack_too_hot_fault") || + _checkBooleanData("internal_communication_fault") || + _checkBooleanData("cell_balancing_stuck_off_fault") || + _checkBooleanData("weak_cell_fault") || + _checkBooleanData("low_cell_voltage_fault") || + _checkBooleanData("open_wiring_fault") || + _checkBooleanData("current_sensor_fault") || + _checkBooleanData("highest_cell_voltage_over_5V_fault") || + _checkBooleanData("cell_asic_fault") || + _checkBooleanData("weak_pack_fault") || + _checkBooleanData("fan_monitor_fault") || + _checkBooleanData("thermistor_fault") || + _checkBooleanData("external_communication_fault") || + _checkBooleanData("redundant_power_supply_fault") || + _checkBooleanData("high_voltage_isolation_fault") || + _checkBooleanData("input_power_supply_fault") || + _checkBooleanData("charge_limit_enforcement_fault") ); }; /** - * Creates a string of all BMS failsafes that have been triggered + * Creates a string of all BMS failures that have been triggered * - * @returns {string|*} A string listing all of the BMS failsafes that are currently triggered + * @returns {string|*} A string listing all of the BMS failures that are currently triggered */ - const getBMSFailsafeString = () => { - let failsafeStrings = []; + const getBMSFailureString = () => { + let failureStrings = []; - // Add any triggered BMS failsafes to failsafeStrings - // The first element pushed to failsafeStrings/added to the list of failsafes should be capitalized, and any + // Add any triggered BMS failures to failureStrings + // The first element pushed to failureStrings/added to the list of failures should be capitalized, and any // additional failsafes should not be capitalized if (_checkBooleanData("voltage_failsafe")) { - failsafeStrings.push("Voltage"); + failureStrings.push("Voltage failsafe"); } if (_checkBooleanData("current_failsafe")) { - failsafeStrings.push( - failsafeStrings.length === 0 ? "Current" : "current" - ); + failureStrings.push(failureStrings.length === 0 ? "Current failsafe" : "current failsafe"); + } + if (_checkBooleanData("relay_failsafe")) { + failureStrings.push(failureStrings.length === 0 ? "Relay failsafe" : "relay failsafe"); + } + if (_checkBooleanData("cell_balancing_active")) { + failureStrings.push(failureStrings.length === 0 ? "Cell balancing inactive" : "cell balancing inactive"); + } + if (_checkBooleanData("charge_interlock_failsafe")) { + failureStrings.push(failureStrings.length === 0 ? "Charge interlock failsafe" : "charge interlock failsafe"); + } + if (_checkBooleanData("thermistor_b_value_table_invalid")) { + failureStrings.push(failureStrings.length === 0 ? "Thermistor B-value table invalid" : "thermistor B-value table invalid"); } if (_checkBooleanData("input_power_supply_failsafe")) { - failsafeStrings.push(failsafeStrings.length === 0 ? "Supply" : "supply"); + failureStrings.push(failureStrings.length === 0 ? "Input power supply failsafe" : "input power supply failsafe"); } - if (_checkBooleanData("relay_failsafe")) { - failsafeStrings.push(failsafeStrings.length === 0 ? "Relay" : "relay"); + if (_checkBooleanData("discharge_limit_enforcement_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Discharge limit enforcement fault" : "discharge limit enforcement fault"); + } + if (_checkBooleanData("charger_safety_relay_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Charger safety relay fault" : "charger safety relay fault"); + } + if (_checkBooleanData("internal_hardware_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Internal hardware fault" : "internal hardware fault"); + } + if (_checkBooleanData("internal_heatsink_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Internal heatsink fault" : "internal heatsink fault"); + } + if (_checkBooleanData("internal_software_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Internal software fault" : "internal software fault"); + } + if (_checkBooleanData("highest_cell_voltage_too_high_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Highest cell voltage too high fault" : "highest cell voltage too high fault"); + } + if (_checkBooleanData("lowest_cell_voltage_too_low_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Lowest cell voltage too low fault" : "lowest cell voltage too low fault"); + } + if (_checkBooleanData("pack_too_hot_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Pack too hot fault" : "pack too hot fault"); + } + if (_checkBooleanData("internal_communication_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Internal communication fault" : "internal communication fault"); + } + if (_checkBooleanData("cell_balancing_stuck_off_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Cell balancing stuck off fault" : "cell balancing stuck off fault"); + } + if (_checkBooleanData("weak_cell_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Weak cell fault" : "weak cell fault"); + } + if (_checkBooleanData("low_cell_voltage_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Low cell voltage fault" : "low cell voltage fault"); + } + if (_checkBooleanData("open_wiring_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Open wiring fault" : "open wiring fault"); + } + if (_checkBooleanData("current_sensor_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Current sensor fault" : "current sensor fault"); + } + if (_checkBooleanData("highest_cell_voltage_over_5V_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Highest cell voltage over 5V fault" : "highest cell voltage over 5V fault"); + } + if (_checkBooleanData("cell_asic_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Cell ASIC fault" : "cell ASIC fault"); + } + if (_checkBooleanData("weak_pack_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Weak pack fault" : "weak pack fault"); + } + if (_checkBooleanData("fan_monitor_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Fan monitor fault" : "fan monitor fault"); + } + if (_checkBooleanData("thermistor_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Thermistor fault" : "thermistor fault"); + } + if (_checkBooleanData("external_communication_fault")) { + failureStrings.push(failureStrings.length === 0 ? "External communication fault" : "external communication fault"); + } + if (_checkBooleanData("redundant_power_supply_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Redundant power supply fault" : "redundant power supply fault"); + } + if (_checkBooleanData("high_voltage_isolation_fault")) { + failureStrings.push(failureStrings.length === 0 ? "High voltage isolation fault" : "high voltage isolation fault"); + } + if (_checkBooleanData("input_power_supply_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Input power supply fault" : "input power supply fault"); + } + if (_checkBooleanData("charge_limit_enforcement_fault")) { + failureStrings.push(failureStrings.length === 0 ? "Charge limit enforcement fault" : "charge limit enforcement fault"); } - // Create and return a formatted string containing a list of the triggered BMS failsafes - return _formFaultString(failsafeStrings, " failsafe", " failsafes"); + // Create and return a formatted string containing a list of the triggered BMS failures + return _formFaultString(failureStrings, " occurred", " occurred"); }; /** @@ -141,19 +247,32 @@ export default function Faults(props) { return ( props.data?.motor_temp[0] > CONSTANTS.motor_temp.MAX || props.data?.motor_temp[0] < CONSTANTS.motor_temp.MIN || + props.data?.motor_controller_temp[0] > CONSTANTS.motor_controller_temp.MAX || + props.data?.motor_controller_temp[0] < CONSTANTS.motor_controller_temp.MIN || + props.data?.dcdc_temp[0] > CONSTANTS.dcdc_temp.MAX || + props.data?.dcdc_temp[0] < CONSTANTS.dcdc_temp.MIN || props.data?.driverIO_temp[0] > CONSTANTS.driverIO_temp.MAX || props.data?.driverIO_temp[0] < CONSTANTS.driverIO_temp.MIN || props.data?.mainIO_temp[0] > CONSTANTS.mainIO_temp.MAX || props.data?.mainIO_temp[0] < CONSTANTS.mainIO_temp.MIN || props.data?.cabin_temp[0] > CONSTANTS.cabin_temp.MAX || props.data?.cabin_temp[0] < CONSTANTS.cabin_temp.MIN || + props.data?.road_temp[0] > CONSTANTS.road_temp.MAX || + props.data?.road_temp[0] < CONSTANTS.road_temp.MIN || + props.data?.brake_temp[0] > CONSTANTS.brake_temp.MAX || + props.data?.brake_temp[0] < CONSTANTS.brake_temp.MIN || + props.data?.air_temp[0] > CONSTANTS.air_temp.MAX || + props.data?.air_temp[0] < CONSTANTS.air_temp.MIN || props.data?.string1_temp[0] > CONSTANTS.string1_temp.MAX || props.data?.string1_temp[0] < CONSTANTS.string1_temp.MIN || props.data?.string2_temp[0] > CONSTANTS.string2_temp.MAX || props.data?.string2_temp[0] < CONSTANTS.string2_temp.MIN || props.data?.string3_temp[0] > CONSTANTS.string3_temp.MAX || props.data?.string3_temp[0] < CONSTANTS.string3_temp.MIN || - props.data?.pack_temp[0] > CONSTANTS.pack_temp.MAX + props.data?.pack_temp[0] < CONSTANTS.pack_temp.MIN || + props.data?.pack_temp[0] > CONSTANTS.pack_temp.MAX || + props.data?.pack_internal_temp[0] < CONSTANTS.pack_internal_temp.MIN || + props.data?.pack_internal_temp[0] > CONSTANTS.pack_internal_temp.MAX ); }; @@ -217,6 +336,20 @@ export default function Faults(props) { "Motor", "motor" ); + _updateTempArrays( + lowTempStrings, + highTempStrings, + "motor_controller_temp", + "Motor controller", + "motor controller" + ); + _updateTempArrays( + lowTempStrings, + highTempStrings, + "dcdc_temp", + "DCDC", + "DCDC" + ); _updateTempArrays( lowTempStrings, highTempStrings, @@ -238,6 +371,27 @@ export default function Faults(props) { "Cabin", "cabin" ); + _updateTempArrays( + lowTempStrings, + highTempStrings, + "road_temp", + "Road", + "road" + ); + _updateTempArrays( + lowTempStrings, + highTempStrings, + "brake_temp", + "Brake", + "brake" + ); + _updateTempArrays( + lowTempStrings, + highTempStrings, + "air_temp", + "Air", + "air" + ); _updateTempArrays( lowTempStrings, highTempStrings, @@ -259,11 +413,20 @@ export default function Faults(props) { "Cell string 3", "cell string 3" ); - if (props.data?.pack_temp[0] > CONSTANTS.pack_temp.MAX) { - highTempStrings.push( - highTempStrings.length === 0 ? "Battery pack" : "battery pack" - ); - } + _updateTempArrays( + lowTempStrings, + highTempStrings, + "pack_temp", + "Battery pack", + "battery pack" + ); + _updateTempArrays( + lowTempStrings, + highTempStrings, + "pack_internal_temp", + "Internal pack", + "internal pack" + ); // Create formatted strings containing lists of items with high and low temperatures const highTempString = _formFaultString(highTempStrings, " temp", " temps"); @@ -274,196 +437,406 @@ export default function Faults(props) { <> {highTempString !== "" ? ( <> - High: {highTempString} + High: {highTempString} +
+ + ) : ( + "" + )} + {lowTempString !== "" ? ( + <> + Low: {lowTempString} + + ) : ( + "" + )} + + ); + }; + + const getHeartbeatString = () => { + let heartbeatStrings = []; + + // Add any failing heartbeats + if (_checkBooleanData("mainIO_heartbeat")) { + heartbeatStrings.push("Main IO"); + } + if (_checkBooleanData("mppt_can_heartbeat")) { + heartbeatStrings.push("MPPT CAN"); + } + if (_checkBooleanData("mcc_can_heartbeat")) { + heartbeatStrings.push("MCC CAN"); + } + if (_checkBooleanData("bms_can_heartbeat")) { + heartbeatStrings.push("BMS CAN"); + } + + // Create and return a formatted string containing a list of heartbeat failures + return _formFaultString( + heartbeatStrings, + " heartbeat was not detected", + " heartbeats were not detected" + ); + }; + + const getMCUString = () => { + let MCUStrings = []; + + if (_checkBooleanData("mcu_check")) { + MCUStrings.push("MCU check"); + } + if (_checkBooleanData("mcu_stat_fdbk")) { + MCUStrings.push("MCU status feedback"); + } + if (_checkBooleanData("mcu_hv_en")) { + MCUStrings.push("MCU HV enable"); + } + + // Create and return a formatted string containing a list of MCU errors + return _formFaultString( + MCUStrings, + " error was found", + " errors were found" + ); + }; + + const getMainDriverPowerString = () => { + let mainDriverPowerStrings = []; + + // Add any erroneous main or driver power values to the tooltip + // The first element pushed should be capitalized, and any additional + // parts of the string should not be + if (_checkBooleanData("main_power_warning")) { + mainDriverPowerStrings.push("Main power warning"); + } + if (_checkBooleanData("main_power_critical")) { + mainDriverPowerStrings.push(mainDriverPowerStrings.length === 0 ? "Main power critical" : "main power critical"); + } + if (_checkBooleanData("main_power_valid")) { + mainDriverPowerStrings.push(mainDriverPowerStrings.length === 0 ? "Main power invalid" : "main power invalid"); + } + if (_checkBooleanData("driver_power_warning")) { + mainDriverPowerStrings.push(mainDriverPowerStrings.length === 0 ? "Driver power warning" : "driver power warning"); + } + if (_checkBooleanData("driver_power_critical")) { + mainDriverPowerStrings.push(mainDriverPowerStrings.length === 0 ? "Driver power critical" : "driver power critical"); + } + if (_checkBooleanData("driver_power_valid")) { + mainDriverPowerStrings.push(mainDriverPowerStrings.length === 0 ? "Driver power invalid" : "driver power invalid"); + } + + // Create and return a formatted string containing a list of board power errors + return _formFaultString( + mainDriverPowerStrings, + " error was found", + " errors were found" + ); + }; + + const getMotorControllerString = () => { + let motorControllerString; + + /** + * Generates a string correlating an overheating status to the actual temperature value and + * displays the action that the motor controller is taking in response + */ + const getTempActionString = () => { + let motorControllerTemperature = props.data?.motor_controller_temp[0]; + let overheatAction = ""; + if (motorControllerTemperature >= 105) { + overheatAction = "drive will stop"; + } else if (motorControllerTemperature >= 95) { + overheatAction = "controller will reduce power to 1/4"; + } else if (motorControllerTemperature >= 85) { + overheatAction = "controller will reduce power to 1/2" + } else { + overheatAction = "no action taken"; + } + return "MC temp: " + motorControllerTemperature + " -> " + overheatAction; + } + + // Set the motor controller status issue for the tooltip + switch(props.data?.mc_status[0]) { + case 0: + // Non-error code. Pass + break; + case 1: + motorControllerString = "Over current (motor or battery current too high)"; + break; + case 2: + motorControllerString = "Unused error code 2, possibly 'Over current (motor or battery current too high)' or 'Hole sensor fault'"; + break; + case 3: + motorControllerString = "Hole sensor fault"; + break; + case 4: + motorControllerString = "Motor locked"; + break; + case 5: + motorControllerString = "Sensor fault 1 (current sensor, thermistor, voltage sensor)"; + break; + case 6: + motorControllerString = "Sensor fault 2 (accelerator voltage out of range)"; + break; + case 7: + motorControllerString = "Unused error code 7, possibly 'Sensor fault 2 (accelerator voltage out of range)' or 'High battery voltage'"; + break; + case 8: + motorControllerString = "High battery voltage"; + break; + case 9: + motorControllerString = "Controller overheating (" + getTempActionString() + ")"; + break; + default: + motorControllerString = "Controller overheating (error code " + props.data?.mc_status[0] + ", " + getTempActionString() + ")"; + break; + } + + // Create and return a string indicating the motor controller error + return motorControllerString; + }; + + const checkCellGroupVoltages = () => { + for (let i = 1; i < 32; i++) { + if (props.data?.[`cell_group${i}_voltage`][0] < CONSTANTS[`cell_group${i}_voltage`].MIN + || props.data?.[`cell_group${i}_voltage`][0] > CONSTANTS[`cell_group${i}_voltage`].MAX) { + return true; + } + } + }; + + const getCellGroupVoltageString = () => { + let highCellGroupVoltageStrings = []; + let lowCellGroupVoltageStrings = []; + + for (let i = 1; i < 32; i++) { + if (props.data?.[`cell_group${i}_voltage`][0] > CONSTANTS[`cell_group${i}_voltage`].MAX) { + highCellGroupVoltageStrings.push(i); + } else if (props.data?.[`cell_group${i}_voltage`][0] < CONSTANTS[`cell_group${i}_voltage`].MIN) { + lowCellGroupVoltageStrings.push(i); + } + } + + // Create formatted strings containing lists of cell groups with high and low voltages + const highCellGroupVoltageString = highCellGroupVoltageStrings.length === 0 ? + "" : "Cell group " + _formFaultString(highCellGroupVoltageStrings, " voltage", " voltages"); + const lowCellGroupVoltageString = lowCellGroupVoltageStrings.length === 0 ? + "" : "Cell group " + _formFaultString(lowCellGroupVoltageStrings, " voltage", " voltages"); + + // Add each string to its own line (if the string is not empty) and return the resulting lines for the tooltip + return ( + <> + {highCellGroupVoltageString !== "" ? ( + <> + High: {highCellGroupVoltageString}
) : ( "" )} - {lowTempString !== "" ? "Low: " + lowTempString : ""} + {lowCellGroupVoltageString !== "" ? ( + <> + Low: {lowCellGroupVoltageString} + + ) : ( + "" + )} ); }; return ( - - {_checkBooleanData("mppt_contactor") ? ( - - - - ) : ( - - )} - {_checkBooleanData("low_contactor") ? ( - - - - ) : ( - - )} - {_checkBooleanData("motor_controller_contactor") ? ( - - - - ) : ( - - )} - {_checkBooleanData("driver_eStop") || - _checkBooleanData("external_eStop") ? ( - - - - ) : ( - - )} - {_checkBooleanData("door") ? ( - - - - ) : ( - - )} - {_checkBooleanData("crash") ? ( - - - - ) : ( - - )} - {_checkBooleanData("mcu_check") ? ( - - - - ) : ( - - )} - {_checkBooleanData("imd_status") ? ( - - - - ) : ( - - )} - {checkBMSFailsafes() ? ( - - - - ) : ( - - )} - {_checkBooleanData("bps_fault") ? ( - - - - ) : ( - - )} - {props.data?.soc[0] < CONSTANTS.soc.MIN ? ( - - - - ) : ( - - )} - {props.data?.mppt_current_out[0] > CONSTANTS.mppt_current_out.MAX ? ( - - - - ) : props.data?.mppt_current_out[0] < CONSTANTS.mppt_current_out.MIN ? ( - - - - ) : ( - - )} - {props.data?.pack_current[0] > CONSTANTS.pack_current.MAX ? ( - - - - ) : props.data?.pack_current[0] < CONSTANTS.pack_current.MIN ? ( - - - - ) : ( - - )} - {props.data?.pack_voltage[0] > CONSTANTS.pack_voltage.MAX ? ( - - - - ) : props.data?.pack_voltage[0] < CONSTANTS.pack_voltage.MIN ? ( - - - - ) : ( - - )} - {!(props.data?.solar_car_connection[0] ?? false) ? ( - - - - ) : ( - - )} - {_checkBooleanData("mainIO_heartbeat") ? ( - - - - ) : ( - - )} - {props.data?.bms_input_voltage[0] > CONSTANTS.bms_input_voltage.MAX ? ( - - - - ) : props.data?.bms_input_voltage[0] < CONSTANTS.bms_input_voltage.MIN ? ( - - - - ) : ( - - )} - {checkTemps() ? ( - - - - ) : ( +
+ + {!(props.data?.solar_car_connection[0] ?? false) ? ( + + + + ) : ( + + )} + {_checkBooleanData("mainIO_heartbeat") + || _checkBooleanData("mppt_can_heartbeat") + || _checkBooleanData("mcc_can_heartbeat") + || _checkBooleanData("bms_can_heartbeat") ? ( + + + + ) : ( + + )} + {_checkBooleanData("mppt_contactor") ? ( + + + + ) : ( + + )} + {_checkBooleanData("low_contactor") ? ( + + + + ) : ( + + )} + {_checkBooleanData("motor_controller_contactor") ? ( + + + + ) : ( + + )} + {_checkBooleanData("crash") ? ( + + + + ) : ( + + )} + {_checkBooleanData("mcu_check") + || _checkBooleanData("mcu_stat_fdbk") + || _checkBooleanData("mcu_hv_en") ? ( + + + + ) : ( + + )} + {_checkBooleanData("door") ? ( + + + + ) : ( + + )} + {_checkBooleanData("driver_eStop") || + _checkBooleanData("external_eStop") ? ( + + + + ) : ( + + )} + {_checkBooleanData("main_power_warning") + || _checkBooleanData("main_power_critical") + || _checkBooleanData("main_power_valid") + || _checkBooleanData("driver_power_warning") + || _checkBooleanData("driver_power_critical") + || _checkBooleanData("driver_power_valid") ? ( + + + + ) : ( + + )} + {_checkBooleanData("bps_fault") ? ( + + + + ) : ( + + )} + {_checkBooleanData("discharge_enable") ? ( + + + + ) : ( + + )} + {_checkBooleanData("imd_status") ? ( + + + + ) : ( + + )} + {checkBMSFailures() ? ( + + + + ) : ( + + )} + {props.data?.mc_status[0] > CONSTANTS.mc_status.MIN ? ( + + + + ) : ( + + )} + {props.data?.pack_current[0] > CONSTANTS.pack_current.MAX ? ( + + + + ) : props.data?.pack_current[0] < CONSTANTS.pack_current.MIN ? ( + + + + ) : ( + + )} + {/* Box to horizontally center the lowest row of faults */} - )} - + {props.data?.pack_voltage[0] > CONSTANTS.pack_voltage.MAX ? ( + + + + ) : props.data?.pack_voltage[0] < CONSTANTS.pack_voltage.MIN ? ( + + + + ) : ( + + )} + {props.data?.mppt_current_out[0] > CONSTANTS.mppt_current_out.MAX ? ( + + + + ) : props.data?.mppt_current_out[0] < CONSTANTS.mppt_current_out.MIN ? ( + + + + ) : ( + + )} + {props.data?.bms_input_voltage[0] > CONSTANTS.bms_input_voltage.MAX ? ( + + + + ) : props.data?.bms_input_voltage[0] < CONSTANTS.bms_input_voltage.MIN ? ( + + + + ) : ( + + )} + {props.data?.soc[0] < CONSTANTS.soc.MIN ? ( + + + + ) : ( + + )} + {checkCellGroupVoltages() ? ( + + + + ) : ( + + )} + {checkTemps() ? ( + + + + ) : ( + + )} + +
); } diff --git a/Frontend/src/Components/Faults/Images/BMS Failures Dark.png b/Frontend/src/Components/Faults/Images/BMS Failures Dark.png new file mode 100644 index 00000000..1f1637f0 Binary files /dev/null and b/Frontend/src/Components/Faults/Images/BMS Failures Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/BMS Failures.png b/Frontend/src/Components/Faults/Images/BMS Failures.png new file mode 100644 index 00000000..e1f2f306 Binary files /dev/null and b/Frontend/src/Components/Faults/Images/BMS Failures.png differ diff --git a/Frontend/src/Components/Faults/Images/BMS Input Voltage Dark.png b/Frontend/src/Components/Faults/Images/BMS Input Voltage Dark.png index 32a673fc..b63c58ea 100644 Binary files a/Frontend/src/Components/Faults/Images/BMS Input Voltage Dark.png and b/Frontend/src/Components/Faults/Images/BMS Input Voltage Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/BMS Input Voltage.png b/Frontend/src/Components/Faults/Images/BMS Input Voltage.png index bb3cce68..f2f0addc 100644 Binary files a/Frontend/src/Components/Faults/Images/BMS Input Voltage.png and b/Frontend/src/Components/Faults/Images/BMS Input Voltage.png differ diff --git a/Frontend/src/Components/Faults/Images/BPS Fault Dark.png b/Frontend/src/Components/Faults/Images/BPS Fault Dark.png new file mode 100644 index 00000000..0b768ebe Binary files /dev/null and b/Frontend/src/Components/Faults/Images/BPS Fault Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/BPS Fault.png b/Frontend/src/Components/Faults/Images/BPS Fault.png index 68f56f49..15ce00c9 100644 Binary files a/Frontend/src/Components/Faults/Images/BPS Fault.png and b/Frontend/src/Components/Faults/Images/BPS Fault.png differ diff --git a/Frontend/src/Components/Faults/Images/Battery Failsafe Dark.png b/Frontend/src/Components/Faults/Images/Battery Failsafe Dark.png deleted file mode 100644 index e7864081..00000000 Binary files a/Frontend/src/Components/Faults/Images/Battery Failsafe Dark.png and /dev/null differ diff --git a/Frontend/src/Components/Faults/Images/Battery Failsafe.png b/Frontend/src/Components/Faults/Images/Battery Failsafe.png deleted file mode 100644 index e6d05f49..00000000 Binary files a/Frontend/src/Components/Faults/Images/Battery Failsafe.png and /dev/null differ diff --git a/Frontend/src/Components/Faults/Images/Cell Group Voltage Dark.png b/Frontend/src/Components/Faults/Images/Cell Group Voltage Dark.png new file mode 100644 index 00000000..c66b592e Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Cell Group Voltage Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/Cell Group Voltage.png b/Frontend/src/Components/Faults/Images/Cell Group Voltage.png new file mode 100644 index 00000000..d8d4402c Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Cell Group Voltage.png differ diff --git a/Frontend/src/Components/Faults/Images/Discharge Enable Dark.png b/Frontend/src/Components/Faults/Images/Discharge Enable Dark.png new file mode 100644 index 00000000..b96fcaf2 Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Discharge Enable Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/Discharge Enable.png b/Frontend/src/Components/Faults/Images/Discharge Enable.png new file mode 100644 index 00000000..cd96c2de Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Discharge Enable.png differ diff --git a/Frontend/src/Components/Faults/Images/Door Dark.png b/Frontend/src/Components/Faults/Images/Door Dark.png index 74c76e8d..b25e52ec 100644 Binary files a/Frontend/src/Components/Faults/Images/Door Dark.png and b/Frontend/src/Components/Faults/Images/Door Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/Door.png b/Frontend/src/Components/Faults/Images/Door.png index 553babf3..80361de4 100644 Binary files a/Frontend/src/Components/Faults/Images/Door.png and b/Frontend/src/Components/Faults/Images/Door.png differ diff --git a/Frontend/src/Components/Faults/Images/IMD Status Dark.png b/Frontend/src/Components/Faults/Images/IMD Status Dark.png index 55467653..ed542959 100644 Binary files a/Frontend/src/Components/Faults/Images/IMD Status Dark.png and b/Frontend/src/Components/Faults/Images/IMD Status Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/IMD Status.png b/Frontend/src/Components/Faults/Images/IMD Status.png index 6da37ac7..79081cb6 100644 Binary files a/Frontend/src/Components/Faults/Images/IMD Status.png and b/Frontend/src/Components/Faults/Images/IMD Status.png differ diff --git a/Frontend/src/Components/Faults/Images/Images.js b/Frontend/src/Components/Faults/Images/Images.js index b9be0078..35df6a3a 100644 --- a/Frontend/src/Components/Faults/Images/Images.js +++ b/Frontend/src/Components/Faults/Images/Images.js @@ -1,10 +1,13 @@ -import BPSFaultImage from "./BPS Fault.png"; import EStopImage from "./E-Stop.png"; + +import BPSFaultImageLight from "./BPS Fault.png"; +import CellGroupVoltageImageLight from "./Cell Group Voltage.png"; +import DischargeEnableLight from "./Discharge Enable.png"; import MPPTContactorImageLight from "./MPPT Contactor.png"; import LowContactorImageLight from "./Low Contactor.png"; import MotorControllerContactorImageLight from "./Motor Controller Contactor.png"; import DoorImageLight from "./Door.png"; -import BatteryFailsafeImageLight from "./Battery Failsafe.png"; +import BMSFailuresImageLight from "./BMS Failures.png"; import IMDStatusImageLight from "./IMD Status.png"; import CrashImageLight from "./Crash.png"; import HighCurrentImageLight from "./High Current.png"; @@ -14,15 +17,22 @@ import LowVoltageImageLight from "./Low Voltage.png"; import LowBatteryImageLight from "./Low Battery.png"; import MCUCheckImageLight from "./MCU Check.png"; import MPPTCurrentImageLight from "./MPPT Current.png"; +import MCStatusImageLight from "./MC Status.png"; import BMSInputVoltageImageLight from "./BMS Input Voltage.png"; import PhysicalConnectionImageLight from "./Physical Connection Lost.png"; import WirelessCommsLostImageLight from "./Wireless Comms Lost.png"; -import HighTemperatureImageLight from "./High Temperature.png"; +import TemperatureImageLight from "./Temperature.png"; +import PackPowerImageLight from "./Pack Power.png"; +import PowerWarningsImageLight from "./Power Warnings.png"; + +import BPSFaultImageDark from "./BPS Fault Dark.png"; +import CellGroupVoltageImageDark from "./Cell Group Voltage Dark.png"; +import DischargeEnableDark from "./Discharge Enable Dark.png"; import MPPTContactorImageDark from "./MPPT Contactor Dark.png"; import LowContactorImageDark from "./Low Contactor Dark.png"; import MotorControllerContactorImageDark from "./Motor Controller Contactor Dark.png"; import DoorImageDark from "./Door Dark.png"; -import BatteryFailsafeImageDark from "./Battery Failsafe Dark.png"; +import BMSFailuresImageDark from "./BMS Failures Dark.png"; import IMDStatusImageDark from "./IMD Status Dark.png"; import CrashImageDark from "./Crash Dark.png"; import HighCurrentImageDark from "./High Current Dark.png"; @@ -32,20 +42,26 @@ import LowVoltageImageDark from "./Low Voltage Dark.png"; import LowBatteryImageDark from "./Low Battery Dark.png"; import MCUCheckImageDark from "./MCU Check Dark.png"; import MPPTCurrentImageDark from "./MPPT Current Dark.png"; +import MCStatusImageDark from "./MC Status Dark.png"; import BMSInputVoltageImageDark from "./BMS Input Voltage Dark.png"; import PhysicalConnectionImageDark from "./Physical Connection Lost Dark.png"; import WirelessCommsLostImageDark from "./Wireless Comms Lost Dark.png"; -import HighTemperatureImageDark from "./High Temperature Dark.png"; +import TemperatureImageDark from "./Temperature Dark.png"; +import PackPowerImageDark from "./Pack Power Dark.png"; +import PowerWarningsImageDark from "./Power Warnings Dark.png"; + const FaultsViewImages = { "light": { - "BPSFault": BPSFaultImage, + "BPSFault": BPSFaultImageLight, + "CellGroupVoltage": CellGroupVoltageImageLight, + "DischargeEnable": DischargeEnableLight, "EStop": EStopImage, "MPPTContactor": MPPTContactorImageLight, "LowContactor": LowContactorImageLight, "MotorControllerContactor": MotorControllerContactorImageLight, "Door": DoorImageLight, - "BatteryFailsafe": BatteryFailsafeImageLight, + "BMSFailures": BMSFailuresImageLight, "IMDStatus": IMDStatusImageLight, "Crash": CrashImageLight, "HighCurrent": HighCurrentImageLight, @@ -55,19 +71,24 @@ const FaultsViewImages = { "LowBattery": LowBatteryImageLight, "MCUCheck": MCUCheckImageLight, "MPPTCurrent": MPPTCurrentImageLight, + "MCStatus": MCStatusImageLight, "BMSInputVoltage": BMSInputVoltageImageLight, "PhysicalConnection": PhysicalConnectionImageLight, "WirelessCommsLost": WirelessCommsLostImageLight, - "HighTemperature": HighTemperatureImageLight + "Temperature": TemperatureImageLight, + "PackPower": PackPowerImageLight, + "PowerWarnings": PowerWarningsImageLight }, "dark": { - "BPSFault": BPSFaultImage, + "BPSFault": BPSFaultImageDark, + "CellGroupVoltage": CellGroupVoltageImageDark, + "DischargeEnable": DischargeEnableDark, "EStop": EStopImage, "MPPTContactor": MPPTContactorImageDark, "LowContactor": LowContactorImageDark, "MotorControllerContactor": MotorControllerContactorImageDark, "Door": DoorImageDark, - "BatteryFailsafe": BatteryFailsafeImageDark, + "BMSFailures": BMSFailuresImageDark, "IMDStatus": IMDStatusImageDark, "Crash": CrashImageDark, "HighCurrent": HighCurrentImageDark, @@ -77,11 +98,14 @@ const FaultsViewImages = { "LowBattery": LowBatteryImageDark, "MCUCheck": MCUCheckImageDark, "MPPTCurrent": MPPTCurrentImageDark, + "MCStatus": MCStatusImageDark, "BMSInputVoltage": BMSInputVoltageImageDark, "PhysicalConnection": PhysicalConnectionImageDark, "WirelessCommsLost": WirelessCommsLostImageDark, - "HighTemperature": HighTemperatureImageDark + "Temperature": TemperatureImageDark, + "PackPower": PackPowerImageDark, + "PowerWarnings": PowerWarningsImageDark } -} +}; export { FaultsViewImages }; diff --git a/Frontend/src/Components/Faults/Images/Low Battery Dark.png b/Frontend/src/Components/Faults/Images/Low Battery Dark.png index 1ae2935c..da110949 100644 Binary files a/Frontend/src/Components/Faults/Images/Low Battery Dark.png and b/Frontend/src/Components/Faults/Images/Low Battery Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/Low Battery.png b/Frontend/src/Components/Faults/Images/Low Battery.png index e45539b2..0e3b8585 100644 Binary files a/Frontend/src/Components/Faults/Images/Low Battery.png and b/Frontend/src/Components/Faults/Images/Low Battery.png differ diff --git a/Frontend/src/Components/Faults/Images/MC Status Dark.png b/Frontend/src/Components/Faults/Images/MC Status Dark.png new file mode 100644 index 00000000..7790adec Binary files /dev/null and b/Frontend/src/Components/Faults/Images/MC Status Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/MC Status.png b/Frontend/src/Components/Faults/Images/MC Status.png new file mode 100644 index 00000000..608885fa Binary files /dev/null and b/Frontend/src/Components/Faults/Images/MC Status.png differ diff --git a/Frontend/src/Components/Faults/Images/Pack Power Dark.png b/Frontend/src/Components/Faults/Images/Pack Power Dark.png new file mode 100644 index 00000000..6d519b9d Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Pack Power Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/Pack Power.png b/Frontend/src/Components/Faults/Images/Pack Power.png new file mode 100644 index 00000000..41e25f68 Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Pack Power.png differ diff --git a/Frontend/src/Components/Faults/Images/Power Warnings Dark.png b/Frontend/src/Components/Faults/Images/Power Warnings Dark.png new file mode 100644 index 00000000..5d47deef Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Power Warnings Dark.png differ diff --git a/Frontend/src/Components/Faults/Images/Power Warnings.png b/Frontend/src/Components/Faults/Images/Power Warnings.png new file mode 100644 index 00000000..587da8de Binary files /dev/null and b/Frontend/src/Components/Faults/Images/Power Warnings.png differ diff --git a/Frontend/src/Components/Faults/Images/High Temperature Dark.png b/Frontend/src/Components/Faults/Images/Temperature Dark.png similarity index 100% rename from Frontend/src/Components/Faults/Images/High Temperature Dark.png rename to Frontend/src/Components/Faults/Images/Temperature Dark.png diff --git a/Frontend/src/Components/Faults/Images/High Temperature.png b/Frontend/src/Components/Faults/Images/Temperature.png similarity index 100% rename from Frontend/src/Components/Faults/Images/High Temperature.png rename to Frontend/src/Components/Faults/Images/Temperature.png