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

Last change on this file since 17 was 17, checked in by f.jahn, 9 days 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.