source: trunk/firmware_v3/STM32CubeIDE/src/mode_mainswitch.c@ 41

Last change on this file since 41 was 41, checked in by f.jahn, 8 days ago

V3 Version soweit fertig. Relais ansteuerung, modbus, temperatursensor ist implementiert
Commit vor Änderung auf neuen Controller mit mehr Speicher

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