Advertisement
2andnot

etaz.cpp

Dec 14th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 32.38 KB | None | 0 0
  1. #include "Etaz.h"
  2. #include "Menu.h"
  3. #include "Sgwork.h"
  4.  
  5. extern NET_BFPP_OUTPUT_STRUCT data_for_bfpp[NUM_OF_BFPP];
  6. extern NET_BFPP_INPUT_STRUCT data_from_bfpp[NUM_OF_BFPP];
  7.  
  8. Etaz_item etaz[NUM_OF_BFPP];
  9.  
  10. extern KNC KNC_SPS, KNC_SG, KNC_SB, KNC_KN, KPD_TYPE, KPD_ALT, KPD_KNC;
  11.  
  12.  
  13.  
  14. extern uint8_t NetPackInfo[];
  15. uint8_t fire_floor,etaz_OPKEY_PK,etaz_OPSENS_PK;//этаж, на котором произошол пожар
  16. //extern uint8_t fire_floor;
  17. //extern uint8_t etaz_OPKEY_PK,etaz_OPSENS_PK;
  18.  
  19. uint8_t getCurBFPP(Etaz_item *a, Etaz_item *b){//узнаем текущее бфпп в массиве бфпп
  20.     return((a - b) / sizeof(Etaz_item));
  21. }
  22.  
  23. void showClapan(uint16_t stad, uint16_t status, uint16_t maskOP, uint16_t maskRD, uint8_t firestate, uint8_t os_state, uint8_t os_rd_mask, uint8_t *led){//отображение клапана на мнемосхеме
  24.  
  25.     if(firestate){//если выставлен пожар
  26.         if(KPD_TYPE.GetType()){//узнаем тип клапана
  27.             if(status&maskOP) *led=0x0f;//открыт светим зеленым
  28.                 else if(status&maskRD) *led=0xf0;//готов
  29.         }else{
  30.             if(status&maskOP) *led=0x0f;//открыт
  31.                 else if(stad>2) *led=0xf0;//готов
  32.                     else *led=0x0f;//не готов
  33.         }
  34.     }else{//если пожара нет
  35.         if(KPD_TYPE.GetType()){//узнаем тип клапана
  36.             if((!(os_state&os_rd_mask)))//проверка обратных связей
  37.             {//клапан не готов
  38.                 *led=0x33;
  39.             }
  40.             else{
  41.                 if(status&maskOP) *led=0x00;//открыт
  42.                 else if(status&maskRD) *led=0xff;//готов
  43.                 else *led=0x00;//не готов
  44.             }
  45.         }else{
  46.             if(((!(os_state&os_rd_mask))||(status&maskRD)))
  47.             {//клапан не готов
  48.                 *led=0x33;
  49.             }
  50.             else if((status&maskOP))
  51.             {//клапан упавший
  52.                 *led=0x00;
  53.             }
  54.             else *led=0xff;
  55.         }
  56.     }
  57. }
  58. uint8_t getpme(uint8_t val,uint8_t min,uint8_t max)
  59. {
  60.     if(KEY_5)
  61.     {
  62.         val++;
  63.         if(val>=max) val=min;
  64.     }
  65.     if(KEY_2)
  66.     {
  67.        
  68.         if(val==min) val=max;
  69.         val--;
  70.     }
  71.     return val;
  72. }
  73.  
  74. void show_lcd_imvv_bfpp();
  75. uint8_t cur_etaz_lcd=LOW_ETAZ;
  76. const char etaz_str[]="Этаж";
  77. void show_etaz()
  78. {
  79.     cur_etaz_lcd=getpme(cur_etaz_lcd,LOW_ETAZ,NUM_OF_BFPP);///!!!
  80.     LCD_abc((char*)etaz_str,0);
  81.     LCD_uind(cur_etaz_lcd,4,2);///!!!
  82.         if(!(scafe_fl&SCAFE_FIRE))
  83.         {
  84.             if(KEY_8)
  85.             {
  86.                 scafe_fl|=SCAFE_FIRE;
  87.                 if(cur_etaz_lcd!=1)etaz[cur_etaz_lcd].enh_info|=FIRE_FROM_BFPP; else scafe_fl_imvv_bfpp|=FIRE_FROM_BFPP;
  88.                 fire_floor=cur_etaz_lcd;///!!!
  89.                 etaz_OPKEY_PK=cur_etaz_lcd;
  90.                 etaz_OPSENS_PK=cur_etaz_lcd;
  91.             }
  92.             if(KEY_NO) scafe_fl|=SCAFE_STOP_PDZ;
  93.  
  94.         }
  95.         if(cur_etaz_lcd!=1)
  96.             etaz[cur_etaz_lcd].show_lcd();
  97.         else
  98.             show_lcd_imvv_bfpp();
  99. }
  100.  
  101.  
  102. const char bfpp_test_str[2][7]=
  103. {
  104.     "Пакет:",
  105.     "Связь:"
  106. };
  107.  
  108. uint8_t cur_bfpp_test;
  109. uint8_t test_msk1,test_msk2,test_status;
  110. void show_bfpp_test()
  111. {
  112.     test_msk1=test_msk2=test_status=0;
  113.     cur_bfpp_test=getpm(cur_bfpp_test,NUM_OF_BFPP);
  114.     LCD_abc((char*)bfpp_test_str[0],0);
  115.     for(uint8_t i=0; i<4; i++)
  116.     {
  117.         test_msk1|=(data_from_bfpp[cur_bfpp_test].msk&(1<<(i+4)))>>(i*2+1);
  118.         test_msk1|=(data_from_bfpp[cur_bfpp_test].msk&(1<<(3-i)))<<(i*2+1);
  119.         test_msk2|=((data_from_bfpp[cur_bfpp_test].msk>>8)&(1<<(i+4)))>>(i*2+1);
  120.         test_msk2|=((data_from_bfpp[cur_bfpp_test].msk>>8)&(1<<(3-i)))<<(i*2+1);
  121.     }
  122.     test_status=data_from_bfpp[cur_bfpp_test].status1<<4;
  123.     test_status|=data_from_bfpp[cur_bfpp_test].status1>>4;
  124.     LCD_uind16(test_msk1,8,2|LEAD_ZERO);
  125.     LCD_uind16(test_msk2,10,2|LEAD_ZERO);
  126.     LCD_uind16(test_status,12,2|LEAD_ZERO);
  127.     LCD_uind16(data_from_bfpp[cur_bfpp_test].dip,14,2|LEAD_ZERO);
  128.    
  129.     LCD_abc((char*)bfpp_test_str[1],16);
  130.     LCD_uind(NetPackInfo[cur_bfpp_test+NUM_OF_SCAFE],24,2|LEAD_ZERO);
  131.     LCD_uind(data_from_bfpp[cur_bfpp_test].head.adr - 0xB0,30,2|LEAD_ZERO);
  132. }
  133. /////////////////////////////////////////////////////
  134. //////////////МСК БФПП рассписываем по битно/////////
  135. /////////////////////////////////////////////////////
  136. const char bfpp_test_MSK[1][4]={"МСК"};
  137. uint8_t MSK_BFPP1[8],MSK_BFPP2[8];
  138. void show_bfpp_test_MSK()
  139. {
  140.     LCD_abc((char*)bfpp_test_MSK[0],0);
  141.     for(uint8_t i=8; i>0; i--)
  142.     {
  143.         if ((data_from_bfpp[cur_bfpp_test].msk)&(1<<(i-1))) MSK_BFPP1[i-1]=1;
  144.         else MSK_BFPP1[i-1]=0;
  145.         if ((data_from_bfpp[cur_bfpp_test].msk>>8)&(1<<(i-1))) MSK_BFPP2[i-1]=1;
  146.         else MSK_BFPP2[i-1]=0;
  147.         LCD_uind16(MSK_BFPP2[i-1],i+22,2);
  148.         LCD_uind16(MSK_BFPP1[i-1],i+14,2);
  149.     }
  150. }
  151.  
  152.  
  153. extern uint8_t LED_Out_Str[];
  154. extern uint8_t MSK[];
  155.  
  156. uint8_t E_null,E_nullR=0;//переменная для сброса всякого мусора
  157. void Etaz_init()
  158. {
  159.     uint8_t i;
  160.     for(i=LOW_ETAZ;i<NUM_OF_BFPP;i++) //обнуление счетчиков и статусаETAZ
  161.     {
  162.         etaz[i].init();
  163.         data_for_bfpp[i].foo1=0;    //отключение ключа, дабы клапана, по своему желание, не падали
  164.     }
  165.    
  166. //  SET_ETAZ(etaz[0], &mY01,    &mY02,  &mY03,  &mBFPP0,    &mSG0,  &mSB0,  &mSQ0,  &mKN0,  &mSPS0, &KFIRE0)
  167.     SET_ETAZ_MOD0(etaz[0], &mKPV2_0_1, &mKPV2_0_2, &mKPP2_0, &mKPP2_0_1, &mKPP2_0_2, &mKPP2_0_3, &mKPP2_0_4, &mBFPP0, &mSG0, &mSB0, &mSQ0, &mKN0, &mSPS0, KFIRE0)
  168.     //SET_ETAZ(etaz[1], &mY011, &mY012, &mY013, &mBFPP1,    &mSG1,  &mSB1,  &mSQ1,  &mKN1,  &mSPS1, KFIRE1)
  169.     //SET_ETAZ_MOD2(etaz[2], &mKPV1_3, &mKPP1_2_1, &mKPP1_2_2, &mKPP1_2_3, &mKPP1_2_4, &mKPP1_2_5, &mKPP1_2_6, &mBFPP2, &mSG2, &mSB2, &mSQ2, &mKN2, &mSPS2, KFIRE2)
  170.     SET_ETAZ(etaz[2], &mKPP2_2_1,   &mKPP2_2_2, &mKPP2_2_3, &mBFPP2,    &mSG2,  &mSB2,  &mSQ2,  &mKN2,  &mSPS2, KFIRE2)
  171.     SET_ETAZ(etaz[3], &mY031,   &mY032, &mY033, &mBFPP3,    &mSG3,  &mSB3,  &mSQ3,  &mKN3,  &mSPS3, KFIRE3)
  172.     SET_ETAZ(etaz[4], &mY041,   &mY042, &mY043, &mBFPP4,    &mSG4,  &mSB4,  &mSQ4,  &mKN4,  &mSPS4, KFIRE4)
  173.     SET_ETAZ(etaz[5], &mY051,   &mY052, &mY053, &mBFPP5,    &mSG5,  &mSB5,  &mSQ5,  &mKN5,  &mSPS5, KFIRE5)
  174.     SET_ETAZ(etaz[6], &mY061,   &mY062, &mY063, &mBFPP6,    &mSG6,  &mSB6,  &mSQ6,  &mKN6,  &mSPS6, KFIRE6)
  175.     SET_ETAZ(etaz[7], &mY071,   &mY072, &mY073, &mBFPP7,    &mSG7,  &mSB7,  &mSQ7,  &mKN7,  &mSPS7, KFIRE7)
  176.     SET_ETAZ(etaz[8], &mY081,   &mY082, &mY083, &mBFPP8,    &mSG8,  &mSB8,  &mSQ8,  &mKN8,  &mSPS8, KFIRE8)
  177.     SET_ETAZ(etaz[9], &mY091,   &mY092, &mY093, &mBFPP9,    &mSG9,  &mSB9,  &mSQ9,  &mKN9,  &mSPS9, KFIRE9)
  178.     SET_ETAZ(etaz[10],&mY101,   &mY102, &mY103, &mBFPP10,   &mSG10, &mSB10, &mSQ10, &mKN10, &mSPS10,KFIRE10)
  179.     SET_ETAZ(etaz[11],&mY111,   &mY112, &mY113, &mBFPP11,   &mSG11, &mSB11, &mSQ11, &mKN11, &mSPS11,KFIRE11)
  180.     SET_ETAZ(etaz[12],&mY121,   &mY122, &mY123, &mBFPP12,   &mSG12, &mSB12, &mSQ12, &mKN12, &mSPS12,KFIRE12)
  181.     SET_ETAZ(etaz[13],&mY131,   &mY132, &mY133, &mBFPP13,   &mSG13, &mSB13, &mSQ13, &mKN13, &mSPS13,KFIRE13)
  182.     SET_ETAZ(etaz[14],&mY141,   &mY142, &mY143, &mBFPP14,   &mSG14, &mSB14, &mSQ14, &mKN14, &mSPS14,KFIRE14)
  183.     SET_ETAZ(etaz[15],&mY151,   &mY152, &mY153, &mBFPP15,   &mSG15, &mSB15, &mSQ15, &mKN15, &mSPS15,KFIRE15)
  184.     SET_ETAZ(etaz[16],&mY161,   &mY162, &mY163, &mBFPP16,   &mSG16, &mSB16, &mSQ16, &mKN16, &mSPS16,KFIRE16)
  185.     SET_ETAZ(etaz[17],&mY171,   &mY172, &mY173, &mBFPP17,   &mSG17, &mSB17, &mSQ17, &mKN17, &mSPS17,KFIRE17)
  186.     SET_ETAZ(etaz[18],&mY181,   &mY182, &mY183, &mBFPP18,   &mSG18, &mSB18, &mSQ18, &mKN18, &mSPS18,KFIRE18)
  187.     SET_ETAZ(etaz[19],&mY191,   &mY192, &mY193, &mBFPP19,   &mSG19, &mSB19, &mSQ19, &mKN19, &mSPS19,KFIRE19)
  188.     SET_ETAZ(etaz[20],&mY201,   &mY202, &mY203, &mBFPP20,   &mSG20, &mSB20, &mSQ20, &mKN20, &mSPS20,KFIRE20)
  189.     SET_ETAZ(etaz[21],&mY211,   &mY212, &mY213, &mBFPP21,   &mSG21, &mSB21, &mSQ21, &mKN21, &mSPS21,KFIRE21)
  190.     SET_ETAZ(etaz[22],&mY221,   &mY222, &mY223, &mBFPP22,   &mSG22, &mSB22, &mSQ22, &mKN22, &mSPS22,KFIRE22)
  191.     SET_ETAZ(etaz[23],&mY231,   &mY232, &mY233, &mBFPP23,   &mSG23, &mSB23, &mSQ23, &mKN23, &mSPS23,KFIRE23)
  192.     SET_ETAZ(etaz[24],&mY241,   &mY242, &mY243, &mBFPP24,   &mSG24, &mSB24, &mSQ24, &mKN24, &mSPS24,KFIRE24)
  193.     //SET_ETAZ(etaz[25],&mY251, &mY252, &mY253, &mBFPP25,   &mSG25, &mSB25, &mSQ25, &mKN25, &mSPS25,KFIRE25)
  194.     /*//*/
  195.     fire_floor=0xff;
  196.     etaz_OPKEY_PK=0xff;
  197.     etaz_OPSENS_PK=0xff;
  198. //  etaz[1].enh_info|=etaz_1;
  199. //  etaz[3].enh_info|=etaz_3;
  200. }
  201.  
  202.  
  203. //extern uint8_t LOW_ETAZ;
  204. uint8_t err;//байт неисправности////////////////////////////////////////////////////////////
  205. void Etaz_drv()
  206. {
  207.     err=0;
  208.     PN_fl &= ~PN_BFPP; //сброс флага перед очередной проверкой
  209.     scafe_fl&=~OP_PK_SQ;//снимаем флаг открытия дверей пожкрана
  210.     uint8_t i;
  211.     for(i=LOW_ETAZ;i<NUM_OF_BFPP;i++)
  212.     {
  213.  
  214.         if(i == 1){//для бфпп реализованном на имвв
  215.             if(scafe_fl&SCAFE_STOP_PDZ)
  216.             {
  217.                 scafe_fl_imvv_bfpp&=~(FIRE_FROM_BFPP|FIRE_FROM_SPS);
  218.             }
  219.             else if(fire_floor==0xFF)
  220.             {
  221.                 if( KNC_SPS.Check(msk(KFIRE1))) //пришел пожар от СПС
  222.                 {
  223.                     fire_floor=1;
  224.                     scafe_fl_imvv_bfpp|=(FIRE_FROM_BFPP|FIRE_FROM_SPS);
  225.                     scafe_fl|=SCAFE_FIRE_SPS|SCAFE_FIRE;
  226.                 }
  227.             }
  228.  
  229.             continue;
  230.         }
  231.         if(scafe_fl&SCAFE_STOP_PDZ)
  232.         {
  233.             etaz[i].stad=0;
  234.             etaz[i].sub_st=0;
  235.             etaz[i].clear_t_stad();
  236.             etaz[i].clear_t_sub_st();
  237.             etaz[i].enh_info&=~(FIRE_FROM_BFPP|FIRE_FROM_PK|FIRE_FROM_SPS|KEY_PK|SENS_PK);
  238.             etaz[i].out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4|HL1);
  239.             data_for_bfpp[i].foo1=0;    //отключение ключа, дабы клапана, по своему желание, не падали
  240.         }
  241.         else if(fire_floor==0xFF)
  242.         {
  243.             etaz[i].out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4|HL1|HL1|HL2);
  244.             if( KNC_SPS.Check( msk(etaz[i].KFireSPS)) ) //пришел пожар от СПС
  245.             {
  246.                 fire_floor=i;
  247.                 etaz[i].enh_info|=(FIRE_FROM_BFPP|FIRE_FROM_SPS);
  248.                 scafe_fl|=SCAFE_FIRE_SPS|SCAFE_FIRE;
  249.             }
  250.            
  251.         }
  252.  
  253.             //определение наличия связи с БФПП и проверка нажатия кнопки ПОЖАР на БФПП
  254.                         ///////////////////////////////////////////////////////////////////////////////////////////
  255.         if((NetPackInfo[i+NUM_OF_SCAFE]<10))//если есть связь с БФПП
  256.         {
  257.             etaz[i].enh_info|=LINK_OK;
  258.             if((0xb0+(data_from_bfpp[i].dip&0x1f))==data_from_bfpp[i].head.adr)//совпадение адреса ответа
  259.             {
  260.                 etaz[i].enh_info&=~INCORRECT_ADR;
  261.                 if(!(data_from_bfpp[i].status1&CHECK_220)){
  262.                     etaz[i].enh_info&=~ERROR_220;
  263.                     if(data_from_bfpp[i].dip&AUTO_PDZ)//БФПП в режиме АВТО
  264.                     {
  265.                         etaz[i].enh_info&=~DIST_BFPP;
  266.                         if(data_from_bfpp[i].msk&OP_PK) {etaz[i].enh_info|=OPEN_PK; }//ПК ОТКРЫТ
  267.                         else {etaz[i].enh_info&=~OPEN_PK; }//
  268.         ///////////////////////////////////////////////////////////////////////////////////////////
  269.                         if(KNC_SG.Check(data_from_bfpp[i].msk & S_PK))//
  270.                         {
  271.                             etaz[i].enh_info|=SENS_PK;
  272.                             PN_fl |= PN_BFPP;
  273.                             etaz_OPSENS_PK=i;
  274.     //                      if(i>11) scafe_fl|=SHIGH_ETAG;
  275.     //                      else scafe_fl&=~SHIGH_ETAG;
  276.                         }
  277.     //                  else {etaz[i].enh_info&=~SENS_PK;} 
  278.                         if (KNC_SB.Check(data_from_bfpp[i].msk & K_PK)) //
  279.                         {
  280.                             etaz[i].enh_info|=KEY_PK;
  281.                             PN_fl |= PN_BFPP;
  282.                             etaz_OPKEY_PK=i;
  283.                              //
  284.     //                      if(i>11) scafe_fl|=SHIGH_ETAG;
  285.     //                      else scafe_fl&=~SHIGH_ETAG;
  286.                         }
  287.     //                  else {etaz[i].enh_info&=~KEY_PK;}
  288.  
  289.         //проверка луча                
  290.     #if KN2     //кусок кода для СДВОЕННОЙ кнопки
  291.                         if(data_from_bfpp[i].msk&(FIRE1|FIRE2))//нажата одна из кнопок пожара (или обе)
  292.                         {
  293.                             if((data_from_bfpp[i].msk&(FIRE1|FIRE2))==(FIRE1|FIRE2))//нажаты обе кнопки ПОЖАР
  294.                             {
  295.                                 etaz[i].enh_info&=~LUCH;
  296.                                 if(fire_floor==0xff)
  297.                                 {
  298.                                     if(!sec_tik) etaz[i].inc_t_sub_st();
  299.                                     if(etaz[i].read_t_sub_st()>1)
  300.                                     {
  301.                                         scafe_fl|=(SCAFE_FIRE_BFPP|SCAFE_FIRE);
  302.                                         etaz[i].enh_info|=FIRE_FROM_BFPP|FIRE_FROM_PK;
  303.                                         fire_floor=i;
  304.                                     }
  305.                                 }
  306.                             }
  307.                             else
  308.                             {
  309.                                 etaz[i].enh_info|=LUCH;
  310.                                 etaz[i].clear_t_sub_st();
  311.                             }
  312.                         }
  313.                         else
  314.                         {
  315.                             etaz[i].enh_info&=~LUCH;
  316.                             etaz[i].clear_t_sub_st();
  317.                         }
  318.     #else //если кнопка одинарная
  319.                         if( KNC_KN.Check(data_from_bfpp[i].msk & FIRE2) )//нажата кнопка пожара
  320.                         {
  321.                             if(fire_floor==0xff)
  322.                             {
  323.                                 if(!sec_tik) etaz[i].inc_t_sub_st();
  324.                                 if(etaz[i].read_t_sub_st()>1)
  325.                                 {
  326.                                     scafe_fl|=(SCAFE_FIRE_BFPP|SCAFE_FIRE);
  327.                                     etaz[i].enh_info|=FIRE_FROM_BFPP|FIRE_FROM_PK;
  328.                                     fire_floor=i;
  329.                                 }
  330.                             }
  331.                         }
  332.     #endif
  333.  
  334.                     }
  335.                     else etaz[i].enh_info|=DIST_BFPP;
  336.                 }
  337.                 else etaz[i].enh_info|=ERROR_220;
  338.             }
  339.             else etaz[i].enh_info|=INCORRECT_ADR;
  340.         }
  341.         else {etaz[i].enh_info&=~LINK_OK; err++;}////////////////////////////////////////////
  342.  
  343.         //готовность силовых выходов OS
  344.         //-------1-4
  345.         if(i>2){// 3-24 этаж
  346.             if(data_from_bfpp[i].status1&OS_OUT4_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA1_RD;
  347.             else etaz[i].OS_OUT_YA|=OS_OUT_YA1_RD;
  348.             if(data_from_bfpp[i].status1&OS_OUT4_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA2_RD;
  349.             else etaz[i].OS_OUT_YA|=OS_OUT_YA2_RD;
  350.             if(data_from_bfpp[i].status1&OS_OUT3_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA3_RD;
  351.             else etaz[i].OS_OUT_YA|=OS_OUT_YA3_RD;
  352.             if(data_from_bfpp[i].status1&OS_OUT3_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA4_RD;
  353.             else etaz[i].OS_OUT_YA|=OS_OUT_YA4_RD;
  354.  
  355.             //готовность клапанов SB
  356.             if(((data_from_bfpp[i].msk&YA1_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA1_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA1_RD;
  357.             else etaz[i].status|=STATUS_YA1_RD;
  358.             if(((data_from_bfpp[i].msk&YA2_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA2_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA2_RD;
  359.             else etaz[i].status|=STATUS_YA2_RD;
  360.             if(((data_from_bfpp[i].msk&YA3_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA3_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA3_RD;
  361.             else etaz[i].status|=STATUS_YA3_RD;
  362.             if(((data_from_bfpp[i].msk&YA4_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA4_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA4_RD;
  363.             else etaz[i].status|=STATUS_YA4_RD;
  364.  
  365.             //готовность клапанов
  366.             if(((data_from_bfpp[i].msk&YA1_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA1_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA1_OP;
  367.             else etaz[i].status|=STATUS_YA1_OP;
  368.             if(((data_from_bfpp[i].msk&YA2_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA2_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA2_OP;
  369.             else etaz[i].status|=STATUS_YA2_OP;
  370.             if(((data_from_bfpp[i].msk&YA3_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA3_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA3_OP;
  371.             else etaz[i].status|=STATUS_YA3_OP;
  372.             if(((data_from_bfpp[i].msk&YA4_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA4_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA4_OP;
  373.             else etaz[i].status|=STATUS_YA4_OP;
  374.  
  375.         }else if(i == 2){
  376.             if(data_from_bfpp[i].status1&OS_OUT4_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA1_RD;
  377.             else etaz[i].OS_OUT_YA|=OS_OUT_YA1_RD;
  378.             if(data_from_bfpp[i].status1&OS_OUT4_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA2_RD;
  379.             else etaz[i].OS_OUT_YA|=OS_OUT_YA2_RD;
  380.             if(data_from_bfpp[i].status1&OS_OUT3_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA3_RD;
  381.             else etaz[i].OS_OUT_YA|=OS_OUT_YA3_RD;
  382.             if(data_from_bfpp[i].status1&OS_OUT3_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA4_RD;
  383.             else etaz[i].OS_OUT_YA|=OS_OUT_YA4_RD;
  384.  
  385.             //готовность клапанов SB
  386.             if(((data_from_bfpp[i].msk&YA1_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA1_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA1_RD;
  387.             else etaz[i].status|=STATUS_YA1_RD;
  388.             if(((data_from_bfpp[i].msk&YA2_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA2_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA2_RD;
  389.             else etaz[i].status|=STATUS_YA2_RD;
  390.             if(((data_from_bfpp[i].msk&YA3_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA3_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA3_RD;
  391.             else etaz[i].status|=STATUS_YA3_RD;
  392.             if(((data_from_bfpp[i].msk&YA4_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA4_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA4_RD;
  393.             else etaz[i].status|=STATUS_YA4_RD;
  394.  
  395.             //готовность клапанов
  396.             if(((data_from_bfpp[i].msk&YA1_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA1_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA1_OP;
  397.             else etaz[i].status|=STATUS_YA1_OP;
  398.             if(((data_from_bfpp[i].msk&YA2_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA2_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA2_OP;
  399.             else etaz[i].status|=STATUS_YA2_OP;
  400.             if(((data_from_bfpp[i].msk&YA3_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA3_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA3_OP;
  401.             else etaz[i].status|=STATUS_YA3_OP;
  402.             if(((data_from_bfpp[i].msk&YA4_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA4_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA4_OP;
  403.             else etaz[i].status|=STATUS_YA4_OP;
  404.  
  405.         }else if(i == 0){//0 этаж подвал
  406.  
  407.             if(data_from_bfpp[i].status1&OS_OUT4_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA1_RD;
  408.             else etaz[i].OS_OUT_YA|=OS_OUT_YA1_RD;
  409.             if(data_from_bfpp[i].status1&OS_OUT4_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA2_RD;
  410.             else etaz[i].OS_OUT_YA|=OS_OUT_YA2_RD;
  411.             if(data_from_bfpp[i].status1&OS_OUT3_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA3_RD;
  412.             else etaz[i].OS_OUT_YA|=OS_OUT_YA3_RD;
  413.             if(data_from_bfpp[i].status1&OS_OUT3_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA4_RD;
  414.             else etaz[i].OS_OUT_YA|=OS_OUT_YA4_RD;
  415.  
  416.             //готовность клапанов SB
  417.             if(((data_from_bfpp[i].msk&YA1_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA1_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA1_RD;
  418.             else etaz[i].status|=STATUS_YA1_RD;
  419.             if(((data_from_bfpp[i].msk&YA2_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA2_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA2_RD;
  420.             else etaz[i].status|=STATUS_YA2_RD;
  421.             if(((data_from_bfpp[i].msk&YA3_READY) && KPD_ALT.GetType()) || (!(data_from_bfpp[i].msk&YA3_READY) && !KPD_ALT.GetType())) etaz[i].status&=~STATUS_YA3_RD;
  422.             else etaz[i].status|=STATUS_YA3_RD;
  423.  
  424.             //готовность клапанов
  425.             if(((data_from_bfpp[i].msk&YA1_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA1_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA1_OP;
  426.             else etaz[i].status|=STATUS_YA1_OP;
  427.             if(((data_from_bfpp[i].msk&YA2_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA2_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA2_OP;
  428.             else etaz[i].status|=STATUS_YA2_OP;
  429.             if(((data_from_bfpp[i].msk&YA3_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA3_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA3_OP;
  430.             else etaz[i].status|=STATUS_YA3_OP;
  431.  
  432.             if(((data_from_bfpp[i].msk&YA101_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA101_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA4_OP;
  433.             else etaz[i].status|=STATUS_YA4_OP;
  434.             if(((data_from_bfpp[i].msk&YA102_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA102_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA5_OP;
  435.             else etaz[i].status|=STATUS_YA5_OP;
  436.             if(((data_from_bfpp[i].msk&YA103_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA103_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA6_OP;
  437.             else etaz[i].status|=STATUS_YA6_OP;
  438.             if(((data_from_bfpp[i].msk&YA104_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA104_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA7_OP;
  439.             else etaz[i].status|=STATUS_YA7_OP;
  440.             if(((data_from_bfpp[i].msk&YA105_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA105_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA8_OP;
  441.             else etaz[i].status|=STATUS_YA8_OP;
  442.             if(((data_from_bfpp[i].msk&YA106_OPEN) && KPD_KNC.GetType()) || (!(data_from_bfpp[i].msk&YA106_OPEN) && !KPD_KNC.GetType())) etaz[i].status&=~STATUS_YA9_OP;
  443.             else etaz[i].status|=STATUS_YA9_OP;
  444.         }
  445.        
  446.         etaz[i].show_mnem();
  447.         if(!NetPackInfo[i+NUM_OF_SCAFE]) {etaz[i].out^=HL0;NetPackInfo[i+NUM_OF_SCAFE]++;}
  448.         data_for_bfpp[i].out_led=etaz[i].out;
  449.     }
  450.  
  451.  
  452.  
  453.     if((scafe_fl&SCAFE_FIRE)&&(fire_floor<NUM_OF_BFPP))
  454.     {
  455.         etaz[fire_floor].drv();
  456.         if(fire_floor != 0){
  457.             //etaz[0].out&=~OUT_BFPP3;//отключение вентиляции на нулевом бфпп
  458.             //data_for_bfpp[0].out_led&=~OUT_BFPP3;//отключение вентиляции на нулевом бфпп
  459.             //data_for_bfpp[0].foo1=0xFF;// Включение ключа, блокирующего случайное открытие клапанов
  460.         }
  461.         data_for_bfpp[fire_floor].foo1=0xFF;// Включение ключа, блокирующего случайное открытие клапанов
  462.     }
  463.     //////////////////////////////////////////////////////////////////
  464.     if(err) scafe_fl|=SCAFE_NET1; // нет в сети БФПП
  465.     else scafe_fl&=~SCAFE_NET1;
  466. /////////////////////////////////////////////////////////////////////
  467.    
  468. }
  469.  
  470.  
  471.  
  472. void Etaz_item::show_mnem(){
  473.     uint8_t curBfpp = (this - etaz);//узнаем положение экземпляра бфпп в массиве бфпп
  474. if(enh_info&FIRE_FROM_SPS)*mSPS=0x55;
  475.                 else *mSPS=0xff;////////////////////
  476.     if((enh_info&LINK_OK)&&(!(enh_info&(INCORRECT_ADR|ERROR_220))))
  477.     {//есть связь и правильный ответный адрес
  478.         if(!(enh_info&DIST_BFPP))//БФПП не в дисте
  479.         {
  480.             if (enh_info&SENS_PK) *mSG=0xF0; //сработал датчик пожкрана
  481.             else *mSG=0xFF;
  482.             if(enh_info&FIRE_FROM_PK)*mKN=0x55; //запуск ПДЗ от кнопки
  483.             else if(enh_info&LUCH) *mKN=0x33;//ошибка луча
  484.             else *mKN=0xFF;
  485.             if(enh_info&KEY_PK) *mSB=0xF0; //нажата кнопка пуска пожнасосов
  486.             else *mSB=0xFF;
  487.             if(enh_info&OPEN_PK){
  488.                 *mSQ=0xF3; //шкаф открыли
  489.                 scafe_fl|=OP_PK_SQ;//выставляем флаг открытия дверей пожкрана
  490.             }
  491.             else *mSQ=0xFF;
  492.            
  493.             if(enh_info&FIRE_FROM_BFPP)
  494.             {//пожар светим красным
  495.                 *mBFPP=0x55;
  496.                
  497.             }
  498.             else
  499.             {//все нормально - светим зеленым
  500.                 *mBFPP=0x0f;
  501.                 //*mSPS=0xff;//////////////////////////////////////////
  502.             }
  503.  
  504.              //отработка клапанов
  505.             //if(enh_info&FIRE_FROM_BFPP)
  506.             //{
  507.                 /*if(status&STATUS_YA1_OP) *mYA[0]=0x0f;
  508.                     else if(status&STATUS_YA1_RD) *mYA[0]=0xF0;
  509.  
  510.                         if(status&STATUS_YA1_OP) *mYA[0]=0x0f;
  511.                             else if(read_t_stad()>2) *mYA[0]=0xF0;
  512.                                 else *mYA[0]=0x0f;*/
  513.                 /*void showClapan(
  514.                  *
  515.                  *uint16_t stad, значение read_t_stad()
  516.                  *uint16_t status, флаги status
  517.                  *uint16_t maskOP, бит открытия
  518.                  *uint16_t maskRD, бит готовности
  519.                  *uint8_t firestate, проверка на пожар
  520.                  *uint8_t os_state, флаги обратной связи
  521.                  *uint8_t os_rd_mask бит обратной связи
  522.                  *uint8_t *led) указатель на светодиод
  523.                  */
  524.  
  525.                 if(curBfpp > 2){//стандартные бфпп 3-24
  526.                     showClapan(read_t_stad(), status, STATUS_YA1_OP, STATUS_YA1_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA1_RD, mYA[0]);
  527.                     showClapan(read_t_stad(), status, STATUS_YA2_OP, STATUS_YA2_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[1]);
  528.                     showClapan(read_t_stad(), status, STATUS_YA3_OP, STATUS_YA3_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA3_RD, mYA[2]);
  529.                 }else if(curBfpp == 2){//2
  530.                     showClapan(read_t_stad(), status, STATUS_YA1_OP, STATUS_YA1_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA1_RD, mYA[0]);
  531.                     showClapan(read_t_stad(), status, STATUS_YA2_OP, STATUS_YA2_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA1_RD, mYA[1]);
  532.                     showClapan(read_t_stad(), status, STATUS_YA3_OP, STATUS_YA3_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA1_RD, mYA[2]);
  533.                     //showClapan(read_t_stad(), status, STATUS_YA4_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[3]);
  534.                     //showClapan(read_t_stad(), status, STATUS_YA5_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[4]);
  535.                     //showClapan(read_t_stad(), status, STATUS_YA6_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[5]);
  536.                     //showClapan(read_t_stad(), status, STATUS_YA7_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[6]);
  537.                 }else if(curBfpp == 0){//0 подвал
  538.                     showClapan(read_t_stad(), status, STATUS_YA1_OP, STATUS_YA1_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA1_RD, mYA[0]);//кдв2.0.1
  539.                     showClapan(read_t_stad(), status, STATUS_YA2_OP, STATUS_YA2_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[1]);//кдв2.0.2
  540.                     showClapan(read_t_stad(), status, STATUS_YA3_OP, STATUS_YA3_RD, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA3_RD, mYA[2]);//кпп2.0
  541.                     showClapan(read_t_stad(), status, STATUS_YA4_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA4_RD, mYA[3]);//кпв201-204
  542.                     showClapan(read_t_stad(), status, STATUS_YA5_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA4_RD, mYA[4]);//кпв2.0.1
  543.                     showClapan(read_t_stad(), status, STATUS_YA6_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA4_RD, mYA[5]);//кпв2.0.2
  544.                     showClapan(read_t_stad(), status, STATUS_YA7_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA4_RD, mYA[6]);//кпв2.0.3
  545.                     showClapan(read_t_stad(), status, STATUS_YA8_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA4_RD, mYA[7]);//кпв2.0.4
  546.                     showClapan(read_t_stad(), status, STATUS_YA9_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA5_RD, mYA[8]);//вентиляция
  547.                 }
  548.  
  549.             /*}
  550.             //else
  551.             //{//нет пожара
  552.                 if(KPD_TYPE.GetType()){
  553.                     if((!(OS_OUT_YA&OS_OUT_YA1_RD)))
  554.                     {//клапан не готов
  555.                         *mYA[0]=0x33;
  556.                     }
  557.                     else{
  558.                         if(status&STATUS_YA1_OP) *mYA[0]=0x00;
  559.                         else if(status&STATUS_YA1_RD) *mYA[0]=0xff;
  560.                         else *mYA[0]=0x00;
  561.                     }
  562.                    
  563.                     if((!(OS_OUT_YA&OS_OUT_YA2_RD)))
  564.                     {//клапан не готов
  565.                         *mYA[1]=0x33;
  566.                     }
  567.                     else{
  568.                         if(status&STATUS_YA2_OP) *mYA[1]=0x00;
  569.                         else if(status&STATUS_YA2_RD) *mYA[1]=0xff;
  570.                         else *mYA[1]=0x00;
  571.                     }
  572.                    
  573.  
  574.                     if((!(OS_OUT_YA&OS_OUT_YA3_RD)))
  575.                     {//клапан не готов
  576.                         *mYA[2]=0x33;
  577.                     }
  578.                     else{
  579.                         if(status&STATUS_YA3_OP) *mYA[2]=0x000;
  580.                         else if(status&STATUS_YA3_RD) *mYA[2]=0xff;
  581.                         else *mYA[2]=0x00;
  582.                     }
  583.                     /*
  584.                     if((!(OS_OUT_YA&OS_OUT_YA4_RD)))
  585.                     {//клапан не готов
  586.                         *mYA[3]=0x33;
  587.                     }
  588.                     else{
  589.                         if(status&STATUS_YA4_OP) *mYA[3]=0x00;
  590.                         else if(status&STATUS_YA4_RD) *mYA[3]=0xff;
  591.                         else *mYA[3]=0x00;
  592.                     }
  593.  
  594.                 }
  595.                 else{
  596.                     if(((!(OS_OUT_YA&OS_OUT_YA1_RD))||(status&STATUS_YA1_RD)))
  597.                     {//клапан не готов
  598.                         *mYA[0]=0x33;
  599.                     }
  600.                     else if((status&STATUS_YA1_OP))
  601.                     {//клапан упавший
  602.                         *mYA[0]=0x00;
  603.                     }
  604.                     else *mYA[0]=0xff;
  605.  
  606.                     if(((!(OS_OUT_YA&OS_OUT_YA2_RD))||(status&STATUS_YA2_RD)))//
  607.                     {//клапан не готов
  608.                         *mYA[1]=0x33;
  609.                     }
  610.                     else if((status&STATUS_YA2_OP))
  611.                     {//клапан упавший
  612.                         *mYA[1]=0x00;
  613.                     }
  614.                     else *mYA[1]=0xff;
  615.                    
  616.  
  617.                    if(((!(OS_OUT_YA&OS_OUT_YA3_RD))||(status&STATUS_YA3_RD)))
  618.                     {//клапан не готов
  619.                         *mYA[2]=0x33;
  620.                     }
  621.                     else if((status&STATUS_YA3_OP))
  622.                     {//клапан упавший
  623.                         *mYA[2]=0x00;
  624.                     }
  625.                     else *mYA[2]=0xff;
  626.                     /*
  627.                     if(((!(OS_OUT_YA&OS_OUT_YA4_RD))||(status&STATUS_YA4_RD)))
  628.                     {//клапан не готов
  629.                         *mYA[3]=0x33;
  630.                     }
  631.                     else if((status&STATUS_YA4_OP))
  632.                     {//клапан упавший
  633.                         *mYA[3]=0x00;
  634.                     }
  635.                     else *mYA[3]=0xff;
  636.  
  637.                 }
  638.             }*/
  639.         }
  640.         else
  641.         {// БФПП в дисте - все моргает желтым
  642.             *mBFPP=0x33;
  643.         //    *mYA[0]=0x33;
  644.         //    *mYA[1]=0x33;
  645.         //    *mYA[2]=0x33;
  646.         //    *mYA[3]=0x33;
  647.         }
  648.     }
  649.     else
  650.     {//неправильный сетевой адрес или нет связи
  651.         *mBFPP=0x00; //пожарная лампочка желтая, клапана тушим
  652.         *mSG=0xff;
  653.         *mSB=0xff;
  654.         *mSQ=0xff;
  655.         *mKN=0xff;
  656.         //*mSPS=0xff;
  657.         for(uint8_t x=0; x < 9; x++)*mYA[x]=0xff;
  658.  
  659.     }
  660. }
  661.  
  662.  
  663. const char norma_str[] = "в норме";
  664. const char nolink_str[] = "не в сети";
  665. const char noadr_str[] = "ош. адр.";
  666. const char etaz_fire_str[] = "пожар сеть";
  667. const char firePK_str[] = "пожар ПК  ";
  668. const char fireSPS_str[] = "пожар СПС ";
  669. const char dist_str[] = "дист";
  670. const char luch_str[] = "луч";
  671. const char error_220_str[] = "Нет 220";
  672.  
  673. void Etaz_item::show_lcd()
  674. {    
  675.     if(!(enh_info&LINK_OK))
  676.         {LCD_abc((char*)nolink_str,7);}
  677.     else
  678.     {
  679.         if(enh_info&INCORRECT_ADR)
  680.         {LCD_abc((char*)noadr_str,7);}
  681.         else
  682.         {
  683.             if(enh_info&ERROR_220){
  684.                 LCD_abc((char*)error_220_str,7);
  685.             }
  686.             else
  687.             {
  688.                 LCD_abc((char*)norma_str,7);
  689.                 if(enh_info&FIRE_FROM_BFPP)
  690.                 {
  691.                     LCD_abc((char*)etaz_fire_str,16);
  692.                     if(enh_info&FIRE_FROM_SPS)LCD_abc((char*)fireSPS_str,16);/////////////////////
  693.                     if(enh_info&FIRE_FROM_PK) LCD_abc((char*)firePK_str,16);/////////////////////
  694.                 }
  695.                 else
  696.                 {
  697.                     if(enh_info&DIST_BFPP)
  698.                         LCD_abc((char*)dist_str,16);
  699.                     if(enh_info&LUCH)
  700.                         LCD_abc((char*)luch_str,27);
  701.                 } //else ~fire_from_bfpp
  702.             }
  703.         }  //else correct_addr
  704.     } //else LINK_OK
  705. }
  706.  
  707. void show_lcd_imvv_bfpp()
  708. {
  709.     if(scafe_fl&SCAFE_NET4)
  710.         {LCD_abc((char*)nolink_str,7);}
  711.     else
  712.     {
  713.         LCD_abc((char*)norma_str,7);
  714.         if(scafe_fl_imvv_bfpp&FIRE_FROM_BFPP)
  715.         {
  716.             LCD_abc((char*)etaz_fire_str,16);
  717.             if(scafe_fl_imvv_bfpp&FIRE_FROM_SPS)LCD_abc((char*)fireSPS_str,16);/////////////////////
  718.             if(scafe_fl_imvv_bfpp&FIRE_FROM_PK) LCD_abc((char*)firePK_str,16);/////////////////////
  719.         }
  720.     } //else LINK_OK
  721. }
  722.  
  723. void Etaz_item::init()
  724. {
  725.     enh_info=0;
  726.     status=0;
  727.     stad=0;
  728.     sub_st=0;
  729.     out=0xff;
  730. }
  731. void Etaz_item::drv()
  732. {
  733.     //отработка драйвера при пожаре (поэтапный пуск заслонок на БФПП)
  734.     if(!sec_tik) inc_t_stad();
  735.     if(KPD_TYPE.GetType()){
  736.         out&=~(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4);
  737.     }
  738.     else{
  739.         switch(sub_st)
  740.         {
  741.             case 0://дружное падение клапанов
  742.                 out&=~(OUT_BFPP2|HL1);
  743.                 if(fire_floor!=0){
  744.                     out|=(OUT_BFPP1|OUT_BFPP3|OUT_BFPP4);
  745.                 }else{
  746.                     out|=(OUT_BFPP1|OUT_BFPP4);
  747.                 }
  748.                 if(read_t_stad()>2) {sub_st=1;clear_t_stad();}
  749.                 break;
  750.             case 1://дружное падение клапанов
  751.                 out&=~(OUT_BFPP1|HL1);
  752.                 if(fire_floor!=0){
  753.                     out|=(OUT_BFPP2|OUT_BFPP3|OUT_BFPP4);
  754.                 }else{
  755.                     out|=(OUT_BFPP2|OUT_BFPP4);
  756.                 }
  757.                 if(read_t_stad()>2) {sub_st=2;clear_t_stad();}
  758.                 break;
  759.             case 2://дружное падение клапанов
  760.                 out&=~(OUT_BFPP3|HL1);
  761.                 out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP4);
  762.                 if(read_t_stad()>2) {sub_st=3;clear_t_stad();}
  763.                 break;
  764.             case 3://дружное падение клапанов
  765.                 out&=~(OUT_BFPP4|HL1);
  766.                 if(fire_floor!=0){
  767.                     out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3);
  768.                 }else{
  769.                     out|=(OUT_BFPP1|OUT_BFPP2);
  770.                 }
  771.                 if(read_t_stad()>2) {sub_st=4;clear_t_stad();}
  772.                 break;
  773.             case 4://кто не упал - я не виноват
  774.                 if(fire_floor!=0){
  775.                     out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4);
  776.                 }else{
  777.                     out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP4);
  778.                 }
  779.                 if(read_t_stad()>1) {sub_st=5;clear_t_stad();}
  780.                 break;
  781.             case 5://сидим, ждем когда потушат
  782.                 //
  783.                 break;
  784.         }
  785.     }
  786.  
  787. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement