source: trunk/firmware_v4/SES/src/mode_ovp.c@ 42

Last change on this file since 42 was 42, checked in by f.jahn, 5 days ago
File size: 7.2 KB
Line 
1
2// Wie OVP||OVP Modul
3// Jedoch hier nur OVP
4
5
6
7#include "stdio.h"
8#include "mode_ovp.h"
9#include "button.h"
10#include "relais.h"
11#include "main.h"
12#include "leds.h"
13#include "buzzer.h"
14#include "chip_temperature.h"
15
16
17typedef enum OVP_State_enum
18{
19 OVP_OFF,
20 OVP_ON,
21 OVP_MANUAL_ON,
22 OVP_ERROR
23} OVP_state_t;
24
25
26static OVP_state_t smState;
27
28
29static void OVP_SM_Off(void)
30{
31 int faultInput;
32
33
34 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
35 {
36 faultInput = 1;
37 }
38 else
39 {
40 faultInput = 0;
41 }
42
43
44
45
46
47 //Prüfe auf Wechsel des Modus AUTO / SM ON
48 if (BUTTON_GetMode() == BUTTON_AUTO)
49 {
50 if (faultInput == 0)
51 {
52 RELAIS_SetPuls();
53 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
54 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
55#ifdef DEBUG
56 printf("OVP_SM_Off: NEW_STATE: OVP_ON\n");
57#endif
58 smState = OVP_ON;
59
60 }
61 else
62 {
63 //Wechsel nicht möglich. Fehler Eingang aktiv
64 BUZZER_Beep(BUZZER_ON_TIME_REJECT);
65 BUTTON_SetModeOff();
66 //LEDS_RT_Blink_Start(LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME); //Fehler Anzeigen
67 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen
68#ifdef DEBUG
69 printf("OVP_SM_Off: NEW_STATE: OVP_ERROR_FAULT_INPUT\n");
70#endif
71 smState =OVP_ERROR;
72 }
73 }
74
75
76 //Prüfe auf Wechsel in MANUAL ON Mode
77 //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
78 if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
79 {
80
81 RELAIS_SetPuls();
82 BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
83 LEDS_GN_On();
84 LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_RT_OFF_TIME, LED_RT_OFF_TIME * 5); //Fehler Anzeigen
85#ifdef DEBUG
86 printf("NEW_STATE: OVP_MANUAL_ON\n");
87#endif
88 smState = OVP_MANUAL_ON;
89 }
90
91
92
93}
94
95static void OVP_SM_On(void)
96{
97 int faultInput = 0;
98 static int ovpInput = 0;
99 static int ovpTimeCounter = 0;
100 static int oldtime;
101
102 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
103 {
104 faultInput = 1;
105 }
106 else
107 {
108 faultInput = 0;
109 }
110
111 if ((HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_SET) || (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_SET))
112 {
113 if (HAL_GetTick() != oldtime)
114 {
115 if (ovpTimeCounter < 5000) ovpTimeCounter++;
116 if (ovpTimeCounter >= 5000)
117 {
118 ovpInput = 1;
119 ovpTimeCounter=0;
120 }
121 oldtime = HAL_GetTick();
122 }
123 }
124
125 if (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_RESET)
126 {
127// if (HAL_GetTick() != oldtime)
128// {
129// ovpAndOvpInputTimeCounter++;
130// if (ovpAndOvpInputTimeCounter > 30000)
131// {
132 ovpInput = 0;
133 ovpTimeCounter=0;
134// }
135// oldtime = HAL_GetTick();
136// }
137 }
138
139
140
141
142 //Prüfe auf Fehlermode
143 if (faultInput == 1)
144 {
145 RELAIS_ResetPuls();
146 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
147 LEDS_GN_Off();
148 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen
149 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
150#ifdef DEBUG
151 printf("FAULT INPUT EVENT DETECTED!\n");
152 printf("NEW_STATE: OVP_ERROR\n");
153#endif
154 smState = OVP_ERROR;
155 }
156
157 if (CHIP_TEMPERATURE_GetTemp() > 80)
158 {
159 RELAIS_ResetPuls();
160 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
161 LEDS_GN_Off();
162 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_TEMP, LED_RT_ON_TIME_WARN_TEMP, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
163 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
164#ifdef DEBUG
165 printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n");
166#endif
167 smState = OVP_ERROR;
168 }
169
170
171 //OVP oder OVP hat stattgefunden, und Relais ist ein, dann aus
172 if ((ovpInput == 1) && (RELAIS_GetState() == 1))
173 {
174 RELAIS_ResetPuls();
175 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
176 LEDS_GN_Off();
177#ifdef DEBUG
178 printf("OVP OFF!\n");
179 printf("NEW_STATE: OVP_Auto On, Relais off\n");
180#endif
181 }
182
183 //KEIN OVP und keine OVP Abschaltung, Relais ist aber noch aus, dann einschalten
184 if ((ovpInput == 0) && (RELAIS_GetState() == 0))
185 {
186 RELAIS_SetPuls();
187 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Warnung
188 LEDS_GN_Off();
189 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
190#ifdef DEBUG
191 printf("OVP ON!\n");
192 printf("NEW_STATE: OVP_OVP_Auto On, Relais on\n");
193#endif
194 }
195
196 // Prüfe Wechsel in off mode
197 if (BUTTON_GetMode() == BUTTON_OFF)
198 {
199 //Ausschalten muss immer möglich sein
200 RELAIS_ResetPuls();
201 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung
202 LEDS_GN_Off();
203 LEDS_RT_Off();
204#ifdef DEBUG
205 printf("NEW_STATE: OVP_OFF\n");
206#endif
207 smState = OVP_OFF;
208 //Damit beim drücken auf on erstmal eingeschaltet wird
209 ovpTimeCounter=0;
210 ovpInput = 0;
211 }
212
213
214}
215
216static void OVP_SM_ManualOn(void)
217{
218 // Prüfe Wechsel in off mode
219 if (BUTTON_GetMode() == BUTTON_OFF)
220 {
221 //Ausschalten muss immer möglich sein
222 RELAIS_ResetPuls();
223 BUZZER_Alarm_Stop();
224 LEDS_GN_Off();
225 LEDS_RT_Off();
226#ifdef DEBUG
227 printf("NEW_STATE: OVP_OFF\n");
228#endif
229 smState = OVP_OFF;
230 }
231
232}
233
234static void OVP_SM_Error(void)
235{
236 int faultInput;
237 int ovpAndOvpInput;
238
239 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
240 {
241 faultInput = 1;
242 }
243 else
244 {
245 faultInput = 0;
246 }
247
248
249
250 //Prüfe auf Wechsel des Modus AUTO / SM ON
251 if (BUTTON_GetMode() == BUTTON_AUTO)
252 {
253 if (faultInput == 0)
254 {
255 RELAIS_SetPuls();
256 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
257 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
258 LEDS_RT_Off(); //Fehler löschen
259#ifdef DEBUG
260 printf("NEW_STATE: OVP_ON\n");
261#endif
262 smState = OVP_ON;
263 }
264 else
265 {
266 //Wechsel nicht möglich. Fehler Eingang weiterhin aktiv
267 BUZZER_Beep(BUZZER_ON_TIME_REJECT);
268 BUTTON_SetModeOff();
269 }
270 }
271
272 //Prüfe auf Wechsel in MANUAL ON Mode
273 //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
274 if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
275 {
276
277 RELAIS_SetPuls();
278 BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
279 LEDS_GN_On();
280 LEDS_RT_Off();
281 LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen
282#ifdef DEBUG
283 printf("NEW_STATE: OVP_MANUAL_ON\n");
284#endif
285 smState = OVP_MANUAL_ON;
286 }
287}
288
289
290
291void MODE_OVP_Exec(void)
292{
293 switch (smState)
294 {
295 case OVP_OFF:
296 OVP_SM_Off();
297 break;
298
299 case OVP_ON:
300 OVP_SM_On();
301 break;
302
303 case OVP_MANUAL_ON:
304 OVP_SM_ManualOn();
305 break;
306
307 case OVP_ERROR:
308 OVP_SM_Error();
309 break;
310
311 default:
312 break;
313 }
314}
315
316
Note: See TracBrowser for help on using the repository browser.