Exemple #1
0
// запуск ДК после аварии
void DK_RESTART(void)
{
LIGHT_STA = LIGHT_WORK;
Init_DK();
DK_MAIN();
//tn_reset(); // сбросс CPU
}
Exemple #2
0
//------------------------------------------------------------------------------
// fin_try==0 - последняя поппытка, можно и записать в журнал ерроры
BOOL ligh_load_init(int  fin_try)
{
    //
    memset(&DK[CUR_DK],0,sizeof(DK[CUR_DK]));
    // clear crc
    memset(&crc_idp,0,sizeof(crc_idp));
    // FLASH_PROGS
    flash_rd(FLASH_PROGRAM, sizeof(TPROJECT)*CUR_DK,
             (unsigned char*)&PROJ[CUR_DK], sizeof(PROJ[CUR_DK]));
    unsigned long crc=crc32_calc((unsigned char*)&PROJ[CUR_DK] ,
                                 sizeof(PROJ[CUR_DK]) - sizeof(PROJ[CUR_DK].CRC32));
    //
    unsigned long crc_progs;
    flash_rd(FLASH_PROGS, sizeof(TPROGRAMS)*(CUR_DK+1)-sizeof(crc_progs) ,
             (unsigned char*)&crc_progs, sizeof(crc_progs));
    //
    crc_idp.crc =  crc_progs;// сохраним для передачи по UDP
    //i_size = sizeof(PROJ[CUR_DK]);
    if (PROJ[CUR_DK].ProjectSize ==sizeof(PROJ[CUR_DK]))
    {
      if ( crc == PROJ[CUR_DK].CRC32)
      {
        //
        if (crc_progs==PROJ[CUR_DK].CRC32_programs)
        {
          Init_DK();
          DK[CUR_DK].proj_valid=true;
          DK[CUR_DK].work = true;
          DK[CUR_DK].progs_valid = true;
          return true;
        }
        else
        {

            dbg_printf("FAULT. CRC32 of progs invalid");
            if (CUR_DK==0)
            if (!fin_try)
              Event_Push_Str("Некорр. программы (CRC)");
        }
      }
      else
      {
        dbg_printf("FAULT. PROJ.CRC32");
        if (CUR_DK==0)
        if (!fin_try)
          Event_Push_Str("Некорр. проект (CRC).");
      }
    }
    else
    {
      if (CUR_DK==0)
       if (!fin_try)
         Event_Push_Str("Некорр. проект (размер).");
       //
      dbg_printf("FAULT. PROJ.ProjectSize ==sizeof(PROJ)");
    }
return false;
}
Exemple #3
0
//------------------------------------------------------------------------------
// следующая попытка
static void Next_Try(bool b)
{
    if (!DK[CUR_DK].no_FAULT)
    if (b)
    {
      //все отключаем
     if (reboot_tryes<PROJ[CUR_DK].guard.restarts)
     {
        reboot_tryes++;
        if (chan_faults!=FT_RED_CONFL){
            POWER_SET(false); // off rele
            SIGNAL_OFF();
            Save_LET();
            //
            for (int i_dk=0; i_dk<dk_num; i_dk++)
              {
              CUR_DK = i_dk;
              Init_DK();
              DK_ALARM_OC();
              }
           //
           DK_MAIN();
           light_machine.work=false;
           //
          }else{
           Save_LET();
           for (int i_dk=0; i_dk<dk_num; i_dk++)
              {
              CUR_DK = i_dk;
              Init_DK();
              DK_ALARM_OC();//DK_ALARM_YF();
              }
           DK_MAIN();
          }
        Next_Try_wait = true;
        chan_faults=FT_NO;
        tn_task_sleep(100);
     }
     else
     {
          DK_HALT();
     }
    }
}