2
2
3
3
// names of states
4
4
const char *StateMachine::names[]{
5
- " INIT" , " SAFE" , " ARMED" , " STARTUP" , " FIRING" , " SHUTDOWN" , " ABORT" , " ERROR" , " OFF"
5
+ " INIT" , " [S]AFE" , " [^R]EADY" , " [F]UEL FILL" , " [O]X FILL" , " C[H]ILL" ,
6
+ " [C]HAMBER PRESS" , " [T]ANKS PRESS" , " [I]GNITION" , " [_]FIRING" , " [x]SHUTDOWN" ,
7
+ " [V]ENT" , " [<-]ABORT" , " [E]RROR" , " [^O]FF"
6
8
};
7
9
8
10
// ncurses colors of states
9
11
const int StateMachine::colors[]{
10
- 10 , 10 , 11 , 12 , 12 , 12 , 9 , 9 , 0
12
+ 10 , 10 , 11 , 12 , 12 , 12 ,
13
+ 12 , 12 , 208 , 208 , 208 ,
14
+ 220 , 9 , 9 , 0
11
15
};
12
16
13
17
// permissible states accessible from a given state
14
18
const bool StateMachine::transition_matrix[NUM_STATES][NUM_STATES]{
15
- // INIT SAFE ARMED STARTUP FIRING SHUTDOWN ABORT ERROR OFF
19
+ // INIT SAFE READY IGNITION FIRING SHUTDOWN ABORT ERROR OFF
16
20
17
- {true , true , false , false , false , false , false , true , true }, // INIT
18
- {false , true , true , false , false , false , false , true , true }, // SAFE
19
- {false , true , true , true , false , false , false , true , false }, // ARMED
20
- {false , false , false , true , true , false , true , false , false }, // STARTUP
21
- {false , false , false , false , true , true , true , false , false }, // FIRING
22
- {false , true , false , false , false , true , true , true , false }, // SHUTDOWN
23
- {false , false , false , false , false , false , true , true , false }, // ABORT
24
- {false , true , false , false , false , false , false , true , true }, // ERROR
25
- {false , true , false , false , false , false , false , false , true } // OFF
26
- };
27
-
28
- const std::vector<std::array<int , NUM_VALVES>> StateMachine::IPA_cft_solenoids{
29
- {{0 , 0 , 0 , 0 , 0 , 0 , 1 },
30
- {1 , 0 , 0 , 0 , 0 , 0 , 0 },
31
- {1 , 1 , 0 , 0 , 0 , 0 , 0 },
32
- {1 , 0 , 0 , 0 , 0 , 0 , 0 },
33
- {1 , 0 , 1 , 0 , 0 , 0 , 0 },
34
- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
35
- {0 , 0 , 0 , 0 , 1 , 1 , 1 }}
36
- };
21
+ // {true, true, false, false, false, false, false, true, true}, //INIT
22
+ // {false, true, true, false, false, false, false, true, true}, //SAFE
23
+ // {false, true, true, true, false, false, false, true, false}, //READY
24
+ // {false,false,false,false,false,false,false,false,false,false,false,false,},
25
+ // {},
26
+ // {},
27
+ // {},
28
+ // {},
29
+ // {false, false, false, true, true, false, true, false, false}, //IGNITION
30
+ // {false, false, false, false, true, true, true, false, false}, //FIRING
31
+ // {false, true, false, false, false, true, true, true, false}, //SHUTDOWN
32
+ // {},
33
+ // {false, false, false, false, false, false, true, true, false}, //ABORT
34
+ // {false, true, false, false, false, false, false, true, true}, //ERROR
35
+ // {false, true, false, false, false, false, false, false, true} //OFF
36
+ // ALL TRUE FOR DEBUG
37
+ // INIT SAFE READY FUEL FILL OX FILL CHILL CHAM P TANKS P IGNITION FIRING SHUTDOWN VENT ABORT ERROR OFF
38
+ {true , true , false , false , false , false , false , false , false , false , false , false , false , true , true }, // INIT
39
+ {false , true , true , false , false , false , false , false , false , false , false , false , false , true , true }, // SAFE
40
+ {false , true , true , true , true , true , true , true , true , false , false , true , false , true , false }, // READY
41
+ {false , false , true , true , false , false , false , false , false , false , false , false , false , true , false }, // F FILL
42
+ {false , false , true , false , true , false , false , false , false , false , false , false , false ,true , false }, // O FILL
43
+ {false , false , true , false , false , true , false , false , false , false , false , false , false ,true , false }, // CHILL
44
+ {false , false , true , false , false , false , true , false , false , false , false , false , false ,true , false }, // CHAM P
45
+ {false , false , true , false , false , false , false , true , false , false , false , false , false ,true , false }, // TANK P
46
+ {false , false , false , false , false , false , false , false , true , true , false , false , true , false , false }, // IGNITION
47
+ {false , false , false , false , false , false , false , false , false , true , true , false , true , false , false }, // FIRING
48
+ {false , false , true , false , false , false , false , false , false , false , true , false , false , true , false }, // SHUTDOWN
49
+ {false , false , true , false , false , false , false , false , false , false , false , true , false , true , false }, // VENT
50
+ {false , false , true , false , false , false , false , false , false , false , false , false , true , true , false }, // ABORT
51
+ {false , false , true , false , false , false , false , false , false , false , false , false , false , true , true }, // ERROR
52
+ {false , true , false , false , false , false , false , false , false , false , false , false , false , false , true } // OFF
37
53
38
- const std::vector<std::array<int , NUM_VALVES>> StateMachine::N2O_cft_solenoids{
39
- {{0 , 0 , 0 , 1 , 0 , 0 , 0 },
40
- {0 , 0 , 0 , 0 , 0 , 1 , 0 },
41
- {6 , 6 , 6 , 6 , 6 , 6 , 6 },
42
- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
43
- {1 , 0 , 1 , 0 , 0 , 0 , 0 },
44
- {1 , 0 , 0 , 0 , 0 , 0 , 0 },
45
- {1 , 1 , 0 , 0 , 0 , 0 , 0 },
46
- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
47
- {0 , 0 , 0 , 0 , 1 , 1 , 1 }}
48
54
};
49
55
50
- const std::vector<std::array<int , NUM_VALVES>> StateMachine::H2O_cft_solenoids{
51
- {{0 , 0 , 0 , 1 , 0 , 0 , 0 },
52
- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
53
- {1 , 0 , 0 , 0 , 0 , 0 , 0 },
54
- {1 , 1 , 1 , 0 , 0 , 0 , 0 },
55
- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
56
- {0 , 0 , 0 , 0 , 1 , 1 , 1 }}
56
+ const int StateMachine::valve_matrix[NUM_STATES][NUM_VALVES]{
57
+ // HE MAIN(SERVO), N2O FILL(NO), CHAM VENT, N2O VENT, IPA VENT, IGNITER -- NOTE, ASSUMED ALL VALVES ARE NC, 1 = OPEN, 0 = CLOSED
58
+ {1 , 1 , 1 , 1 , 1 , 0 }, // INIT
59
+ {0 , 0 , 1 , 1 , 1 , 0 }, // SAFE
60
+ {0 , 0 , 0 , 0 , 0 , 0 }, // READY
61
+ {0 , 0 , 0 , 0 , 1 , 0 }, // FUEL FILL
62
+ {0 , 1 , 0 , 0 , 0 , 0 }, // OX FILL
63
+ {0 , 0 , 0 , 1 , 0 , 0 }, // CHILL
64
+ {1 , 0 , 0 , 0 , 0 , 0 }, // PRESS CHAMBER
65
+ {1 , 0 , 0 , 0 , 0 , 0 }, // PRESS TANKS
66
+ {1 , 0 , 0 , 0 , 0 , 1 }, // IGNITION
67
+ {1 , 0 , 0 , 0 , 0 , 0 }, // FIRING
68
+ {0 , 0 , 0 , 0 , 0 , 0 }, // SHUTDOWN
69
+ {0 , 0 , 1 , 1 , 1 , 0 }, // VENT
70
+ {0 , 0 , 1 , 0 , 0 , 0 }, // ABORT (VENT CHAMBER)
71
+ {0 , 0 , 0 , 0 , 0 , 0 }, // ERROR
72
+ {0 , 0 , 0 , 0 , 0 , 0 } // OFF
57
73
};
58
74
59
- StateMachine::StateMachine (std::shared_ptr<Relay> valves, std::shared_ptr<Servo> servos) : state(INIT), valves(valves), servos(servos), valve_matrix(&N2O_cft_solenoids) {}
75
+ StateMachine::StateMachine (std::shared_ptr<Relay> valves, std::shared_ptr<Servo> servos)
76
+ : state(INIT), valves(valves), servos(servos) {}
60
77
61
78
bool StateMachine::canChangeTo (State next) const {
62
79
return transition_matrix[state][next];
@@ -71,21 +88,46 @@ State StateMachine::update(int ch) {
71
88
case ' s' :
72
89
changeState (SAFE);
73
90
break ;
74
- case ' a' - 96 :
75
- changeState (ARMED);
91
+ case ' r' :
92
+ if (state!=SAFE) changeState (READY);
93
+ break ;
94
+ case ' r' - 96 :
95
+ changeState (READY);
96
+ break ;
97
+ case ' f' :
98
+ changeState (F_FILL);
99
+ break ;
100
+ case ' o' :
101
+ changeState (O_FILL);
102
+ break ;
103
+ case ' h' :
104
+ changeState (CHILL);
105
+ break ;
106
+ case ' c' :
107
+ changeState (P_CHAM);
108
+ break ;
109
+ case ' t' :
110
+ changeState (P_TANKS);
111
+ break ;
112
+ case ' i' :
113
+ changeState (IGNITION);
76
114
break ;
77
115
case ' ' :
78
- changeState (SHUTDOWN);
79
116
changeState (FIRING);
80
- changeState (STARTUP);
117
+ break ;
118
+ case ' x' :
119
+ changeState (SHUTDOWN);
120
+ break ;
121
+ case ' v' :
122
+ changeState (VENT);
81
123
break ;
82
124
case 263 :
83
125
changeState (ABORT);
84
126
break ;
85
127
case ' e' :
86
128
changeState (ERROR);
87
129
break ;
88
- case ' o' :
130
+ case ' o' - 96 :
89
131
changeState (OFF);
90
132
break ;
91
133
default :
@@ -95,27 +137,6 @@ State StateMachine::update(int ch) {
95
137
}
96
138
97
139
void StateMachine::process () const {
98
- valves->set_outputs (&(valve_matrix->at (state)));
99
- switch (state) {
100
- case INIT:
101
- break ;
102
- case SAFE:
103
- break ;
104
- case ARMED:
105
- break ;
106
- case STARTUP:
107
- break ;
108
- case FIRING:
109
- break ;
110
- case SHUTDOWN:
111
- break ;
112
- case ABORT:
113
- break ;
114
- case ERROR:
115
- break ;
116
- case OFF:
117
- break ;
118
- case NUM_STATES:
119
- break ;
120
- }
140
+ valves->set_outputs (valve_matrix[state]);
141
+
121
142
}
0 commit comments