Changeset 29 for trunk/firmware_v2/SES/src/mode_secondaryprotection.c
- Timestamp:
- Nov 1, 2025, 5:04:26 PM (30 hours ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/firmware_v2/SES/src/mode_secondaryprotection.c
r28 r29 41 41 } SECONDARYPROTECTION_state_t; 42 42 43 typedef enum SECONDARYPROTECTION_ErrorState_enum 44 { 45 ERROR_NONE, 46 ERROR_EXTERNAL_FAULT, //z.B Kurzschluss 47 ERROR_TEMPERATURE, 48 ERROR_VOLTAGE_DROP, 49 ERROR_LVP_AND_OVP, //z.B. kritische Überspannung, tiefeEntladung 50 } SECONDARYPROTECTION_ErrorState_t; 51 43 52 44 53 static SECONDARYPROTECTION_state_t smState; 54 static SECONDARYPROTECTION_ErrorState_t smError; 55 static int autoRetryMode; 45 56 46 57 … … 79 90 printf("NEW_STATE: SECONDARYPROTECTION_ON\n"); 80 91 smState = SECONDARYPROTECTION_ON; 92 smError = ERROR_NONE; 81 93 82 94 } … … 90 102 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 91 103 smState =SECONDARYPROTECTION_ERROR; 104 smError = ERROR_EXTERNAL_FAULT; 92 105 } 93 106 } … … 105 118 printf("NEW_STATE: SECONDARYPROTECTION_MANUAL_ON\n"); 106 119 smState = SECONDARYPROTECTION_MANUAL_ON; 120 smError = ERROR_NONE; 107 121 } 108 122 … … 120 134 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) 121 135 { 122 HAL_Delay(1); // Verzögerung 1ms damit eventuell noch zuerst durch smartPro der Strom gestoppt werden kann123 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)124 {125 136 faultInput = 1; 126 } 127 137 RELAIS_ResetPuls(); 138 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 139 LEDS_GN_Off(); 140 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 141 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 142 printf("FAULT INPUT EVENT DETECTED!\n"); 143 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 144 smState = SECONDARYPROTECTION_ERROR; 145 smError = ERROR_EXTERNAL_FAULT; 128 146 } 129 147 else … … 176 194 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 177 195 smState = SECONDARYPROTECTION_ERROR; 196 smError = ERROR_VOLTAGE_DROP; 178 197 VOLTAGE_MEAS_ResetCounter(); // Damit Fehlerzähler bei Neustart auf 0 179 198 } 180 199 200 201 202 if (lvpAndOvpInput == 1) 203 { 204 RELAIS_ResetPuls(); 205 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 206 LEDS_GN_Off(); 207 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_OVP_LVP, LED_RT_ON_TIME_WARN_OVP_AND_LVP_INPUT, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen 208 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 209 printf("BMS SECONDARY PROTECTION FAULT EVENT DETECTED (LVP & OVP )!\n"); 210 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 211 smState = SECONDARYPROTECTION_ERROR; 212 smError = ERROR_LVP_AND_OVP; 213 } 214 215 if (CHIP_TEMPERATURE_GetTemp() > 80) 216 { 217 RELAIS_ResetPuls(); 218 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 219 LEDS_GN_Off(); 220 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 221 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 222 printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n"); 223 smState = SECONDARYPROTECTION_ERROR; 224 smError = ERROR_TEMPERATURE; 225 } 226 227 228 229 } 230 231 static void SECONDARYPROTECTION_SM_ManualOn(void) 232 { 233 234 int faultInput = 0; 235 236 237 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) 238 { 239 faultInput = 1; 240 } 241 else 242 { 243 faultInput = 0; 244 } 181 245 182 246 if (faultInput == 1) … … 190 254 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 191 255 smState = SECONDARYPROTECTION_ERROR; 192 } 193 194 if (lvpAndOvpInput == 1) 195 { 196 RELAIS_ResetPuls(); 197 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 198 LEDS_GN_Off(); 199 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_OVP_LVP, LED_RT_ON_TIME_WARN_OVP_AND_LVP_INPUT, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen 200 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 201 printf("BMS SECONDARY PROTECTION FAULT EVENT DETECTED (LVP & OVP )!\n"); 202 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 203 smState = SECONDARYPROTECTION_ERROR; 204 } 205 206 if (CHIP_TEMPERATURE_GetTemp() > 80) 207 { 208 RELAIS_ResetPuls(); 209 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 210 LEDS_GN_Off(); 211 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 212 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 213 printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n"); 214 smState = SECONDARYPROTECTION_ERROR; 215 } 216 217 218 219 } 220 221 static void SECONDARYPROTECTION_SM_ManualOn(void) 222 { 223 224 int faultInput = 0; 225 226 227 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) 228 { 229 HAL_Delay(500); // Verzögerung 500ms damit eventuell noch zuerst durch smartPro der Strom gestoppt werden kann 230 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) 231 { 232 faultInput = 1; 233 } 234 235 } 236 else 237 { 238 faultInput = 0; 239 } 240 241 if (faultInput == 1) 242 { 243 RELAIS_ResetPuls(); 244 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 245 LEDS_GN_Off(); 246 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 247 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 248 printf("FAULT INPUT EVENT DETECTED!\n"); 249 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 250 smState = SECONDARYPROTECTION_ERROR; 256 smError = ERROR_EXTERNAL_FAULT; 251 257 } 252 258 … … 262 268 printf("NEW_STATE: SECONDARYPROTECTION_OFF\n"); 263 269 smState = SECONDARYPROTECTION_OFF; 270 smError = ERROR_NONE; 264 271 } 265 272 … … 270 277 int faultInput; 271 278 int lvpAndOvpInput; 279 static uint32_t retry_counter = 0; 280 static uint32_t oldTimeMSTick; 272 281 273 282 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) … … 293 302 printf("NEW_STATE: SECONDARYPROTECTION_ON\n"); 294 303 smState = SECONDARYPROTECTION_ON; 304 smError = ERROR_NONE; 295 305 } 296 306 else … … 314 324 printf("NEW_STATE: SECONDARYPROTECTION_MANUAL_ON\n"); 315 325 smState = SECONDARYPROTECTION_MANUAL_ON; 316 } 317 318 319 320 } 321 322 323 324 void MODE_SECONDARYPROTECTION_Exec(void) 325 { 326 327 326 smError = ERROR_NONE; 327 } 328 329 330 if (autoRetryMode == 1) { 331 332 if (oldTimeMSTick != HAL_GetTick()) 333 { 334 oldTimeMSTick = HAL_GetTick(); 335 retry_counter++; 336 } 337 338 if (retry_counter > 3600000) // 10 Minuten * 60 * 1000 = 600000 || 60 * 60 * 1000 =3600000 339 { 340 BUTTON_SetModeAuto(); 341 retry_counter=0; 342 } 343 } 344 } 345 346 347 348 void MODE_SECONDARYPROTECTION_Exec(int am) 349 { 350 351 autoRetryMode = am; 328 352 329 353 switch (smState)
Note: See TracChangeset
for help on using the changeset viewer.
