source: trunk/firmware_v2/SES/src/mode_mainswitch.c@ 19

Last change on this file since 19 was 17, checked in by f.jahn, 4 months ago
File size: 5.1 KB
Line 
1// Keine LVP und OVP Überwachung aber Fault wird geprüft!
2// Falls nicht benötigt, nicht anschließen ?! Ist Low active mit PullUp
3// Dieser Modus ist als Hauptschaltermodus ohne BMS gedacht. Z.B. für Bleibatterien
4// Oder als Hauptschalter mit Fremd BMS
5
6
7
8#include "stdio.h"
9#include "mode_mainswitch.h"
10#include "button.h"
11#include "relais.h"
12#include "main.h"
13#include "leds.h"
14#include "buzzer.h"
15
16
17typedef enum MAINSWITCH_State_enum
18{
19 MAINSWITCH_OFF,
20 MAINSWITCH_ON,
21 MAINSWITCH_MANUAL_ON,
22 MAINSWITCH_ERROR
23} MAINSWITCH_state_t;
24
25
26static MAINSWITCH_state_t smState;
27
28
29void MAINSWITCH_SM_Off(void)
30{
31 int faultInput;
32
33 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
34 {
35 faultInput = 1;
36 }
37 else
38 {
39 faultInput = 0;
40 }
41
42
43
44 //Prüfe auf Wechsel des Modus AUTO / SM ON
45 if (BUTTON_GetMode() == BUTTON_AUTO)
46 {
47 if (faultInput == 0)
48 {
49 RELAIS_SetPuls();
50 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
51 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
52 printf("NEW_STATE: MAINSWITCH_ON\n");
53 smState = MAINSWITCH_ON;
54
55 }
56 else
57 {
58 //Wechsel nicht möglich. Fehler Eingang aktiv
59 BUZZER_Beep(BUZZER_ON_TIME_REJECT);
60 BUTTON_SetModeOff();
61 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
62 printf("NEW_STATE: MAINSWITCH_ERROR\n");
63 smState = MAINSWITCH_ERROR;
64 }
65 }
66
67 //Prüfe auf Wechsel in MANUAL ON Mode
68 //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
69 if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
70 {
71
72 RELAIS_SetPuls();
73 BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
74 LEDS_GN_On();
75 LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
76 printf("NEW_STATE: MAINSWITCH_MANUAL_ON\n");
77 smState = MAINSWITCH_MANUAL_ON;
78 }
79
80
81
82}
83
84void MAINSWITCH_SM_On(void)
85{
86 int faultInput;
87 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
88 {
89 faultInput = 1;
90 }
91 else
92 {
93 faultInput = 0;
94 }
95
96
97 // Prüfe Wechsel in off mode
98 if (BUTTON_GetMode() == BUTTON_OFF)
99 {
100 //Ausschalten muss immer möglich sein
101 RELAIS_ResetPuls();
102 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung
103 LEDS_GN_Off();
104 LEDS_RT_Off();
105 printf("NEW_STATE: MAINSWITCH_OFF\n");
106 smState = MAINSWITCH_OFF;
107 }
108
109 //Prüfe auf Fehlermode
110 if (faultInput == 1)
111 {
112 RELAIS_ResetPuls();
113 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
114 LEDS_GN_Off();
115 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
116 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
117 printf("NEW_STATE: MAINSWITCH_ERROR\n");
118 smState = MAINSWITCH_ERROR;
119 }
120
121
122}
123
124void MAINSWITCH_SM_ManualOn(void)
125{
126 // Prüfe Wechsel in off mode
127 if (BUTTON_GetMode() == BUTTON_OFF)
128 {
129 //Ausschalten muss immer möglich sein
130 RELAIS_ResetPuls();
131 BUZZER_Alarm_Stop();
132 LEDS_GN_Off();
133 LEDS_RT_Off();
134 printf("NEW_STATE: MAINSWITCH_OFF\n");
135 smState = MAINSWITCH_OFF;
136 }
137
138}
139
140void MAINSWITCH_SM_Error(void)
141{
142 int faultInput;
143
144 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
145 {
146 faultInput = 1;
147 }
148 else
149 {
150 faultInput = 0;
151 }
152
153
154 //Prüfe auf Wechsel des Modus AUTO / SM ON
155 if (BUTTON_GetMode() == BUTTON_AUTO)
156 {
157 if (faultInput == 0)
158 {
159 RELAIS_SetPuls();
160 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
161 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
162 LEDS_RT_Off(); //Fehler löschen
163 printf("NEW_STATE: MAINSWITCH_ON\n");
164 smState = MAINSWITCH_ON;
165 }
166 else
167 {
168 //Wechsel nicht möglich. Fehler Eingang aktiv
169 BUZZER_Beep(BUZZER_ON_TIME_REJECT);
170 BUTTON_SetModeOff();
171 }
172 }
173
174 //Prüfe auf Wechsel in MANUAL ON Mode
175 //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
176 if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
177 {
178
179 RELAIS_SetPuls();
180 BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
181 LEDS_GN_On();
182 LEDS_RT_Off();
183 LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
184 printf("NEW_STATE: MAINSWITCH_MANUAL_ON\n");
185 smState = MAINSWITCH_MANUAL_ON;
186 }
187
188
189
190}
191
192
193
194void MODE_MAINSWITCH_Exec(void)
195{
196
197
198
199 switch (smState)
200 {
201 case MAINSWITCH_OFF:
202 MAINSWITCH_SM_Off();
203 break;
204
205 case MAINSWITCH_ON:
206 MAINSWITCH_SM_On();
207 break;
208
209 case MAINSWITCH_MANUAL_ON:
210 MAINSWITCH_SM_ManualOn();
211 break;
212
213 case MAINSWITCH_ERROR:
214 MAINSWITCH_SM_Error();
215 break;
216
217 default:
218 break;
219 }
220}
221
222
Note: See TracBrowser for help on using the repository browser.