/*
 * sbor_shema.c
 *
 *  Created on: 18 ôåâð. 2021 ã.
 *      Author: stud
 */
#include "sbor_shema.h"
#include "IQmathLib.h"
#include "edrk_main.h"
#include "optical_bus.h"
#include "adc_tools.h"
#include "control_station.h"
#include "control_station_project.h"
#define RASCEPITEL_MANUAL_ALWAYS_ON     0//1
///////////////////////////////////////////////
///////////////////////////////////////////////
#define IQ_MINIMAL_DELTA_RUN_CHARGE     279620      // 50V   //559240   //100 V

#define IQ_MINIMAL_DELTA_RUN_WORK       1677720 // 300 V // 559240      // 100V

#define IQ_MINIMAL_ZAD_U_CHARGE             55924       // 10V
#define IQ_MAXIMAL_ZAD_U_CHARGE             14596177       // 2610V
#define IQ_MINIMAL_DELTA_RUN_CHARGE2        139810      //25 V
#define TIME_WAIT_CHARGE_ON                 100             //10 sec
#define TIME_PAUSE_U_RISE                   30 // 1 sec

#define IQ_MINIMAL_RISE_U               55924       // 10V

unsigned int zaryad_on_off(unsigned int flag)
{
    static int restart_charge=0, batt_ok = 0;
    static unsigned int time_wait_on_charge=0;
    static unsigned int time_pause_detect_u_rise=0;

    static _iq prev_U1=0, prev_U2 = 0;

    batt_ok = 0;
// ðàçáåæêà ïî áàíêàì - îøèáêà!!!
    if (_IQabs(filter.iqU_1_long-filter.iqU_2_long)>IQ_MINIMAL_DELTA_RUN_WORK)
    {
//     edrk.errors.e6.bits.ERROR_PRE_CHARGE_U |= 1;
       edrk.errors.e6.bits.ER_DISBAL_BATT |= 1;
       edrk.to_ing.bits.ZARYAD_ON = 0;
       batt_ok = 0;
    }

    if (flag && edrk.summ_errors==0 && edrk.errors.e6.bits.ERROR_PRE_CHARGE_U==0 && edrk.errors.e6.bits.ER_DISBAL_BATT==0 )
    {
// íåò çàäàíèß!!!
        if ((edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_ZAD_U_CHARGE) <= 0)
        {
          edrk.errors.e5.bits.ERROR_PRE_CHARGE_ON |= 1;
          edrk.to_ing.bits.ZARYAD_ON = 0;
          return 0;
        }
        // áîëüøîå çàäàíèå!!!

        if ((IQ_MAXIMAL_ZAD_U_CHARGE - edrk.zadanie.iq_ZadanieU_Charge) < 0)
        {
          edrk.errors.e5.bits.ERROR_PRE_CHARGE_ON |= 1;
          edrk.to_ing.bits.ZARYAD_ON = 0;
          return 0;
        }

// åñòü ðàçáåæêà ïî áàíêàì
        if (_IQabs(filter.iqU_1_long-filter.iqU_2_long)>IQ_MINIMAL_DELTA_RUN_CHARGE)
        {
          edrk.errors.e6.bits.ER_DISBAL_BATT |= 1;
          edrk.to_ing.bits.ZARYAD_ON = 0;
          return 0;
        }

        if (restart_charge == 0)
        {

        //  çàðßä íîðìà è áûëî âêëþ÷åíî, âûêëþ÷àåì
          if   (  edrk.from_ing1.bits.ZARYAD_ON &&
                 (filter.iqU_1_long>=(edrk.zadanie.iq_ZadanieU_Charge)
                 || filter.iqU_2_long>=(edrk.zadanie.iq_ZadanieU_Charge))
                 )
          {
            restart_charge = 1;
            edrk.to_ing.bits.ZARYAD_ON = 0;
          }
          else
          {
              //TODO !!! ïî ñóòè ïîâòîðÿåò ïðåäûäóùèé if. Óäàëèòü?
            if ( edrk.from_ing1.bits.ZARYAD_ON==0 &&
               (filter.iqU_1_long>=(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE)
              || filter.iqU_2_long>=(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))  )
            {
              restart_charge = 1;
              edrk.to_ing.bits.ZARYAD_ON = 0;
            }
            else
            {
            // çàðßä ìåíüøå íóæíîãî, âêëþ÷àåì.
               if ( (filter.iqU_1_long<(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))
                && (filter.iqU_2_long<(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))  )
                    edrk.to_ing.bits.ZARYAD_ON = 1;

            }

          }

          if (pause_detect_error(&time_pause_detect_u_rise,TIME_PAUSE_U_RISE,1))
          {
            time_pause_detect_u_rise = 0;

            if (((filter.iqU_1_long-prev_U1)>=IQ_MINIMAL_RISE_U) ||
                ((filter.iqU_2_long-prev_U2)>=IQ_MINIMAL_RISE_U)  )
                time_wait_on_charge = 0;


            prev_U1 = filter.iqU_1_long;
            prev_U2 = filter.iqU_2_long;
          }


          // íå äîæäàëèñü çàðßäà!!!
          if (pause_detect_error(&time_wait_on_charge,TIME_WAIT_CHARGE_ON,1))
            edrk.errors.e6.bits.ERROR_PRE_CHARGE_U |= 1;
/*

          if (filter.iqU_1_long>=(edrk.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE2)
              || filter.iqU_2_long>=(edrk.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE2))
          {
            restart_charge = 1;
            edrk.to_ing.bits.ZARYAD_ON = 0;
          }
          else
          {
          // åñòü ðàçáåæêà ïî áàíêàì
            if (_IQabs(filter.iqU_1_long-filter.iqU_2_long)>IQ_MINIMAL_DELTA_RUN_CHARGE)
              edrk.errors.e6.bits.ER_DISBAL_BATT |= 1;

          // çàðßä ìåíüøå íóæíîãî, âêëþ÷àåì.
            if ( (filter.iqU_1_long<(edrk.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))
                || (filter.iqU_2_long<(edrk.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))  )
              edrk.to_ing.bits.ZARYAD_ON = 1;

            if ( (filter.iqU_1_long>=(edrk.iq_ZadanieU_Charge))
                && (filter.iqU_2_long>=(edrk.iq_ZadanieU_Charge))  )
            {
              restart_charge = 1;
              edrk.to_ing.bits.ZARYAD_ON = 0;
            }
          }
*/

        }
        else//restart_charge==0
        {
         // ïî÷åìó-òî çàðßä ñòàë ìåíüøå!!!
            if ( (filter.iqU_1_long<(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))
                || (filter.iqU_2_long<(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))  )
              edrk.errors.e6.bits.ERROR_PRE_CHARGE_U |= 1;

        }  //restart_charge==0
    }
    else // flag==1
    {
        restart_charge = 0;
        edrk.to_ing.bits.ZARYAD_ON = 0;
        time_wait_on_charge = 0;
        prev_U1 = filter.iqU_1_long;
        prev_U2 = filter.iqU_2_long;
    }

    if ( (filter.iqU_1_long>=(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))
                && (filter.iqU_2_long>=(edrk.zadanie.iq_ZadanieU_Charge-IQ_MINIMAL_DELTA_RUN_CHARGE))
                && (_IQabs(filter.iqU_1_long-filter.iqU_2_long)<IQ_MINIMAL_DELTA_RUN_WORK)
                && (filter.iqU_1_long<=(edrk.zadanie.iq_ZadanieU_Charge+IQ_MINIMAL_DELTA_RUN_CHARGE))
                && (filter.iqU_2_long<=(edrk.zadanie.iq_ZadanieU_Charge+IQ_MINIMAL_DELTA_RUN_CHARGE))
                && edrk.to_ing.bits.ZARYAD_ON==0
                && edrk.from_ing1.bits.ZARYAD_ON==0
                && edrk.errors.e5.bits.ERROR_PRE_CHARGE_ON==0
                && edrk.errors.e6.bits.ERROR_PRE_CHARGE_U==0
                )
      batt_ok = 1;

//  return (restart_charge && edrk.errors.e5.bits.ERROR_PRE_CHARGE_ON==0 && edrk.errors.e6.bits.ERROR_PRE_CHARGE_U==0);
    return batt_ok;

}

///////////////////////////////////////////////
///////////////////////////////////////////////
void set_status_pump_fan(void)
{

    if (edrk.from_ing1.bits.VENTIL_ON==1)
      edrk.StatusFunAll = 1;
    else
      edrk.StatusFunAll = 0;

/*
    if ((edrk.from_ing.bits.NASOS_NORMA == 1) &&
        edrk.StartPump && edrk.errors.e5.bits.PRE_READY_PUMP == 0 &&
        (edrk.to_ing.bits.NASOS_1_ON || edrk.to_ing.bits.NASOS_2_ON) &&
        (edrk.errors.e5.bits.PUMP_1==0) && (edrk.errors.e5.bits.PUMP_2==0) &&
        edrk.errors.e2.bits.P_WATER_INT_MAX==0 && edrk.errors.e2.bits.P_WATER_INT_MIN==0)
*/
    if (
        (edrk.from_ing1.bits.NASOS_NORMA == 1) &&
        (edrk.to_ing.bits.NASOS_1_ON || edrk.to_ing.bits.NASOS_2_ON) &&
        edrk.from_ing1.bits.NASOS_ON && edrk.errors.e5.bits.PRE_READY_PUMP == 0 &&
        (edrk.errors.e5.bits.PUMP_1==0) && (edrk.errors.e5.bits.PUMP_2==0)
        )
    {
        if (edrk.to_ing.bits.NASOS_1_ON)
          edrk.StatusPump0 = 1;
        else
          edrk.StatusPump0 = 0;

        if (edrk.to_ing.bits.NASOS_2_ON)
          edrk.StatusPump1 = 1;
        else
          edrk.StatusPump1 = 0;

        edrk.StatusPumpAll = 1;



    }
    else
    {

        edrk.StatusPump0 = 0;
        edrk.StatusPump1 = 0;

        edrk.StatusPumpAll = 0;
    }


    if (edrk.StatusFunAll && edrk.StatusPumpAll)
      edrk.StatusPumpFanAll = 1;
    else
    {
      // åñëè åñòü çàïðåò ïóñêà íàñîñîâ èç òåðìèíàëêè, òî èìèòèðóåì âêëþ÷åíÿè íàñîñîâ è âåíòèëÿòîðîâ.
      if (control_station.active_array_cmd[CONTROL_STATION_CMD_DISABLE_ON_PUMP])
          edrk.StatusPumpFanAll = 1;
      else
      {
          edrk.StatusPumpFanAll = 0;
      }
    }

}
///////////////////////////////////////////////
///////////////////////////////////////////////
int detect_zaryad_ump(void)
{
    if (edrk.from_shema.bits.UMP_ON_OFF==1)
        {
            if (    (filter.iqUin_m1>=edrk.iqMIN_U_IN)
                 && (filter.iqUin_m2>=edrk.iqMIN_U_IN)
                 && (filter.iqUin_m1<=edrk.iqMAX_U_IN)
                 && (filter.iqUin_m2<=edrk.iqMAX_U_IN)   )
                return 1;
            else
                return 0;

        }
        else
            return 0;
}
///////////////////////////////////////////////

///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////

#define TIME_WAIT_SBOR          2500
#define TIME_WAIT_ANSWER_NASOS  500
#define TIME_WAIT_OK_NASOS      50

///////////////////////////////////////////////
///////////////////////////////////////////////
void sbor_shema_pusk_nasos(unsigned int t_start, unsigned int t_finish)
{
    static unsigned int time_error_nasos = 0;
    static unsigned int time_ok_nasos = 0;

    int status_pump, status_pump_long;

     // ïóñê íàñîñà
     if (edrk.Sbor_Mode == t_start)
     {
         if (control_station.active_array_cmd[CONTROL_STATION_CMD_DISABLE_ON_PUMP]==0)
           edrk.AutoStartPump = 1;

         time_error_nasos = 0;
         time_ok_nasos    = 0;

         if (control_station.active_array_cmd[CONTROL_STATION_CMD_DISABLE_ON_PUMP]==1)
             edrk.Sbor_Mode = t_finish; // èìèòàöèÿ çàâåðøåíèÿ ïóñêà íàñîñà
     }

     // æäåì ïóñêà íàñîñà
     if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish)
     {
         edrk.Stage_Sbor = 1;

         status_pump = get_status_p_water_min(edrk.StatusPumpFanAll);

/*         if (status & 4)
               edrk.errors.e2.bits.P_WATER_INT_MIN |= 1;
         if (status==2)
               edrk.warnings.e2.bits.P_WATER_INT_MIN = 1;
         if (status==1)
               edrk.warnings.e2.bits.P_WATER_INT_MIN = 0;
*/

         // æäåì íåêîòîðîå âðåìÿ ïîêà êà÷àåò íàñîñ ñ íîðìàëüíûì äàâëåíèåì status_pump == 1
         if (status_pump)
         {
             if (pause_detect_error(&time_ok_nasos,TIME_WAIT_OK_NASOS,1))
             {
                 status_pump_long = 1;
             }
         }
         else
         {
             time_ok_nasos    = 0;
             status_pump_long = 0;
         }


         if (edrk.StatusPumpFanAll && status_pump==1)  // æäåì ïóñêà íàñîñà è äàâëåíèÿ
         {
            edrk.Sbor_Mode = t_finish;
         }

         // íàñîñ íå ïóñòèëñÿ, ïðîáóåì âòîðîé
         if (edrk.Sbor_Mode==(t_start + (t_finish-t_start)>>1))
         {


         }

         // íàñîñ íå ïóñòèëñÿ, îøèáêà
         if (edrk.Sbor_Mode==(t_finish-1))
         {
             edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
             edrk.errors.e11.bits.ERROR_PUMP_ON_SBOR |= 1;
             edrk.Status_Sbor    = 2;
             edrk.AutoStartPump = 0;
         }

     }
// àíàëèç óæå ïîñëå çàïóñêà íàñîñà
     if (edrk.Sbor_Mode>t_finish)
     {
         if (edrk.StatusPumpFanAll==0)
         {
             // íàñîñ âûêëþ÷èëñÿ âäðóã
             if (edrk.SelectPump1_2==1)
             {
                 // ìû áûëè â àâòîâûáîðå íàñîñà 1
                 // æäåì íåêîòîðîå âðåìÿ ïîêà ïåðåêëþ÷àåòñÿ íàñîñ
                 if (pause_detect_error(&time_error_nasos,TIME_WAIT_ANSWER_NASOS,1))
                 {
                  edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
                  edrk.errors.e11.bits.ERROR_RESTART_PUMP_1_ON_SBOR |= 1;
                  edrk.Status_Sbor    = 102;
                  edrk.AutoStartPump = 0;
                 }
             }
             else
             if (edrk.SelectPump1_2==2)
             {
                 // ìû áûëè â àâòîâûáîðå íàñîñà 2
                 // æäåì íåêîòîðîå âðåìÿ ïîêà ïåðåêëþ÷àåòñÿ íàñîñ
                 if (pause_detect_error(&time_error_nasos,TIME_WAIT_ANSWER_NASOS,1))
                 {
                  edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
                  edrk.errors.e11.bits.ERROR_RESTART_PUMP_1_ON_SBOR |= 1;
                  edrk.Status_Sbor    = 102;
                  edrk.AutoStartPump = 0;
                 }
             }
             else
             {
                 edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
                 edrk.errors.e11.bits.ERROR_RESTART_PUMP_ALL_ON_SBOR |= 1;
                 edrk.Status_Sbor    = 102;
                 edrk.AutoStartPump = 0;
             }
         }
         else
             time_error_nasos = 0;

     }
}

void sbor_shema_pusk_zaryad(unsigned int t_start, unsigned int t_finish)
{
    /////////////////////////////////////
    // çàïóñê çàðÿäà âíóòðåííåãî
    if (edrk.Sbor_Mode == t_start)
    {
        if (control_station.active_array_cmd[CONTROL_STATION_CMD_ENABLE_ON_CHARGE]==1)
          edrk.Run_Pred_Zaryad = 1; // çàïóñê ïðåäçàðßäà!
    }

    // æäåì çàâåðøåíèÿ ðàáîòû ïðåäçàðÿäà
    // òóò ïðåäçàðßä äîëæåí óæå çàêîí÷èòü ðàáîòó

     if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish && (edrk.Status_Charge || (control_station.active_array_cmd[CONTROL_STATION_CMD_ENABLE_ON_CHARGE]==0))
         && edrk.from_ing1.bits.ZARYAD_ON==0 && edrk.StatusPumpFanAll)
     {
         edrk.Stage_Sbor = 2;
         if ((edrk.Status_Charge || (control_station.active_array_cmd[CONTROL_STATION_CMD_ENABLE_ON_CHARGE]==0))
                  && edrk.from_ing1.bits.ZARYAD_ON==0 && edrk.StatusPumpFanAll)
         {
             edrk.Zaryad_OK = 1;
             edrk.Run_Pred_Zaryad = 0;
             edrk.Sbor_Mode = t_finish;
         }

         // íåò çàðÿäà, îøèáêà
         if (edrk.Sbor_Mode==(t_finish-1))
         {
           edrk.Run_Pred_Zaryad = 0;
           edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
           edrk.errors.e11.bits.ERROR_PRED_ZARYAD |= 1;
           edrk.Status_Sbor    = 4;
         }

     }

     if (edrk.Sbor_Mode>t_finish)
     {
         if (edrk.Zaryad_OK==0 || edrk.from_ing1.bits.ZARYAD_ON==1 )
         {
             edrk.Run_Pred_Zaryad = 0;
             edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
             edrk.errors.e11.bits.ERROR_PRED_ZARYAD_AFTER |= 1;
             edrk.Status_Sbor    = 104;
         }
     }

}
void sbor_shema_pusk_ump(unsigned int t_start, unsigned int t_finish)
{
    // âêëþ÷àåì UMP
            if (edrk.Sbor_Mode==t_start && edrk.Zaryad_OK == 1)
            {
                  edrk.Run_UMP = 1;
            }


            if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish)
            {
                edrk.Stage_Sbor = 3;
                if (edrk.Zaryad_OK == 1 && edrk.Status_UMP_Ok==1 && edrk.Zaryad_UMP_Ok==1)
                    edrk.Sbor_Mode = t_finish;

                // íåò çàðÿäà, îøèáêà
                 if (edrk.Sbor_Mode==(t_finish-1))
                 {
                   edrk.Run_UMP = 0;
                   edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
                   edrk.errors.e11.bits.ERROR_UMP_NOT_ON |= 1;
                   edrk.Status_Sbor    = 5;
                 }

            }


//            if (edrk.Sbor_Mode>t_finish && (edrk.Zaryad_OK == 0 || edrk.Status_UMP_Ok==0))
//            {
//
//                edrk.Run_UMP = 0;
//                edrk.Run_Pred_Zaryad = 0;
//                edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//                edrk.errors.e7.bits.UMP_NOT_ANSWER |= 1;
//                edrk.Run_QTV = 0;
//                edrk.Status_Sbor    = 105;
//            }


}

void sbor_shema_pusk_qtv(unsigned int t_start, unsigned int t_finish)
{
    if (edrk.Sbor_Mode==t_start && edrk.Zaryad_OK == 1 && edrk.Status_UMP_Ok)
    {
        edrk.Run_QTV = 1;
    }


    if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish )
    {
        edrk.Stage_Sbor = 4;
        if ((edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1  && edrk.Status_UMP_Ok))
          edrk.Sbor_Mode = t_finish;

        if (edrk.Sbor_Mode==(t_finish-1) && edrk.Status_UMP_Ok==0)
         {
           edrk.Run_QTV = 0;
           edrk.Run_UMP = 0;
           edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
           edrk.errors.e11.bits.ERROR_READY_UMP_BEFORE_QTV |= 1;
           edrk.Status_Sbor    = 6;
         }
    }


    if (edrk.Sbor_Mode>t_finish)
    {
      if (edrk.Zaryad_OK == 0 || edrk.Status_QTV_Ok==0)
      {
          edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
          edrk.errors.e11.bits.ERROR_STATUS_QTV |= 1;
          edrk.Run_QTV = 0;
          edrk.Status_Sbor    = 106;
      }

    }

}

void sbor_shema_stop_ump(unsigned int t_start, unsigned int t_finish)
{
    // âêëþ÷àåì UMP
            if (edrk.Sbor_Mode==t_start && edrk.Status_QTV_Ok == 1)
            {
                  edrk.Run_UMP = 0;
            }


            if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish)
            {

                edrk.Stage_Sbor = 5;
                if (edrk.Status_UMP_Ok==0)
                    edrk.Sbor_Mode = t_finish;

                // íåò çàðÿäà, îøèáêà
                 if (edrk.Sbor_Mode==(t_finish-1))
                 {
                   edrk.Run_UMP = 0;
                   edrk.Run_QTV = 0;
                   edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//                   edrk.errors.e7.bits.UMP_NOT_ANSWER |= 1;
                   edrk.errors.e11.bits.ERROR_UMP_NOT_OFF |= 1;
                   edrk.Status_Sbor    = 7;
                 }

            }


            if (edrk.Sbor_Mode>t_finish && edrk.Status_UMP_Ok==1)
            {

                edrk.Run_UMP = 0;
                edrk.Run_Pred_Zaryad = 0;
                edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
                edrk.errors.e11.bits.ERROR_UMP_ON_AFTER |= 1;
                edrk.Run_QTV = 0;
                edrk.Status_Sbor    = 107;
            }


}


void sbor_shema_rascepitel_level_1(unsigned int t_start, unsigned int t_finish)
{

#if(RASCEPITEL_MANUAL_ALWAYS_ON==1)
    if (edrk.Sbor_Mode==t_start && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 ))
    {
      edrk.Stage_Sbor = 6;
      //  åñëè äðóãîé ÁÑ íå ñîáðàí, çàìûêàåì ðàñöåïèòåëü
      if (optical_read_data.data.cmd.bit.ready_cmd != CODE_READY_CMD_READY2 )
      {
          edrk.Run_Rascepitel = 1;
          edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
      }
      else
          edrk.RunZahvatRascepitel = 1; // ïðîñèì äðóãîé ÁÑ ñáðîñèòü îáîðîòû è ðàçðåøèòü ïîäêëþ÷åíèå ðàñöåïèòåëÿ
    }

    if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish &&  (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
            && edrk.RunZahvatRascepitel  && edrk.Run_Rascepitel==0)
    {
        edrk.Stage_Sbor = 6;
      //  åñëè äðóãîé ÁÑ íå ñîáðàí, çàìûêàåì ðàñöåïèòåëü
      // äðóãîé ÁÑ ñáðîñèë îáîðîòû åñëè îíè áûëè è ñíÿë ØÈÌ åñëè áûë
      if (optical_read_data.data.cmd.bit.rascepitel_cmd == CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // 01 - ìîæíî âêëþ÷àòü ðàñöåïèòåëü, ñâîé âêëþ÷åí
      {
          edrk.Run_Rascepitel = 1;
          edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
      }
    }

#else


    if (edrk.Sbor_Mode==t_start && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 ) && edrk.Status_Rascepitel_Ok==0)
    {
        edrk.Stage_Sbor = 6;
      //  åñëè äðóãîé ÁÑ íå ñîáðàí, çàìûêàåì ðàñöåïèòåëü
      if (optical_read_data.data.cmd.bit.ready_cmd != CODE_READY_CMD_READY2 )
      {
          edrk.Run_Rascepitel = 1;
          edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
      }
      else
          edrk.RunZahvatRascepitel = 1; // ïðîñèì äðóãîé ÁÑ ñáðîñèòü îáîðîòû è ðàçðåøèòü ïîäêëþ÷åíèå ðàñöåïèòåëÿ
    }
//
    if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish &&  (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
            && edrk.RunZahvatRascepitel  && edrk.Status_Rascepitel_Ok==0 && edrk.Run_Rascepitel==0)
    {
        edrk.Stage_Sbor = 6;
      //  åñëè äðóãîé ÁÑ íå ñîáðàí, çàìûêàåì ðàñöåïèòåëü
      // äðóãîé ÁÑ ñáðîñèë îáîðîòû åñëè îíè áûëè è ñíÿë ØÈÌ åñëè áûë
      if (optical_read_data.data.cmd.bit.rascepitel_cmd == CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // 01 - ìîæíî âêëþ÷àòü ðàñöåïèòåëü, ñâîé âêëþ÷åí
      {
          edrk.Run_Rascepitel = 1;
          edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå

      }
    }
#endif

    if (edrk.Sbor_Mode>t_finish)
    {
        if (edrk.Run_Rascepitel==0)
        {
            // íå äîæäàëèñü êîìàíäû íà âêëþ÷åíèå ñâîåãî ðàñöåïèòåëÿ
                      edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
                      edrk.errors.e11.bits.ERROR_RASCEPITEL_WAIT_CMD |= 1;
                      edrk.Run_QTV = 0;

                      edrk.Status_Sbor    = 108;
                      // íå äîæäàëèñü ïîäòâåðæäåíèÿ îò äðóãîãî
                      if (edrk.RunZahvatRascepitel)
                         edrk.errors.e1.bits.NO_CONFIRM_ON_RASCEPITEL |= 1;

                      edrk.RunZahvatRascepitel = 0;
                      edrk.Run_Rascepitel = 0;
        }
    }

}

void sbor_shema_rascepitel_level_2(unsigned int t_start, unsigned int t_finish)
{

    if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish)
        {
            edrk.Stage_Sbor = 7;
#if(RASCEPITEL_MANUAL_ALWAYS_ON==1)
            edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
#else

            if ( (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
                        && edrk.Status_Rascepitel_Ok==1 && edrk.Run_Rascepitel==1)
            {
            // äîæäàëèñü âêëþ÷åíèÿ ðàñöåïèòåëÿ è ïðûãíóëè äàëüøå
                edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
            }

            if (edrk.Sbor_Mode==(t_finish-1) && edrk.Status_Rascepitel_Ok==0 && edrk.Run_Rascepitel==1)
            {
                  // íå äîæäàëèñü ïîäòâåðæäåíèÿ íà âêëþ÷åíèå ñâîåãî ðàñöåïèòåëÿ
                  edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
                  edrk.Run_QTV = 0;
                  edrk.Status_Sbor    = 9;
                  edrk.errors.e6.bits.RASCEPITEL_ERROR_NOT_ANSWER |= 1;
                  edrk.RunZahvatRascepitel = 0;
                  edrk.Run_Rascepitel = 0;
            }
#endif

        }

    if (edrk.Sbor_Mode>t_finish && edrk.Status_Rascepitel_Ok==0)
    {
        // ðàñöåïèòåëü âûêëþ÷èëñÿ, à íå äîëæåí áûë
        edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
        edrk.Run_QTV = 0;
        edrk.Status_Sbor    = 109;
//        edrk.errors.e6.bits.RASCEPITEL_ERROR_NOT_ANSWER |= 1;
        edrk.errors.e11.bits.ERROR_RASCEPITEL_ON_AFTER |= 1;
        edrk.RunZahvatRascepitel = 0;
        edrk.Run_Rascepitel = 0;


    }


    //
        // ïî ñèãíàëó edrk.RunZahvatRascepitel äîëæåí òîò ÁÑ ñáðîñèòü îáîðîòû è ïîäòâåðäèòü âîçìîæíîñòü âêëþ÷åíèå ðàñöåïèòåëÿ


//
//    if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
//            && edrk.Status_Rascepitel_Ok==1 && edrk.Run_Rascepitel==1)
//    {
//        // äîæäàëèñü âêëþ÷åíèÿ ðàñöåïèòåëÿ è ïðûãíóëè äàëüøå
//        edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
//    }
//
////
//    // ïî ñèãíàëó edrk.RunZahvatRascepitel äîëæåí òîò ÁÑ ñáðîñèòü îáîðîòû è ïîäòâåðäèòü âîçìîæíîñòü âêëþ÷åíèå ðàñöåïèòåëÿ
//    if (edrk.Sbor_Mode==(t_finish-1) && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
//            && edrk.RunZahvatRascepitel  && edrk.Status_Rascepitel_Ok==0 && edrk.Run_Rascepitel==0)
//    {
//      //
////          if (optical_read_data.data.cmd.bit.rascepitel_cmd != CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // 01 - ìîæíî âêëþ÷àòü ðàñöåïèòåëü, ñâîé âêëþ÷åí
//      {
//          // íå äîæäàëèñü ïîäòâåðæäåíèÿ íà âêëþ÷åíèå ñâîåãî ðàñöåïèòåëÿ
//          edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//          edrk.Run_QTV = 0;
//          edrk.Status_Sbor    = 8;
//          edrk.errors.e1.bits.NO_CONFIRM_ON_RASCEPITEL |= 1;
//          edrk.RunZahvatRascepitel = 0;
//          edrk.Run_Rascepitel = 0;
////              edrk.Run_Rascepitel = 0;
//      }
//    }

}
void sbor_shema_rascepitel_level_3(unsigned int t_start, unsigned int t_finish)
{

    // òóò æäåì âêëþ÷åíèÿ ðàñöåïèòåëÿ
     if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish)
     {
         edrk.Stage_Sbor = 8;
       if (edrk.Status_Rascepitel_Ok==1)
       {
       // Ðàñöåïèòåëü âêëþ÷èëñÿ!
       // ìîæíî ïåðåïðûãèâàòü â êîíåö
        edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
        edrk.RunZahvatRascepitel = 0;
       }
//        edrk.Run_Rascepitel = 1;
     }

//     if (edrk.Sbor_Mode==(t_finish-1) && (edrk.Zaryad_OK == 0 || edrk.Status_QTV_Ok==0 || edrk.Status_Rascepitel_Ok==0))
//     {
//       edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//       edrk.Run_QTV = 0;
////          edrk.Run_Rascepitel = 0;
//       edrk.RunZahvatRascepitel = 0;
//       edrk.Status_Sbor    = 10;
//       edrk.Run_Rascepitel = 0;
//
//     }
}

void sbor_shema_rascepitel_level_4(unsigned int t_start, unsigned int t_finish)
{
    if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 && edrk.Status_Rascepitel_Ok))
     {
        edrk.Stage_Sbor = 9;
       if (optical_read_data.data.cmd.bit.ready_cmd==CODE_READY_CMD_READY1TO2) // òîò ÁÑ ñîáèðàåòñÿ åùå
       {
           // îæèäàåì äîñáîðà âòîðîãî ÁÑ
           // íî ðàñöåïèòåëü óæå âêëþ÷èëñÿ.
           if (optical_read_data.data.cmd.bit.rascepitel_cmd == CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON)
               edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå

       }
       else
       {
           edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
       }
     }

//    if (edrk.Sbor_Mode>t_finish)
//    {
//        if (edrk.Status_Rascepitel_Ok==0)
//        {
//            edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//            edrk.Run_QTV = 0;
//            edrk.RunZahvatRascepitel = 0;
//            edrk.Status_Sbor    = 9;
//            edrk.Run_Rascepitel = 0;
//
//        }
//
//    }

}

void sbor_shema_wait_ready_another(unsigned int t_start, unsigned int t_finish)
{

    if (edrk.Sbor_Mode>t_start && edrk.Sbor_Mode<t_finish && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 && edrk.Status_Rascepitel_Ok))
    {
        edrk.Stage_Sbor = 10;
      if  (optical_read_data.data.cmd.bit.ready_cmd!=CODE_READY_CMD_READY1TO2)
      {
          edrk.Sbor_Mode = t_finish; // ïåðåïðûãíóëè äàëüøå
      }

      if (edrk.Sbor_Mode==(t_finish-1) && optical_read_data.data.cmd.bit.ready_cmd==CODE_READY_CMD_READY1TO2)
      {
          edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
          edrk.errors.e1.bits.ANOTHER_BS_VERY_LONG_WAIT |= 1;
          edrk.Run_QTV = 0;
//          edrk.Run_Rascepitel = 0;
          edrk.RunZahvatRascepitel = 0;
          edrk.Status_Sbor    = 11;
          edrk.Run_Rascepitel = 0;
      }

    }

}

void sbor_shema_wait_finish(unsigned int t_start, unsigned int t_finish)
{
    if (edrk.Sbor_Mode>t_start && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 && edrk.Status_Rascepitel_Ok))
    {
        edrk.Stage_Sbor = 11;
      edrk.SborFinishOk = 1;
    //         allow_discharge = 1;
    }


    if (edrk.Sbor_Mode>t_finish && (edrk.SborFinishOk) )
    {
        edrk.time_wait_sbor = 0;
    }
    else
      edrk.Sbor_Mode++;

}


///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
#define TIME_WAIT_RELE_UMP_ON 20 //2 sec
#define TIME_WAIT_RELE_UMP_OFF 20 //2 sec

#define TIME_WAIT_ANSWER_UMP_ON     150 //15 sec
#define TIME_WAIT_ANSWER_UMP_OFF    40 //4 sec

///////////////////////////////////////////////
int ump_on_off(unsigned int flag)
{
static unsigned int time_wait_rele_on_ump=0;
static unsigned int time_wait_rele_off_ump=0;
static unsigned int time_wait_answer_on_ump=0;
static unsigned int time_wait_answer_off_ump=0;


int cmd_ump=0;//,cmd_p2=0;
static int UMP_Ok = 0;
static int prev_error = 0;


   cmd_ump = 0;
//   cmd_p2 = 0;

   if ( flag==1 && edrk.summ_errors==0)
   {
       cmd_ump = 1;
   }
   else
   {
       cmd_ump = 0;
   }



   edrk.cmd_to_ump = cmd_ump;

   if (cmd_ump)
   {

//        if ((pause_detect_error(&time_wait_rele_on_qtv,TIME_WAIT_RELE_UMP_ON,1)==0) && edrk.from_shema.bits.UMP_ON_OFF==0)
//        {
//          edrk.to_shema.bits.QTV_ON_OFF = 1;
//        }
//        else

        edrk.to_shema.bits.UMP_ON_OFF = 1;

        if (pause_detect_error(&time_wait_answer_on_ump,TIME_WAIT_ANSWER_UMP_ON,1)==0)
        {

           if (edrk.from_shema.bits.UMP_ON_OFF==1)
              UMP_Ok = 1;
        }
        else
        {

            if (edrk.from_shema.bits.UMP_ON_OFF==0)
            {
              edrk.errors.e7.bits.UMP_NOT_ANSWER |= 1;
              UMP_Ok = 0;
            }

        }

        time_wait_rele_off_ump = 0;
        time_wait_answer_off_ump = 0;
   }
   else
   {
        UMP_Ok = 0;
        time_wait_rele_on_ump = 0;
        time_wait_answer_on_ump = 0;

        edrk.to_shema.bits.UMP_ON_OFF = 0;


        if (pause_detect_error(&time_wait_answer_off_ump,TIME_WAIT_ANSWER_UMP_OFF,1)==0)
        {

        }
        else
        {
            if (edrk.from_shema.bits.UMP_ON_OFF==1)
              edrk.errors.e7.bits.UMP_NOT_ANSWER |= 1;
        }


        if (prev_error!=edrk.summ_errors && edrk.summ_errors)
        {
          if (pause_detect_error(&time_wait_rele_off_ump,TIME_WAIT_RELE_UMP_OFF,1)==1)
             time_wait_rele_off_ump = 0;
        }


   }

   prev_error = edrk.summ_errors;

   return (UMP_Ok);


}
///////////////////////////////////////////////
///////////////////////////////////////////////

///////////////////////////////////////////////
#define TIME_WAIT_RELE_RASCEPITEL_ON 10       //2 sec
#define TIME_WAIT_RELE_RASCEPITEL_OFF 10      //2 sec

#define TIME_WAIT_ANSWER_RASCEPITEL_ON 100    //15 sec
#define TIME_WAIT_ANSWER_RASCEPITEL_ON_BS1 100    //15 sec
#define TIME_WAIT_ANSWER_RASCEPITEL_ON_BS2 150    //15 sec
#define TIME_WAIT_ANSWER_RASCEPITEL_OFF 100   //15 sec

#define TIME_WAIT_LEVEL_RASCEPITEL_ON_OFF 50  //5 sec
#define TIME_WAIT_LEVEL_RASCEPITEL_ON_OFF_BS1 50  //5 sec
#define TIME_WAIT_LEVEL_RASCEPITEL_ON_OFF_BS2 100  //7.5 sec
#define TIME_WAIT_PEREHOD_SOST_ON_OFF 100      //15 sec


///////////////////////////////////////////////
void rascepitel_on_off(unsigned int flag, int *status_perehod, int *status_on_off, int *final_status_on_off)
{
static unsigned int time_wait_rele_on=0;
static unsigned int time_wait_rele_off=0;
static unsigned int time_wait_answer_on=0;
static unsigned int time_wait_answer_off=0;

static unsigned int time_wait_level_on=0;
static unsigned int time_wait_level_off=0;

static unsigned int time_wait_perehod_sost=0;



int cmd_rele=0, r;//,cmd_p2=0;
static int Rele_Ok = 0, filter_sost_rascepitel = 0;
static int prev_error = 0, perehod_sost = 0, flag_wait_break_perehod_sost = 0, prev_cmd_rele = 0;


   cmd_rele = 0;
//   cmd_p2 = 0;

   if ( flag==1 && edrk.errors.e6.bits.RASCEPITEL_ERROR_NOT_ANSWER == 0)
   {
       cmd_rele = 1;
   }
   else
   {
       cmd_rele = 0;
   }



   edrk.cmd_to_rascepitel = cmd_rele;


   if (cmd_rele)
   {
        if (perehod_sost && cmd_rele!=prev_cmd_rele && flag_wait_break_perehod_sost==0)
        {

            flag_wait_break_perehod_sost = 1;
            time_wait_perehod_sost = 0;
        }

        edrk.to_ing.bits.RASCEPITEL_OFF = 0;

        if (flag_wait_break_perehod_sost)
        {
          if (pause_detect_error(&time_wait_perehod_sost,TIME_WAIT_PEREHOD_SOST_ON_OFF,1)==1)
              flag_wait_break_perehod_sost = 0;
        }

        if (flag_wait_break_perehod_sost==0)
        {
            if ((pause_detect_error(&time_wait_rele_on,TIME_WAIT_RELE_RASCEPITEL_ON,1)==0)/* && edrk.from_ing1.bits.RASCEPITEL_ON==0*/)
            {
              perehod_sost = 1;
              edrk.to_ing.bits.RASCEPITEL_ON = 1;
            }
            else
              edrk.to_ing.bits.RASCEPITEL_ON = 0;

            if (edrk.flag_second_PCH==0)
                r = pause_detect_error(&time_wait_answer_on,TIME_WAIT_ANSWER_RASCEPITEL_ON_BS1,1);
            else
            if (edrk.flag_second_PCH==1)
                r = pause_detect_error(&time_wait_answer_on,TIME_WAIT_ANSWER_RASCEPITEL_ON_BS2,1);
            else
                r = 0;

            if (r==0)
            {

            }
            else
            {
                if (edrk.from_ing1.bits.RASCEPITEL_ON==1)
                   Rele_Ok = 1;

#if(RASCEPITEL_MANUAL_ALWAYS_ON==1)
                Rele_Ok = 1;
#else
                if (edrk.from_ing1.bits.RASCEPITEL_ON==0)
                {
                  edrk.errors.e6.bits.RASCEPITEL_ERROR_NOT_ANSWER |= 1;
                  Rele_Ok = 0;
                }
#endif
                perehod_sost = 0;
            }

            time_wait_rele_off = 0;
            time_wait_answer_off = 0;
        }
   }
   else
   {
        Rele_Ok = 0;
        time_wait_rele_on = 0;
        time_wait_answer_on = 0;

        if (perehod_sost && cmd_rele!=prev_cmd_rele && flag_wait_break_perehod_sost==0)
        {
            flag_wait_break_perehod_sost = 1;
            time_wait_perehod_sost = 0;
        }

        edrk.to_ing.bits.RASCEPITEL_ON = 0;

        if (flag_wait_break_perehod_sost)
        {
          if (pause_detect_error(&time_wait_perehod_sost,TIME_WAIT_PEREHOD_SOST_ON_OFF,1)==1)
              flag_wait_break_perehod_sost = 0;
        }

        if (flag_wait_break_perehod_sost==0)
        {

            if (pause_detect_error(&time_wait_rele_off,TIME_WAIT_RELE_RASCEPITEL_OFF,1)==0/* && edrk.from_ing1.bits.RASCEPITEL_ON==1*/)
            {
                edrk.to_ing.bits.RASCEPITEL_OFF = 1;
                perehod_sost = 1;
            }
            else
                edrk.to_ing.bits.RASCEPITEL_OFF = 0;


            if (pause_detect_error(&time_wait_answer_off,TIME_WAIT_ANSWER_RASCEPITEL_OFF,1)==0)
            {

            }
            else
            {

#if(RASCEPITEL_MANUAL_ALWAYS_ON==1)

#else
                if (edrk.from_ing1.bits.RASCEPITEL_ON == 1)
                  edrk.errors.e6.bits.RASCEPITEL_ERROR_NOT_ANSWER |= 1;
#endif
                perehod_sost = 0;

            }

        }


//        if (prev_error!=edrk.summ_errors && edrk.summ_errors)
//        {
//          if (pause_detect_error(&time_wait_rele_off,TIME_WAIT_RELE_RASCEPITEL_OFF,1)==1)
//             time_wait_rele_off = 0;
//        }


   }



    if (edrk.from_ing1.bits.RASCEPITEL_ON==1)
    {
       time_wait_level_off = 0;
       if (edrk.flag_second_PCH==0)
       {
         if (pause_detect_error(&time_wait_level_on,TIME_WAIT_LEVEL_RASCEPITEL_ON_OFF_BS1,1)==1)
           filter_sost_rascepitel = 1;
       }
       else
       {
         if (pause_detect_error(&time_wait_level_on,TIME_WAIT_LEVEL_RASCEPITEL_ON_OFF_BS2,1)==1)
           filter_sost_rascepitel = 1;
       }

    }
    else
    {
       time_wait_level_on = 0;
       if (pause_detect_error(&time_wait_level_off,TIME_WAIT_LEVEL_RASCEPITEL_ON_OFF,1)==1)
           filter_sost_rascepitel = 0;
    }

   prev_error = edrk.summ_errors;
   prev_cmd_rele = cmd_rele;


   *status_perehod = perehod_sost;

   if (filter_sost_rascepitel && perehod_sost==0 )
      *final_status_on_off = 1;
//      *status_on_off  = 1;

   if (filter_sost_rascepitel==0 && perehod_sost==0 )
       *final_status_on_off = 0;

   *status_on_off = filter_sost_rascepitel;

 //  if (perehod_sost==1)
 //     *status_on_off  = 2;

   return;

}
///////////////////////////////////////////////



unsigned int sbor_shema(int mode)
{




// static unsigned int time_wait_sbor = 0;
 static unsigned int time_wait_razbor = 0;
 static unsigned int allow_discharge = 0, may_be_discharge=0;
 int enable_sbor;
 static unsigned int t1,t2, delta_t;
// static int Run_Pred_Zaryad;


    enable_sbor = (edrk.zadanie.ZadanieU_Charge>10) && edrk.Status_Ready.bits.ready1;

    if (mode && edrk.summ_errors==0 && enable_sbor==0)
    {
        edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
        edrk.errors.e11.bits.ERROR_DISABLE_SBOR |= 1;
        // ðàçáîð
        edrk.AutoStartPump = 0;
        edrk.Sbor_Mode = 0;
        edrk.Razbor_Mode = 0;
        edrk.time_wait_sbor = 0;
        time_wait_razbor = 0;

        edrk.Run_Pred_Zaryad = 0;
        edrk.Zaryad_OK = 0;
        edrk.Run_QTV = 0;
        edrk.Run_UMP = 0;
        edrk.SborFinishOk = 0;
        edrk.RunZahvatRascepitel = 0;

//      edrk.Run_Rascepitel = 0;

        edrk.Status_Sbor    = 1;
        return (edrk.Sbor_Mode);
    }

// ñáîð ñõåìû
    if (mode && edrk.summ_errors==0 && enable_sbor)
    {

        if (pause_detect_error(&edrk.time_wait_sbor,TIME_WAIT_SBOR,1))
        {
//        if (edrk.SborFinishOk==0)
          edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
          edrk.errors.e11.bits.ERROR_VERY_LONG_SBOR |= 1;
        }

        // ïóñê íàñîñà
        t1 = 50;
        delta_t = 300;//200;
        t2 = t1 + delta_t;
        sbor_shema_pusk_nasos(t1,t2);//250

        t1 = t2;
        delta_t = 700;
        t2 = t1 + delta_t;
        sbor_shema_pusk_zaryad(t1,t2);//950

        t1 = t2;
        delta_t = 350;//200
        t2 = t1 + delta_t;
        sbor_shema_pusk_ump(t1,t2);//1150

        t1 = t2+30; // æäåì 3 ñåê åùå
        delta_t = 200;
        t2 = t1 + delta_t;
        sbor_shema_pusk_qtv(t1,t2);//1350

        t1 = t2;
        delta_t = 150;
        t2 = t1 + delta_t;
        sbor_shema_stop_ump(t1,t2);//1500

        // åñëè äðóã ÁÑ íå ñîáðàí, òî ðàçðåøàåì ñâîå ïîäêëþ÷åíèå ðàñöåïèòåëÿ è ïåðåõîä íà tfinish
        // èíà÷å äàåì çàïðîñ è æäåì îò tstart äî tfinish ðàçðåøåíèå íà ïîäêëþ÷åíèå ðàñöåïèòåëÿ è ñðàçó ðàçðåøàåì åãî ïîäêëþ÷åíèå
        // â êîíöå äîëæåí þûòü ñèãíàë íà âêëþ÷åíèå ðàñöåïèòåëÿ èíà÷å îøèáêà!
        t1 = t2;
        delta_t = 250;
        t2 = t1 + delta_t;
        sbor_shema_rascepitel_level_1(t1,t2);//1750

        // æäåì âêëþ÷åíèÿ ðàñöåïèòåëÿ äî tfinish
        // èëè äî tfinish æäåì ïîäòâåðæäåíèÿ çàõâàòà
        t1 = t2;
        delta_t = 300;
        t2 = t1 + delta_t;
        sbor_shema_rascepitel_level_2(t1,t2);//2050

        t1 = t2;
        delta_t = 200;
        t2 = t1 + delta_t;
        sbor_shema_rascepitel_level_3(t1,t2);//2250

        // íàø ðàñöåïèòåëü âêëþ÷èëñÿ, íî âòîðîé ÁÑ òîæå ñîáèðàåòñÿ, ïîýòîìó òóò æäåì ïîêà îí âêëþ÷èò ñâîé ðàñöåïèòåëü
        // èíà÷å ñðàçó tfinish
        t1 = t2;
        delta_t = 300;
        t2 = t1 + delta_t;
        sbor_shema_rascepitel_level_4(t1,t2);//2550

        // æäåì äî tfinish ïîäòâåðæäåíèÿ îêîí÷àíèÿ ñáîðà îò äðóãîãî ÁÑ
        // åñëè íå äîæäàëèñü, òî îøèáêà
        t1 = t2;
        delta_t = 300;
        t2 = t1 + delta_t;
        sbor_shema_wait_ready_another(t1,t2);//2850

        t1 = t2;
        delta_t = 50;
        t2 = t1 + delta_t;
        sbor_shema_wait_finish(t1,t2);//2950


//      if (edrk.Sbor_Mode == 0)
//      {
//          if (control_station.active_array_cmd[CONTROL_STATION_CMD_DISABLE_ON_PUMP]==0)
//            edrk.AutoStartPump = 1;
//      }
//
//      // æäåì ïóñêà íàñîñà
//      if (edrk.Sbor_Mode>50 && edrk.Sbor_Mode<250)
//      {
//          if (edrk.StatusPumpFanAll )
//          {
//             edrk.Sbor_Mode = 250;
//          }
//
//          // íàñîñ íå ïóñòèëñÿ
//          if (edrk.Sbor_Mode>200 && edrk.StatusPumpFanAll==0)
//          {
//              edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//              edrk.Status_Sbor    = 2;
//              edrk.AutoStartPump = 0;
//          }
//
//
//      }
//

//      /////////////////////////////////////
//      // çàïóñê çàðÿäà âíóòðåííåãî
//        if (edrk.Sbor_Mode == 250)
//        {
//            if (control_station.active_array_cmd[CONTROL_STATION_CMD_ENABLE_ON_CHARGE]==1)
//              edrk.Run_Pred_Zaryad = 1; // çàïóñê ïðåäçàðßäà!
//        }

////
//      if (edrk.Sbor_Mode>=250 && edrk.StatusPumpFanAll==0 && edrk.SumStartPump)
//      {
//             edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//             edrk.Status_Sbor    = 3;
//
//      }

//        // æäåì çàâåðøåíèÿ ðàáîòû ïðåäçàðÿäà
//        // òóò ïðåäçàðßä äîëæåí óæå çàêîí÷èòü ðàáîòó
//
//      if (edrk.Sbor_Mode>250 && edrk.Sbor_Mode<900 && (edrk.Status_Charge || (control_station.active_array_cmd[CONTROL_STATION_CMD_ENABLE_ON_CHARGE]==0))
//          && edrk.from_ing1.bits.ZARYAD_ON==0 && edrk.StatusPumpFanAll)
//      {
//          edrk.Zaryad_OK = 1;
//          edrk.Run_Pred_Zaryad = 0;
//
//          edrk.Sbor_Mode = 900;
//      }
//
//
//      if (edrk.Sbor_Mode>850 && edrk.Zaryad_OK == 0)
//      {
//        edrk.Run_Pred_Zaryad = 0;
//        edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//        edrk.Status_Sbor    = 4;
//      }
//

//// âêëþ÷àåì UMP
//        if (edrk.Sbor_Mode==950 && edrk.Zaryad_OK == 1)
//        {
//            edrk.Run_UMP = 1;
//        }
//
//        if (edrk.Sbor_Mode>950 && edrk.Sbor_Mode>1250 && (edrk.Zaryad_OK == 1 && edrk.Status_UMP_Ok==1))
//        {
//            edrk.Sbor_Mode=1250;
//        }
//
//
//        if (edrk.Sbor_Mode>1300 && (edrk.Zaryad_OK == 0 || edrk.Status_UMP_Ok==0))
//        {
//            edrk.Run_UMP = 0;
//            edrk.Run_Pred_Zaryad = 0;
//            edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//            edrk.errors.e7.bits.UMP_NOT_ANSWER |= 1;
//            edrk.Run_QTV = 0;
//            edrk.Status_Sbor    = 9;
//        }



////////////////


//
//
//      if (edrk.Sbor_Mode==950 && edrk.Zaryad_OK == 1)
//      {
////          if ()
//          edrk.Run_QTV = 1;
//      }
//
//
//      if (edrk.Sbor_Mode>960 && edrk.Sbor_Mode<1110 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 ) )
//      {
//          edrk.Sbor_Mode = 1110;
//      }
//
//      if (edrk.Sbor_Mode>1100 && (edrk.Zaryad_OK == 0 || edrk.Status_QTV_Ok==0 ))
//      {
//        edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//        edrk.Run_QTV = 0;
//        edrk.Status_Sbor    = 5;
//      }


//      if (edrk.Sbor_Mode==1110 && edrk.Sbor_Mode<1250 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 ) && edrk.Status_Rascepitel_Ok==0)
//      {
//        //  åñëè äðóãîé ÁÑ íå ñîáðàí, çàìûêàåì ðàñöåïèòåëü
//        if (optical_read_data.data.cmd.bit.ready_cmd != CODE_READY_CMD_READY2 )
//        {
//            edrk.Run_Rascepitel = 1;
//            edrk.Sbor_Mode = 1250; // ïåðåïðûãíóëè äàëüøå
//        }
//        else
//            edrk.RunZahvatRascepitel = 1; // ïðîñèì äðóãîé ÁÑ ñáðîñèòü îáîðîòû è ðàçðåøèòü ïîäêëþ÷åíèå ðàñöåïèòåëÿ
//      }
////
//        if (edrk.Sbor_Mode>1120 && edrk.Sbor_Mode<1250 &&  (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
//                && edrk.RunZahvatRascepitel  && edrk.Status_Rascepitel_Ok==0 && edrk.Run_Rascepitel==0)
//        {
//          //  åñëè äðóãîé ÁÑ íå ñîáðàí, çàìûêàåì ðàñöåïèòåëü
//          // äðóãîé ÁÑ ñáðîñèë îáîðîòû åñëè îíè áûëè è ñíÿë ØÈÌ åñëè áûë
//          if (optical_read_data.data.cmd.bit.rascepitel_cmd == CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // 01 - ìîæíî âêëþ÷àòü ðàñöåïèòåëü, ñâîé âêëþ÷åí
//          {
//              edrk.Run_Rascepitel = 1;
//              edrk.Sbor_Mode = 1250; // ïåðåïðûãíóëè äàëüøå
//
//          }
//        }

//        if (edrk.Sbor_Mode>1250 && edrk.Sbor_Mode<1350 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
//                && edrk.Status_Rascepitel_Ok==1 && edrk.Run_Rascepitel==1)
//        {
//            // äîæäàëèñü âêëþ÷åíèÿ ðàñöåïèòåëÿ è ïðûãíóëè äàëüøå
//            edrk.Sbor_Mode = 1350; // ïåðåïðûãíóëè äàëüøå
//        }
//
////
//        // ïî ñèãíàëó edrk.RunZahvatRascepitel äîëæåí òîò ÁÑ ñáðîñèòü îáîðîòû è ïîäòâåðäèòü âîçìîæíîñòü âêëþ÷åíèå ðàñöåïèòåëÿ
//        if (edrk.Sbor_Mode>1320 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 )
//                && edrk.RunZahvatRascepitel  && edrk.Status_Rascepitel_Ok==0 && edrk.Run_Rascepitel==0)
//        {
//          //
////          if (optical_read_data.data.cmd.bit.rascepitel_cmd != CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // 01 - ìîæíî âêëþ÷àòü ðàñöåïèòåëü, ñâîé âêëþ÷åí
//          {
//              // íå äîæäàëèñü ïîäòâåðæäåíèÿ íà âêëþ÷åíèå ñâîåãî ðàñöåïèòåëÿ
//              edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//              edrk.Run_QTV = 0;
//              edrk.Status_Sbor    = 7;
//              edrk.errors.e1.bits.NO_CONFIRM_ON_RASCEPITEL |= 1;
//              edrk.RunZahvatRascepitel = 0;
////              edrk.Run_Rascepitel = 0;
//          }
//        }

//        // òóò æäåì âêëþ÷åíèÿ ðàñöåïèòåëÿ
//        if (edrk.Sbor_Mode>1350 && edrk.Sbor_Mode<1490 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 ) && edrk.Status_Rascepitel_Ok==1)
//        {
//          // Ðàñöåïèòåëü âêëþ÷èëñÿ!
//          // ìîæíî ïåðåïðûãèâàòü â êîíåö
//          edrk.Sbor_Mode = 1490; // ïåðåïðûãíóëè äàëüøå
//          edrk.RunZahvatRascepitel = 0;
//
////        edrk.Run_Rascepitel = 1;
//        }
//
//
//
//
//
//        if (edrk.Sbor_Mode>=1490 && (edrk.Zaryad_OK == 0 || edrk.Status_QTV_Ok==0 || edrk.Status_Rascepitel_Ok==0))
//        {
//          edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//          edrk.Run_QTV = 0;
////          edrk.Run_Rascepitel = 0;
//          edrk.RunZahvatRascepitel = 0;
//          edrk.Status_Sbor    = 6;
//        }
//

//        if (edrk.Sbor_Mode>1550 && edrk.Sbor_Mode<2000 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 && edrk.Status_Rascepitel_Ok))
//        {
//          if (optical_read_data.data.cmd.bit.ready_cmd==CODE_READY_CMD_READY1TO2) // òîò ÁÑ ñîáèðàåòñÿ åùå
//          {
//              // îæèäàåì äîñáîðà âòîðîãî ÁÑ
//              // íî ðàñöåïèòåëü óæå âêëþ÷èëñÿ.
//              if (optical_read_data.data.cmd.bit.rascepitel_cmd == CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON)
//                  edrk.Sbor_Mode = 2150; // ïåðåïðûãíóëè äàëüøå
//
//          }
//          else
//          {
//              edrk.Sbor_Mode = 2150; // ïåðåïðûãíóëè äàëüøå
//
//          }
//
//        }

//
//        if (edrk.Sbor_Mode>2100 && edrk.Sbor_Mode<2150 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 && edrk.Status_Rascepitel_Ok))
//        {
//          if (optical_read_data.data.cmd.bit.ready_cmd==CODE_READY_CMD_READY1TO2) // òîò ÁÑ ñîáèðàåòñÿ åùå, íî ÷òî-òî äîëãî îí!
//          {
//              edrk.errors.e7.bits.ERROR_SBOR_SHEMA |= 1;
//              edrk.errors.e1.bits.ANOTHER_BS_VERY_LONG_WAIT |= 1;
//              edrk.Run_QTV = 0;
//    //          edrk.Run_Rascepitel = 0;
//              edrk.RunZahvatRascepitel = 0;
//              edrk.Status_Sbor    = 8;
//          }
//          else
//          {
//              edrk.Sbor_Mode = 2150; // ïåðåïðûãíóëè äàëüøå
//
//          }
//
//
//        }
//



//
//        if (edrk.Sbor_Mode>2150 && (edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 && edrk.Status_Rascepitel_Ok))
//        {
//          edrk.SborFinishOk = 1;
// //         allow_discharge = 1;
//        }
//
//
//      if (edrk.Sbor_Mode>2200 && (edrk.SborFinishOk) )
//      {
//          time_wait_sbor = 0;
//      }
//      else
//        edrk.Sbor_Mode++;

        edrk.Razbor_Mode = 0;
        edrk.RazborNotFinish = 0;
        edrk.RunUnZahvatRascepitel = 0;

        if (edrk.Zaryad_OK)
            may_be_discharge = 1;

    }
    /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////
    //  ðàçáîð ñõåìû
    /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////
    else
    {
        // ðàçáîð ñõåìû
        if (edrk.Razbor_Mode==0)
            edrk.RazborNotFinish = 1;

        if (edrk.Status_QTV_Ok==0 && edrk.Status_UMP_Ok==0 && may_be_discharge && edrk.Razbor_Mode>100)
        {
            allow_discharge = 1;
            may_be_discharge = 0;
        }

        edrk.AutoStartPump = 0;
        edrk.Sbor_Mode = 0;
        edrk.time_wait_sbor = 0;
        edrk.Zaryad_OK = 0;
        edrk.Run_QTV   = 0;
        edrk.Run_UMP = 0;
        edrk.SborFinishOk = 0;
        edrk.Run_Pred_Zaryad = 0;
        edrk.RunZahvatRascepitel = 0;

        if (edrk.Razbor_Mode==10 && edrk.Status_QTV_Ok==1)
        {
            //
            edrk.errors.e2.bits.ERROR_RAZBOR_SHEMA |= 1;

        }

        if (edrk.Run_Rascepitel && edrk.Razbor_Mode==20 && edrk.Status_QTV_Ok==0 && edrk.Status_Rascepitel_Ok==0)
        {
         // íà ðàñöåïèòåëü áûëà ïîäàíà êîìàíäà íà ñâåäåíèå, íî îí íå ñâåëñÿ ïî÷åìó-òî, íó è ëàäíî
            edrk.Run_Rascepitel = 0;
            edrk.Razbor_Mode=1000; // ïåðåïðûãíóëè â êîíåö ðàçáîðà
        }



        if (edrk.Run_Rascepitel && edrk.Razbor_Mode==30 && edrk.Status_QTV_Ok==0 && edrk.Status_Rascepitel_Ok==1)
        {
              //  åñëè äðóãîé ÁÑ íå ñîáðàí, ðàçìûêàåì ðàñöåïèòåëü áåç âñÿêèõ çàïðîñîâ
              if (optical_read_data.data.cmd.bit.ready_cmd != CODE_READY_CMD_READY2 )
                  edrk.Run_Rascepitel = 0;
              else
                  edrk.RunUnZahvatRascepitel = 1; // ïðîñèì äðóãîé ÁÑ îñòàíîâèòüñÿ
        }



        if (edrk.Razbor_Mode>40 && edrk.Razbor_Mode<390 && (edrk.Status_QTV_Ok==0)
                && edrk.RunUnZahvatRascepitel  && edrk.Status_Rascepitel_Ok==1)
        {
          //  åñëè äðóãîé ÁÑ íå ñîáðàí, ðàçìûêàåì ðàñöåïèòåëü
          // äðóãîé ÁÑ ñáðîñèë îáîðîòû åñëè îíè áûëè è ñíÿë ØÈÌ åñëè áûë
          if (optical_read_data.data.cmd.bit.rascepitel_cmd == CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // 01 - ìîæíî âûêëþ÷àòü ðàñöåïèòåëü, ñâîé âêëþ÷åí
          {
              edrk.Run_Rascepitel = 0;
              edrk.RunUnZahvatRascepitel = 0;
              edrk.Razbor_Mode = 390;
          }
        }



        // åñëè ðàñöåïèòåëü îòêëþ÷åí, òî ñðàçó èäåì â êîíåö
        if (edrk.Razbor_Mode>40 && edrk.Razbor_Mode<600 && (edrk.Status_QTV_Ok==0)
                && edrk.RunUnZahvatRascepitel==0  && edrk.Run_Rascepitel==0)
        {
          if (edrk.Status_Rascepitel_Ok == 0 )
          {
              edrk.Razbor_Mode = 600;
          }
        }



        if (edrk.Razbor_Mode>390 && (edrk.Status_QTV_Ok==0)
                && edrk.RunUnZahvatRascepitel  && edrk.Status_Rascepitel_Ok==1 && edrk.Run_Rascepitel)
        {
            if (optical_read_data.data.cmd.bit.rascepitel_cmd != CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // íå äîæäàëèñü ïîòâåðæäåíèÿ âîçìîæíîñòè îòêëþ÷åíèÿ ðàñöåïèòåëÿ ñâîåãî
            {
                edrk.RunUnZahvatRascepitel = 0;
                edrk.errors.e1.bits.NO_CONFIRM_ON_RASCEPITEL |= 1;
                edrk.errors.e2.bits.ERROR_RAZBOR_SHEMA |= 1;
            }

        }





//
//        if (edrk.Razbor_Mode==400 && (edrk.Status_QTV_Ok==0)
//                && edrk.RunUnZahvatRascepitel  && edrk.Status_Rascepitel_Ok==1)
//        {
//          //  åñëè äðóãîé ÁÑ íå ñîáðàí, ðàçìûêàåì ðàñöåïèòåëü
//          // äðóãîé ÁÑ ñáðîñèë îáîðîòû åñëè îíè áûëè è ñíÿë ØÈÌ åñëè áûë
//          if (optical_read_data.data.cmd.bit.rascepitel_cmd != CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON ) // 01 - ìîæíî âûêëþ÷àòü ðàñöåïèòåëü, ñâîé âêëþ÷åí
//          {
////              edrk.Run_Rascepitel = 0;
//              edrk.RunUnZahvatRascepitel = 0;
//              edrk.errors.e1.bits.NO_CONFIRM_ON_RASCEPITEL |= 1;
//              edrk.errors.e2.bits.ERROR_RAZBOR_SHEMA |= 1;
//
//          }
//        }
//




        if (edrk.Razbor_Mode==600 && edrk.Status_QTV_Ok==0
                          && edrk.Run_Rascepitel == 0
                          && edrk.Status_Rascepitel_Ok==1 )
                {
#if(RASCEPITEL_MANUAL_ALWAYS_ON==1)

#else
            // ðàñöåïèòåëü íå îòêëþ÷èëñÿ!
                  if (edrk.Run_Rascepitel_from_RS==0)  // è íåò ïðÿìîãî óïðàâëåíèÿ îò rs232?
                  {
                      edrk.errors.e6.bits.RASCEPITEL_ERROR_NOT_ANSWER |= 1;
                      edrk.errors.e2.bits.ERROR_RAZBOR_SHEMA |= 1;
                  }
#endif
                }

#if(RASCEPITEL_MANUAL_ALWAYS_ON==1)

        edrk.RazborNotFinish = 0;
        edrk.RunUnZahvatRascepitel = 0;
        edrk.Razbor_Mode=650; // ïåðåïðûãíóëè â êîíåö ðàçáîðà


#else

        // âñå îê, âñå îòêëþ÷èëîñü, ðàçáîð çàâåðøåí
        if (edrk.Run_Rascepitel==0 && edrk.Razbor_Mode>20 && edrk.Status_QTV_Ok==0 && (edrk.Status_Rascepitel_Ok==0 || edrk.Run_Rascepitel_from_RS==1) )
        {
          edrk.RazborNotFinish = 0;
          edrk.RunUnZahvatRascepitel = 0;
          edrk.Razbor_Mode=650; // ïåðåïðûãíóëè â êîíåö ðàçáîðà
        }
#endif

//      edrk.Run_Rascepitel = 0;

        if (edrk.Razbor_Mode>650)
        {
            time_wait_razbor = 0;
        }
        else
          edrk.Razbor_Mode++;

    }


    if (edrk.errors.e7.bits.ERROR_SBOR_SHEMA)
    {
        // ðàçáîð
        edrk.AutoStartPump = 0;
        edrk.Sbor_Mode = 0;
        edrk.Run_Pred_Zaryad = 0;
        edrk.time_wait_sbor = 0;
        edrk.Zaryad_OK = 0;
        edrk.Run_QTV   = 0;
        edrk.Run_UMP = 0;
        edrk.SborFinishOk = 0;
        edrk.RunZahvatRascepitel = 0;
//      edrk.Run_Rascepitel = 0; // îòêëþ÷àåì ðàñöåïèòåëü, õîòÿ âîçìîæíî è íåëüçÿ ýòî äåëàòü????

    }


    //////////////////////////////////////
    //////////////////////////////////////

    edrk.Status_Charge =  zaryad_on_off(edrk.Run_Pred_Zaryad);

    if (control_station.active_array_cmd[CONTROL_STATION_CMD_DISABLE_ON_UMP]==1)
    {
        edrk.Status_UMP_Ok = edrk.Run_UMP;
        edrk.Zaryad_UMP_Ok = 1;
        edrk.to_shema.bits.UMP_ON_OFF = 0;
    }
    else
    {
        edrk.Status_UMP_Ok = ump_on_off(edrk.Run_UMP);
        edrk.Zaryad_UMP_Ok = detect_zaryad_ump();
    }

    if (control_station.active_array_cmd[CONTROL_STATION_CMD_DISABLE_ON_QTV]==1)
    {
        edrk.Status_QTV_Ok = edrk.Run_QTV;
        edrk.to_shema.bits.QTV_ON_OFF = 0;
        edrk.to_shema.bits.QTV_ON = 0;
    }
    else
       edrk.Status_QTV_Ok =  qtv_on_off(edrk.Run_QTV);

    rascepitel_on_off ( edrk.Run_Rascepitel || edrk.Run_Rascepitel_from_RS,
                        &edrk.Status_Perehod_Rascepitel,
                        &edrk.Status_Rascepitel_Ok,
                        &edrk.Final_Status_Rascepitel
                         );


    //////////////////////////////////////
    //////////////////////////////////////






    //////////////////////////////////////
    //////////////////////////////////////


    if (control_station.active_array_cmd[CONTROL_STATION_CMD_MANUAL_DISCHARGE]==1 && edrk.SborFinishOk==0)
        edrk.ManualDischarge = 1;
    else
        edrk.ManualDischarge = 0;

    if (allow_discharge && edrk.SborFinishOk == 0)
    {
        edrk.Discharge = 1;
        allow_discharge = 0;
    }


     if ( edrk.Zaryad_OK == 1 && edrk.Status_QTV_Ok==1 && edrk.Status_Rascepitel_Ok)
         edrk.Status_Ready.bits.ready7 = 1;
     else
         edrk.Status_Ready.bits.ready7 = 0;

//  if (edrk.StatusPumpFanAll)
//      edrk.Status_Ready.bits.ready1 = 1;
//  else
//      edrk.Status_Ready.bits.ready1 = 0;

    if (edrk.Run_Pred_Zaryad)
        edrk.Status_Ready.bits.ready2 = 1;
    else
        edrk.Status_Ready.bits.ready2 = 0;

    if (edrk.Zaryad_OK)
            edrk.Status_Ready.bits.ready3 = 1;
        else
            edrk.Status_Ready.bits.ready3 = 0;

    if (edrk.Status_QTV_Ok)
            edrk.Status_Ready.bits.ready4 = 1;
        else
            edrk.Status_Ready.bits.ready4 = 0;

    if (edrk.SborFinishOk || edrk.Status_Ready.bits.ImitationReady2==1)
            edrk.Status_Ready.bits.ready5 = 1;
        else
            edrk.Status_Ready.bits.ready5 = 0;

    if (edrk.ms.ready3 || edrk.ms.another_bs_maybe_on==0)
        edrk.Status_Ready.bits.ready6 = 1;
    else
        edrk.Status_Ready.bits.ready6 = 0;


    if (edrk.Status_Ready.bits.ready5==1 && edrk.Status_Ready.bits.ready6==1 && edrk.Status_Ready.bits.MasterSlaveActive)
        edrk.Status_Ready.bits.ready_final = 1;
    else
        edrk.Status_Ready.bits.ready_final = 0;

    return (edrk.Sbor_Mode);
}