-
Notifications
You must be signed in to change notification settings - Fork 0
State Machine
BL-CZY edited this page Sep 3, 2026
·
3 revisions
The state machine running on the telemetry board follows this sequence of actions
flowchart TD
idle["`IdleState`"]
precharge["Precharge"]
readyForPropulsion["ReadyForPropulsion"]
accelerate["Accelerate"]
brake["Brake"]
stopped["Stopped"]
emergency["Emergency"]
setupMotor["SetupMotor"]
emergencyStopOperatorCommand{{"`Received **Emergency stop**`"}}
idleOperatorCommand{{"Received Force transition to idle"}}
prechargeOperatorCommand{{"`Received **PrechargeOperatorCommand**: Idle -> SetupMotor`"}}
accelerateOperatorCommand{{"Received AccelerateOperatorCommand: ReadyForPropulsion -> Accelerate"}}
brakeOperatorCommand{{"Received BrakeOperatorCommand: Accelerate -> Brake"}}
startRunOperatorCommand{{"Received StartRunOperatorCommand: SetupMotor -> Precharge"}}
readyForPropulsionOperatorCommand{{"Received ReadyForPropulsionOperatorCommand: Precharge -> ReadyForPropulsion"}}
idle2(["`Received *BrakesClamped*`"])
idle1(["`Sent *OpenPrechargeRelaysCommand* and *ClampBrakesCommand*`"])
setupMotor1(["`Received *BatteryPrechargeRelayOpen*`"])
setupMotor2(["`Received *MotorControllerRelayOpen*`"])
setupMotor3(["`Sent *MotorControllerSetupCommand*`"])
setupMotor4(["`Received *MotorControllerSetupComplete*`"])
precharge1(["`Sent *StartPrechargeCommand*`"])
precharge2(["`Received *PrechargeVoltageOK*`"])
precharge3(["`Received *PrechargeComplete*`"])
precharge4dot0(["`set precharge_step to PrechargeStep::Initial`"])
precharge4(["`Received *ShutdownCircuitryRelayClosed*`"])
precharge4dot1(["`set precharge_step to ShutdownClosed`"])
precharge5(["`Received *BatteryPrechargeRelayClosed*`"])
precharge5dot1(["`set precharge_step to BatteryPrechargeClosed`"])
precharge6(["`Received *MotorControllerRelayClosed*`"])
precharge6dot1(["`set precharge_step to *AllClosed*`"])
readyForPropulsion1(["`Sent *MotorControllerSetOperationalCommand*`"])
readyForPropulsion2(["`Received *MotorControllerOperational*`"])
readyForPropulsion3(["`Sent *UnclampBrakesCommand*`"])
readyForPropulsion4(["`Received *BrakesUnclamped*`"])
accelerate1(["`Received *EndOfTrackBrakeCommand*`"]);
brake1(["`Received *PropulsionStatus* and velocity is 0`"])
classDef opCmd stroke:#bc8cff;
class prechargeOperatorCommand,emergencyStopOperatorCommand,idleOperatorCommand,accelerateOperatorCommand,brakeOperatorCommand,startRunOperatorCommand,readyForPropulsionOperatorCommand opCmd;
classDef state stroke:#56d364;
class idle,precharge,readyForPropulsion,accelerate,brake,stopped,emergency,setupMotor state
classDef recv stroke:#79c0ff;
class idle2,setupMotor1,setupMotor2,setupMotor4,precharge2,precharge3,precharge4,precharge5,precharge6,readyForPropulsion2,readyForPropulsion4,accelerate1,brake1 recv;
idle-->idle1
idle2-->prechargeOperatorCommand
idle1-->idle2
prechargeOperatorCommand-->setupMotor
setupMotor-->|AND|setupMotor1
setupMotor-->|AND|setupMotor2
setupMotor1-->setupMotor3
setupMotor2-->setupMotor3
setupMotor3-->setupMotor4
setupMotor4-->startRunOperatorCommand
startRunOperatorCommand-->precharge
precharge-->precharge1
precharge1-->|AND|precharge4dot0-->precharge4-->precharge4dot1-->precharge5-->precharge5dot1-->precharge6-->precharge6dot1-->readyForPropulsionOperatorCommand
precharge1-->|AND|precharge2-->readyForPropulsionOperatorCommand
precharge1-->|AND|precharge3-->readyForPropulsionOperatorCommand
readyForPropulsionOperatorCommand-->readyForPropulsion
readyForPropulsion-->readyForPropulsion1-->readyForPropulsion2-->readyForPropulsion3-->readyForPropulsion4-->accelerateOperatorCommand-->accelerate
accelerate-->|OR|brakeOperatorCommand-->brake
accelerate-->|OR|accelerate1-->brake
brake-->brake1-->stopped
emergencyStopOperatorCommand-->emergency
idleOperatorCommand-->a(["Send Idle state and go to idle"])