Ignore:
Timestamp:
Nov 1, 2025, 5:04:26 PM (30 hours ago)
Author:
f.jahn
Message:
  • Auto Restart mode implementiert
  • IWDG implementiert
  • 24V Kompiler Version implementiert
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/firmware_v2/SES/src/mode_secondaryprotection_plus.c

    r28 r29  
    3535} SECONDARYPROTECTION_state_t;
    3636
     37typedef enum SECONDARYPROTECTION_ErrorState_enum
     38{
     39  ERROR_NONE,
     40  ERROR_EXTERNAL_FAULT, //z.B Kurzschluss
     41  ERROR_TEMPERATURE,
     42  ERROR_VOLTAGE_DROP,
     43  ERROR_LVP_AND_OVP,      //z.B. kritische Überspannung, tiefeEntladung
     44} SECONDARYPROTECTION_ErrorState_t;
     45
    3746
    3847static SECONDARYPROTECTION_state_t smState;
    39 
     48static SECONDARYPROTECTION_ErrorState_t smError = ERROR_NONE;
     49static int autoRetryMode;
    4050
    4151static void SECONDARYPROTECTION_SM_Off(void)
     
    7383      printf("NEW_STATE: SECONDARYPROTECTION_ON\n");
    7484      smState = SECONDARYPROTECTION_ON;
     85          smError = ERROR_NONE;
    7586
    7687    }
     
    8394          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
    8495      printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    85       smState =SECONDARYPROTECTION_ERROR;
     96      smState = SECONDARYPROTECTION_ERROR;
     97          smError = ERROR_EXTERNAL_FAULT;
     98       
    8699    }
    87100  }
     
    121134  }
    122135 
     136
     137  if (faultInput == 1)
     138  {
     139    RELAIS_ResetPuls();
     140    BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
     141    LEDS_GN_Off();
     142    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
     143    BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
     144    printf("FAULT INPUT EVENT DETECTED!\n");
     145    printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
     146    smState = SECONDARYPROTECTION_ERROR;
     147        smError = ERROR_EXTERNAL_FAULT;
     148        return;
     149  }
     150
     151
     152
    123153  if ((HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_SET) &&  (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_SET))
    124154  {
     
    152182    printf("NEW_STATE: SECONDARYPROTECTION_OFF\n");
    153183    smState = SECONDARYPROTECTION_OFF;
     184        smError = ERROR_NONE;
    154185  }
    155186
     
    165196          printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    166197          smState = SECONDARYPROTECTION_ERROR; 
     198          smError = ERROR_VOLTAGE_DROP;
    167199          VOLTAGE_MEAS_ResetCounter(); // Damit Fehlerzähler bei Neustart auf 0
    168200  }
    169201
    170202
    171   if (faultInput == 1)
    172   {
    173     RELAIS_ResetPuls();
    174     BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
    175     LEDS_GN_Off();
    176     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
    177     BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
    178     printf("FAULT INPUT EVENT DETECTED!\n");
    179     printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    180     smState = SECONDARYPROTECTION_ERROR;
    181   }
    182203
    183204  if (lvpAndOvpInput == 1)
     
    191212    printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    192213    smState = SECONDARYPROTECTION_ERROR;
     214        smError = ERROR_LVP_AND_OVP;
    193215  }
    194216
     
    202224        printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n");
    203225        smState = SECONDARYPROTECTION_ERROR;         
     226        smError = ERROR_TEMPERATURE;
    204227  }
    205228
     
    228251  int faultInput;
    229252  int lvpAndOvpInput;
     253  static uint32_t retry_counter = 0;
     254  static uint32_t oldTimeMSTick;
    230255
    231256  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
     
    241266
    242267  //Prüfe auf Wechsel des Modus AUTO / SM ON
    243   if (BUTTON_GetMode() == BUTTON_AUTO)
     268  if (BUTTON_GetMode() == BUTTON_AUTO) 
    244269  {
    245270    if (faultInput == 0)
    246271    {
     272          retry_counter = 0;
    247273      RELAIS_SetPuls();
    248274      BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
     
    251277      printf("NEW_STATE: SECONDARYPROTECTION_ON\n");
    252278      smState = SECONDARYPROTECTION_ON;
     279          smError = ERROR_NONE;
    253280    }
    254281    else
     
    260287  }
    261288
     289  if (autoRetryMode == 1) {
     290
     291    if (oldTimeMSTick != HAL_GetTick())
     292    {
     293        oldTimeMSTick = HAL_GetTick();
     294        retry_counter++;
     295    }
     296
     297    if  (retry_counter > 3600000)  // jede stunde
     298    {
     299        BUTTON_SetModeAuto();
     300        retry_counter = 0;
     301    }
     302  }
    262303  //Prüfe auf Wechsel in MANUAL ON Mode
    263304  //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
     
    280321
    281322
    282 void MODE_SECONDARYPROTECTION_PLUS_Exec(void)
    283 {
    284 
    285  
     323void MODE_SECONDARYPROTECTION_PLUS_Exec(int am)
     324{
     325
     326        autoRetryMode = am;
    286327
    287328  switch (smState)
Note: See TracChangeset for help on using the changeset viewer.