Skip to content

Commit

Permalink
feat: everything is a limitable state
Browse files Browse the repository at this point in the history
  • Loading branch information
Zakrok09 committed Jul 11, 2024
1 parent 9572dca commit 483512a
Show file tree
Hide file tree
Showing 11 changed files with 320 additions and 209 deletions.
24 changes: 24 additions & 0 deletions gs/src/lib/components/generic/Store.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<script lang="ts">
import type {NamedDatatype} from "$lib/types";
import {GrandDataDistributor} from "$lib";
export let datatype: NamedDatatype;
const store = GrandDataDistributor.getInstance().stores.getStore(datatype);
// instead of this shit, fetch the
const lower_error_threshold = 0;
const lower_warn_threshold = 0.1;
const upper_warn_threshold = 1.1;
const upper_error_threshold = 1.2;
let colourClass = "";
$: if ($store < lower_error_threshold || $store > upper_error_threshold) {
colourClass = "text-error-500";
} else if ($store < lower_warn_threshold || $store > upper_warn_threshold) {
colourClass = "text-warning-500";
} else {
colourClass = "";
}
</script>

<span class={colourClass}>{$store}</span>
5 changes: 5 additions & 0 deletions gs/src/lib/components/generic/Table.svelte
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<script lang="ts">
import {Store} from "$lib";
import {NamedDatatypeValues} from "$lib/types";
export let tableArr: any[][] = [];
export let titles = ["Module", "Temp C°"];
export let background = "bg-surface-800";
Expand All @@ -22,6 +25,8 @@
{i === row.length-1 ? '' : 'border-r border-r-primary-700'}">
{#if typeof cell === "number"}
<span class="font-mono">{cell.toFixed(2)}</span>
{:else if NamedDatatypeValues.includes(cell)}
<Store datatype={cell}/>
{:else}
{cell}
{/if}
Expand Down
2 changes: 2 additions & 0 deletions gs/src/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import TileGrid from "$lib/components/generic/TileGrid.svelte";
import ToggleCommand from "$lib/components/abstract/ToggleCommand.svelte";
import TauriCommand from "$lib/components/abstract/TauriCommand.svelte";
import SpeedsInput from "$lib/components/SpeedsInput.svelte";
import Store from "$lib/components/generic/Store.svelte";

// Utils
import {PlotBuffer, StrokePresets} from "$lib/util/PlotBuffer";
Expand Down Expand Up @@ -91,6 +92,7 @@ export {
Localiser,
EventChannel,
SpeedsInput,
Store,
RunMode,
RouteStep
}
Expand Down
198 changes: 198 additions & 0 deletions gs/src/lib/namedDatatypeEnum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
export enum DatatypeEnum {
YOURNEWDATATYPENAME="YourNewDatatypeName",
DEFAULTDATATYPE="DefaultDatatype",
PROPULSIONVOLTAGE="PropulsionVoltage",
PROPULSIONCURRENT="PropulsionCurrent",
PROPULSIONVREFINT="PropulsionVRefInt",
LEVITATIONTEMPERATURE="LevitationTemperature",
ACCELERATIONX="AccelerationX",
ACCELERATIONY="AccelerationY",
ACCELERATIONZ="AccelerationZ",
GYROSCOPEX="GyroscopeX",
GYROSCOPEY="GyroscopeY",
GYROSCOPEZ="GyroscopeZ",
IMDGENERALINFO="IMDGeneralInfo",
IMDISOLATIONDETAILS="IMDIsolationDetails",
IMDVOLTAGEDETAILS="IMDVoltageDetails",
INSULATIONNEGATIVE="InsulationNegative",
INSULATIONPOSITIVE="InsulationPositive",
INSULATIONORIGINAL="InsulationOriginal",
DEFAULTBMSLOW="DefaultBMSLow",
DIAGNOSTICBMSLOW="DiagnosticBMSLow",
DEFAULTBMSHIGH="DefaultBMSHigh",
DIAGNOSTICBMSHIGH="DiagnosticBMSHigh",
BATTERYVOLTAGELOW="BatteryVoltageLow",
BATTERYVOLTAGEHIGH="BatteryVoltageHigh",
TOTALBATTERYVOLTAGELOW="TotalBatteryVoltageLow",
TOTALBATTERYVOLTAGEHIGH="TotalBatteryVoltageHigh",
BATTERYTEMPERATURELOW="BatteryTemperatureLow",
BATTERYTEMPERATUREHIGH="BatteryTemperatureHigh",
BATTERYBALANCELOW="BatteryBalanceLow",
BATTERYBALANCEHIGH="BatteryBalanceHigh",
SINGLECELLVOLTAGELOW="SingleCellVoltageLow",
SINGLECELLTEMPERATURELOW="SingleCellTemperatureLow",
CHARGESTATELOW="ChargeStateLow",
CHARGESTATEHIGH="ChargeStateHigh",
BATTERYCURRENTLOW="BatteryCurrentLow",
BATTERYCURRENTHIGH="BatteryCurrentHigh",
BATTERYENERGYPARAMSLOW="BatteryEnergyParamsLow",
BATTERYENERGYPARAMSHIGH="BatteryEnergyParamsHigh",
BATTERYMAXVOLTAGELOW="BatteryMaxVoltageLow",
BATTERYESTIMATEDCHARGELOW="BatteryEstimatedChargeLow",
BATTERYMINTEMPERATURELOW="BatteryMinTemperatureLow",
BATTERYMAXTEMPERATURELOW="BatteryMaxTemperatureLow",
BATTERYMINBALANCINGLOW="BatteryMinBalancingLow",
BATTERYMAXBALANCINGLOW="BatteryMaxBalancingLow",
BATTERYMINVOLTAGELOW="BatteryMinVoltageLow",
BATTERYMINVOLTAGEHIGH="BatteryMinVoltageHigh",
BATTERYMAXVOLTAGEHIGH="BatteryMaxVoltageHigh",
BATTERYESTIMATEDCHARGEHIGH="BatteryEstimatedChargeHigh",
BATTERYMINTEMPERATUREHIGH="BatteryMinTemperatureHigh",
BATTERYMAXTEMPERATUREHIGH="BatteryMaxTemperatureHigh",
BATTERYMINBALANCINGHIGH="BatteryMinBalancingHigh",
BATTERYMAXBALANCINGHIGH="BatteryMaxBalancingHigh",
BATTERYEVENTLOW="BatteryEventLow",
BATTERYEVENTHIGH="BatteryEventHigh",
BRAKETEMPERATURE="BrakeTemperature",
PROPULSIONSPEED="PropulsionSpeed",
FSMSTATE="FSMState",
FSMEVENT="FSMEvent",
ENDOFTRACKTRIGGERED="EndOfTrackTriggered",
LOCALISATION="Localisation",
VELOCITY="Velocity",
ACCELERATION="Acceleration",
DIRECTION="Direction",
BRAKEPRESSURE="BrakePressure",
UNKNOWNCANID="UnknownCanId",
INFO="Info",
PRESURE_VB="Presure_VB",
AVERAGE_TEMP_VB_BOTTOM="Average_Temp_VB_Bottom",
AVERAGE_TEMP_VB_TOP="Average_Temp_VB_top",
TEMP_HEMS_1="Temp_HEMS_1",
TEMP_HEMS_2="Temp_HEMS_2",
TEMP_HEMS_3="Temp_HEMS_3",
TEMP_HEMS_4="Temp_HEMS_4",
TEMP_MOTOR_1="Temp_Motor_1",
TEMP_MOTOR_2="Temp_Motor_2",
AMBIENT_PRESURE="Ambient_presure",
AMBIENT_TEMP="Ambient_temp",
TEMP_EMS_1="Temp_EMS_1",
TEMP_EMS_2="Temp_EMS_2",
TEMP_EMS_3="Temp_EMS_3",
TEMP_EMS_4="Temp_EMS_4",
SINGLECELLVOLTAGEHIGH_1="SingleCellVoltageHigh_1",
SINGLECELLTEMPERATUREHIGH_1="SingleCellTemperatureHigh_1",
SINGLECELLVOLTAGEHIGH_2="SingleCellVoltageHigh_2",
SINGLECELLTEMPERATUREHIGH_2="SingleCellTemperatureHigh_2",
SINGLECELLVOLTAGEHIGH_3="SingleCellVoltageHigh_3",
SINGLECELLTEMPERATUREHIGH_3="SingleCellTemperatureHigh_3",
SINGLECELLVOLTAGEHIGH_4="SingleCellVoltageHigh_4",
SINGLECELLTEMPERATUREHIGH_4="SingleCellTemperatureHigh_4",
SINGLECELLVOLTAGEHIGH_5="SingleCellVoltageHigh_5",
SINGLECELLTEMPERATUREHIGH_5="SingleCellTemperatureHigh_5",
SINGLECELLVOLTAGEHIGH_6="SingleCellVoltageHigh_6",
SINGLECELLTEMPERATUREHIGH_6="SingleCellTemperatureHigh_6",
SINGLECELLVOLTAGEHIGH_7="SingleCellVoltageHigh_7",
SINGLECELLTEMPERATUREHIGH_7="SingleCellTemperatureHigh_7",
SINGLECELLVOLTAGEHIGH_8="SingleCellVoltageHigh_8",
SINGLECELLTEMPERATUREHIGH_8="SingleCellTemperatureHigh_8",
SINGLECELLVOLTAGEHIGH_9="SingleCellVoltageHigh_9",
SINGLECELLTEMPERATUREHIGH_9="SingleCellTemperatureHigh_9",
SINGLECELLVOLTAGEHIGH_10="SingleCellVoltageHigh_10",
SINGLECELLTEMPERATUREHIGH_10="SingleCellTemperatureHigh_10",
SINGLECELLVOLTAGEHIGH_11="SingleCellVoltageHigh_11",
SINGLECELLTEMPERATUREHIGH_11="SingleCellTemperatureHigh_11",
SINGLECELLVOLTAGEHIGH_12="SingleCellVoltageHigh_12",
SINGLECELLTEMPERATUREHIGH_12="SingleCellTemperatureHigh_12",
SINGLECELLVOLTAGEHIGH_13="SingleCellVoltageHigh_13",
SINGLECELLTEMPERATUREHIGH_13="SingleCellTemperatureHigh_13",
SINGLECELLVOLTAGEHIGH_14="SingleCellVoltageHigh_14",
SINGLECELLTEMPERATUREHIGH_14="SingleCellTemperatureHigh_14",
MODULE1MAXVOLTAGE="Module1MaxVoltage",
MODULE2MAXVOLTAGE="Module2MaxVoltage",
MODULE3MAXVOLTAGE="Module3MaxVoltage",
MODULE4MAXVOLTAGE="Module4MaxVoltage",
MODULE5MAXVOLTAGE="Module5MaxVoltage",
MODULE6MAXVOLTAGE="Module6MaxVoltage",
MODULE7MAXVOLTAGE="Module7MaxVoltage",
MODULE8MAXVOLTAGE="Module8MaxVoltage",
MODULE1MINVOLTAGE="Module1MinVoltage",
MODULE2MINVOLTAGE="Module2MinVoltage",
MODULE3MINVOLTAGE="Module3MinVoltage",
MODULE4MINVOLTAGE="Module4MinVoltage",
MODULE5MINVOLTAGE="Module5MinVoltage",
MODULE6MINVOLTAGE="Module6MinVoltage",
MODULE7MINVOLTAGE="Module7MinVoltage",
MODULE8MINVOLTAGE="Module8MinVoltage",
MODULE1MAXTEMPERATURE="Module1MaxTemperature",
MODULE2MAXTEMPERATURE="Module2MaxTemperature",
MODULE3MAXTEMPERATURE="Module3MaxTemperature",
MODULE4MAXTEMPERATURE="Module4MaxTemperature",
MODULE5MAXTEMPERATURE="Module5MaxTemperature",
MODULE6MAXTEMPERATURE="Module6MaxTemperature",
MODULE7MAXTEMPERATURE="Module7MaxTemperature",
MODULE8MAXTEMPERATURE="Module8MaxTemperature",
MODULE1MINTEMPERATURE="Module1MinTemperature",
MODULE2MINTEMPERATURE="Module2MinTemperature",
MODULE3MINTEMPERATURE="Module3MinTemperature",
MODULE4MINTEMPERATURE="Module4MinTemperature",
MODULE5MINTEMPERATURE="Module5MinTemperature",
MODULE6MINTEMPERATURE="Module6MinTemperature",
MODULE7MINTEMPERATURE="Module7MinTemperature",
MODULE8MINTEMPERATURE="Module8MinTemperature",
MODULE1AVGVOLTAGE="Module1AvgVoltage",
MODULE2AVGVOLTAGE="Module2AvgVoltage",
MODULE3AVGVOLTAGE="Module3AvgVoltage",
MODULE4AVGVOLTAGE="Module4AvgVoltage",
MODULE5AVGVOLTAGE="Module5AvgVoltage",
MODULE6AVGVOLTAGE="Module6AvgVoltage",
MODULE7AVGVOLTAGE="Module7AvgVoltage",
MODULE8AVGVOLTAGE="Module8AvgVoltage",
MODULE1AVGTEMPERATURE="Module1AvgTemperature",
MODULE2AVGTEMPERATURE="Module2AvgTemperature",
MODULE3AVGTEMPERATURE="Module3AvgTemperature",
MODULE4AVGTEMPERATURE="Module4AvgTemperature",
MODULE5AVGTEMPERATURE="Module5AvgTemperature",
MODULE6AVGTEMPERATURE="Module6AvgTemperature",
MODULE7AVGTEMPERATURE="Module7AvgTemperature",
MODULE8AVGTEMPERATURE="Module8AvgTemperature",
RESPONSEHEARTBEAT="ResponseHeartbeat",
LEVIINSTRUCTION="LeviInstruction",
LOWPRESSURESENSOR="LowPressureSensor",
HIGHPRESSURESENSOR="HighPressureSensor",
LEVI_HEMS_GAP_A="levi_hems_gap_a",
LEVI_HEMS_GAP_B="levi_hems_gap_b",
LEVI_HEMS_GAP_C="levi_hems_gap_c",
LEVI_HEMS_GAP_D="levi_hems_gap_d",
LEVI_EMS_GAP_A="levi_ems_gap_a",
LEVI_EMS_GAP_B="levi_ems_gap_b",
LEVI_EMS_GAP_C="levi_ems_gap_c",
LEVI_EMS_GAP_D="levi_ems_gap_d",
LEVI_HEMS_CURRENT_A1="levi_hems_current_a1",
LEVI_HEMS_CURRENT_A2="levi_hems_current_a2",
LEVI_HEMS_CURRENT_B1="levi_hems_current_b1",
LEVI_HEMS_CURRENT_B2="levi_hems_current_b2",
LEVI_HEMS_CURRENT_C1="levi_hems_current_c1",
LEVI_HEMS_CURRENT_C2="levi_hems_current_c2",
LEVI_HEMS_CURRENT_D1="levi_hems_current_d1",
LEVI_HEMS_CURRENT_D2="levi_hems_current_d2",
LEVI_EMS_CURRENT_AB="levi_ems_current_ab",
LEVI_EMS_CURRENT_CD="levi_ems_current_cd",
LEVI_HEMS_AIRGAP="levi_hems_airgap",
LEVI_HEMS_PITCH="levi_hems_pitch",
LEVI_HEMS_ROLL="levi_hems_roll",
LEVI_EMS_OFFSET_AB="levi_ems_offset_ab",
LEVI_EMS_OFFSET_CD="levi_ems_offset_cd",
LEVI_HEMS_POWER="levi_hems_power",
LEVI_EMS_POWER="levi_ems_power",
LEVI_VOLT_MIN="levi_volt_min",
LEVI_VOLT_MAX="levi_volt_max",
LEVI_VOLT_AVG="levi_volt_avg",
BRAKINGCOMMDEBUG="BrakingCommDebug",
BRAKINGSIGNALDEBUG="BrakingSignalDebug",
BRAKINGBOOLDEBUG="BrakingBoolDebug",
BRAKINGREARMDEBUG="BrakingRearmDebug",
PROPGPIODEBUG="PropGPIODebug",
RECEIVEDCAN="ReceivedCan",
SENDINGCANEVENT="SendingCANEvent",
}
82 changes: 19 additions & 63 deletions gs/src/lib/panels/VitalsPanel.svelte
Original file line number Diff line number Diff line change
@@ -1,83 +1,39 @@
<script lang="ts">
import {Battery, Table, FSM, TileGrid, Tile, Command, GrandDataDistributor, Localiser} from "$lib";
import {Battery, Table, FSM, TileGrid, Tile, Command, GrandDataDistributor, Localiser, Store} from "$lib";
import {AppBar, getToastStore} from "@skeletonlabs/skeleton";
import Icon from "@iconify/svelte";
import {invoke} from "@tauri-apps/api/tauri";
import {DatatypeEnum as DE} from "$lib/namedDatatypeEnum";
let width: number;
const storeManager = GrandDataDistributor.getInstance().stores;
const lvBattery = storeManager.getStore("BatteryEstimatedChargeLow");
const hvBattery = storeManager.getStore("BatteryEstimatedChargeHigh");
const minVHigh = storeManager.getStore("BatteryMinVoltageHigh");
const maxVHigh = storeManager.getStore("BatteryMaxVoltageHigh");
const avgVHigh = storeManager.getStore("BatteryVoltageHigh");
const minTempHigh = storeManager.getStore("BatteryMinTemperatureHigh");
const maxTempHigh = storeManager.getStore("BatteryMaxTemperatureHigh");
const avgTempHigh = storeManager.getStore("BatteryTemperatureHigh");
const maxVLow = storeManager.getStore("BatteryMaxVoltageLow")
const minVLow = storeManager.getStore("BatteryMinVoltageLow")
const avgVLow = storeManager.getStore("BatteryVoltageLow")
const maxTempLow = storeManager.getStore("BatteryMaxTemperatureLow")
const minTempLow = storeManager.getStore("BatteryMinTemperatureLow")
const avgTempLow = storeManager.getStore("BatteryTemperatureLow")
const currentLow = storeManager.getStore("BatteryCurrentLow")
const currentHigh = storeManager.getStore("BatteryCurrentHigh")
const speed = storeManager.getStore("Velocity");
const position = storeManager.getStore("Localisation");
const propTemp = storeManager.getStore("PropulsionCurrent");
const leviTemp = storeManager.getStore("LevitationTemperature");
const brakeTemp = storeManager.getStore("BrakeTemperature");
const ins = storeManager.getStore("InsulationOriginal")
const insp = storeManager.getStore("InsulationPositive")
const insn = storeManager.getStore("InsulationNegative")
const imdv = storeManager.getStore("IMDVoltageDetails")
const totalLVV = storeManager.getStore("TotalBatteryVoltageLow");
const totalHVV = storeManager.getStore("TotalBatteryVoltageHigh");
const upDrawerVB = storeManager.getStore("Average_Temp_VB_top");
const downDrawerVB = storeManager.getStore("Average_Temp_VB_Bottom");
const outsideVB = storeManager.getStore("Ambient_temp");
const hems1 = storeManager.getStore("Temp_HEMS_1");
const hems2 = storeManager.getStore("Temp_HEMS_2");
const hems3 = storeManager.getStore("Temp_HEMS_3");
const hems4 = storeManager.getStore("Temp_HEMS_4");
const ems1 = storeManager.getStore("Temp_EMS_2");
const ems2 = storeManager.getStore("Temp_EMS_2");
let tableTempsArr: any[][];
let tableArr2: any[][];
let tableBatteryTitles = ["", "HV Voltages", "HV Temp", "LV Voltages", "LV Temp"]
$: tableBatteryVitals = [
["Min", $minVHigh + " V", $minTempHigh + " °C", $minVLow + " V", $minTempLow + " °C"],
["Max", $maxVHigh + " V", $maxTempHigh + " °C", $maxVLow + " V", $maxTempLow + " °C"],
["Avg", $avgVHigh + " V", $avgTempHigh + " °C", $avgVLow + " V", $avgTempLow + " °C"]
["Min", DE.BATTERYMINVOLTAGEHIGH, DE.BATTERYMINTEMPERATUREHIGH, DE.BATTERYMINVOLTAGELOW, DE.BATTERYMINTEMPERATURELOW],
["Max", DE.BATTERYMAXVOLTAGEHIGH, DE.BATTERYMINTEMPERATUREHIGH, DE.BATTERYMAXVOLTAGELOW, DE.BATTERYMAXTEMPERATURELOW],
["Avg", DE.BATTERYVOLTAGEHIGH, DE.BATTERYMINTEMPERATUREHIGH, DE.BATTERYVOLTAGELOW, DE.BATTERYTEMPERATURELOW]
]
$: tableTempsArr = [
["Upper drawer VB", $upDrawerVB, "HEMS 1", $hems1 + " °C"],
["Bottom drawer VB", $downDrawerVB, "HEMS 2", $hems2 + " °C"],
["Outside of VB", $outsideVB, "HEMS 3", $hems3 + " °C"],
["Propulsion", $propTemp, "HEMS 4", $hems4 + " °C"],
["Levitation", $leviTemp, "EMS 1", $ems1 + " °C"],
["Brake", $brakeTemp, "EMS 2", $ems2 + " °C"],
["Upper drawer VB", DE.AVERAGE_TEMP_VB_BOTTOM, "HEMS 1", DE.TEMP_HEMS_1],
["Bottom drawer VB", DE.AVERAGE_TEMP_VB_BOTTOM, "HEMS 2", DE.TEMP_HEMS_2],
["Outside of VB", DE.AMBIENT_TEMP, "HEMS 3", DE.TEMP_HEMS_3],
["Propulsion", DE.PROPULSIONCURRENT, "HEMS 4", DE.TEMP_HEMS_4],
["Levitation", DE.LEVITATIONTEMPERATURE, "EMS 1", DE.TEMP_EMS_1],
["Brake", DE.BRAKETEMPERATURE, "EMS 2", DE.TEMP_EMS_2],
]
$: tableArr2 = [
["Insulation", $ins, "Insulation-", $insn],
["IMD Voltage", $imdv, "Insulation+", $insp],
["Insulation", DE.INSULATIONORIGINAL, "Insulation-", DE.INSULATIONNEGATIVE],
["IMD Voltage", DE.IMDVOLTAGEDETAILS, "Insulation+", DE.INSULATIONPOSITIVE],
]
const location = storeManager.getStore("Localisation");
Expand Down Expand Up @@ -130,23 +86,23 @@
<div class="flex flex-wrap justify-between">
<div class="flex gap-4">
<p>
Velocity: <span class="font-mono font-medium">{$speed}</span>
Velocity: <Store datatype="Velocity" />
<br>
Position: <span class="font-mono font-medium">{$position}</span>
Position: <Store datatype="Localisation" />
</p>
<p>
HV Current: <span class="font-mono font-medium">{$currentHigh}</span>
HV Current: <Store datatype="BatteryCurrentHigh" />
<br>
LV Current: <span class="font-mono font-medium">{$currentLow}</span>
LV Current: <Store datatype="BatteryCurrentLow" />
</p>
</div>
<div style="grid-template-columns: 1fr 2fr 2fr;" class="grid gap-y-2">
<span>LV: </span>
<Battery fill="#3b669c" orientation="horizontal" perc={Number($lvBattery)}/>
<span>Total: <span class="font-mono font-medium">{$totalLVV} V</span></span>
<span>Total: <Store datatype="TotalBatteryVoltageLow" /></span>
<span>HV: </span>
<Battery fill="#723f9c" orientation="horizontal" perc={Number($hvBattery)}/>
<span>Total: <span class="font-mono font-medium">{$totalHVV} V</span></span>
<span>Total: <Store datatype="TotalBatteryVoltageHigh" /></span>
</div>
</div>
<div class="flex gap-4">
Expand Down
Loading

0 comments on commit 483512a

Please sign in to comment.