Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Etaz.h"
- #include "Menu.h"
- #include "Sgwork.h"
- extern NET_BFPP_OUTPUT_STRUCT data_for_bfpp[NUM_OF_BFPP];
- extern NET_BFPP_INPUT_STRUCT data_from_bfpp[NUM_OF_BFPP];
- Etaz_item etaz[NUM_OF_BFPP];
- extern KNC KNC_SPS, KNC_SG, KNC_SB, KNC_KN, KPD_TYPE, KPD_ALT, KPD_KNC;
- extern uint8_t NetPackInfo[];
- uint8_t fire_floor,etaz_OPKEY_PK,etaz_OPSENS_PK;//этаж, на котором произошол пожар
- //extern uint8_t fire_floor;
- //extern uint8_t etaz_OPKEY_PK,etaz_OPSENS_PK;
- uint8_t getCurBFPP(Etaz_item *a, Etaz_item *b){//узнаем текущее бфпп в массиве бфпп
- return((a - b) / sizeof(Etaz_item));
- }
- 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){//отображение клапана на мнемосхеме
- if(firestate){//если выставлен пожар
- if(KPD_TYPE.GetType()){//узнаем тип клапана
- if(status&maskOP) *led=0x0f;//открыт светим зеленым
- else if(status&maskRD) *led=0xf0;//готов
- }else{
- if(status&maskOP) *led=0x0f;//открыт
- else if(stad>2) *led=0xf0;//готов
- else *led=0x0f;//не готов
- }
- }else{//если пожара нет
- if(KPD_TYPE.GetType()){//узнаем тип клапана
- if((!(os_state&os_rd_mask)))//проверка обратных связей
- {//клапан не готов
- *led=0x33;
- }
- else{
- if(status&maskOP) *led=0x00;//открыт
- else if(status&maskRD) *led=0xff;//готов
- else *led=0x00;//не готов
- }
- }else{
- if(((!(os_state&os_rd_mask))||(status&maskRD)))
- {//клапан не готов
- *led=0x33;
- }
- else if((status&maskOP))
- {//клапан упавший
- *led=0x00;
- }
- else *led=0xff;
- }
- }
- }
- uint8_t getpme(uint8_t val,uint8_t min,uint8_t max)
- {
- if(KEY_5)
- {
- val++;
- if(val>=max) val=min;
- }
- if(KEY_2)
- {
- if(val==min) val=max;
- val--;
- }
- return val;
- }
- void show_lcd_imvv_bfpp();
- uint8_t cur_etaz_lcd=LOW_ETAZ;
- const char etaz_str[]="Этаж";
- void show_etaz()
- {
- cur_etaz_lcd=getpme(cur_etaz_lcd,LOW_ETAZ,NUM_OF_BFPP);///!!!
- LCD_abc((char*)etaz_str,0);
- LCD_uind(cur_etaz_lcd,4,2);///!!!
- if(!(scafe_fl&SCAFE_FIRE))
- {
- if(KEY_8)
- {
- scafe_fl|=SCAFE_FIRE;
- if(cur_etaz_lcd!=1)etaz[cur_etaz_lcd].enh_info|=FIRE_FROM_BFPP; else scafe_fl_imvv_bfpp|=FIRE_FROM_BFPP;
- fire_floor=cur_etaz_lcd;///!!!
- etaz_OPKEY_PK=cur_etaz_lcd;
- etaz_OPSENS_PK=cur_etaz_lcd;
- }
- if(KEY_NO) scafe_fl|=SCAFE_STOP_PDZ;
- }
- if(cur_etaz_lcd!=1)
- etaz[cur_etaz_lcd].show_lcd();
- else
- show_lcd_imvv_bfpp();
- }
- const char bfpp_test_str[2][7]=
- {
- "Пакет:",
- "Связь:"
- };
- uint8_t cur_bfpp_test;
- uint8_t test_msk1,test_msk2,test_status;
- void show_bfpp_test()
- {
- test_msk1=test_msk2=test_status=0;
- cur_bfpp_test=getpm(cur_bfpp_test,NUM_OF_BFPP);
- LCD_abc((char*)bfpp_test_str[0],0);
- for(uint8_t i=0; i<4; i++)
- {
- test_msk1|=(data_from_bfpp[cur_bfpp_test].msk&(1<<(i+4)))>>(i*2+1);
- test_msk1|=(data_from_bfpp[cur_bfpp_test].msk&(1<<(3-i)))<<(i*2+1);
- test_msk2|=((data_from_bfpp[cur_bfpp_test].msk>>8)&(1<<(i+4)))>>(i*2+1);
- test_msk2|=((data_from_bfpp[cur_bfpp_test].msk>>8)&(1<<(3-i)))<<(i*2+1);
- }
- test_status=data_from_bfpp[cur_bfpp_test].status1<<4;
- test_status|=data_from_bfpp[cur_bfpp_test].status1>>4;
- LCD_uind16(test_msk1,8,2|LEAD_ZERO);
- LCD_uind16(test_msk2,10,2|LEAD_ZERO);
- LCD_uind16(test_status,12,2|LEAD_ZERO);
- LCD_uind16(data_from_bfpp[cur_bfpp_test].dip,14,2|LEAD_ZERO);
- LCD_abc((char*)bfpp_test_str[1],16);
- LCD_uind(NetPackInfo[cur_bfpp_test+NUM_OF_SCAFE],24,2|LEAD_ZERO);
- LCD_uind(data_from_bfpp[cur_bfpp_test].head.adr - 0xB0,30,2|LEAD_ZERO);
- }
- /////////////////////////////////////////////////////
- //////////////МСК БФПП рассписываем по битно/////////
- /////////////////////////////////////////////////////
- const char bfpp_test_MSK[1][4]={"МСК"};
- uint8_t MSK_BFPP1[8],MSK_BFPP2[8];
- void show_bfpp_test_MSK()
- {
- LCD_abc((char*)bfpp_test_MSK[0],0);
- for(uint8_t i=8; i>0; i--)
- {
- if ((data_from_bfpp[cur_bfpp_test].msk)&(1<<(i-1))) MSK_BFPP1[i-1]=1;
- else MSK_BFPP1[i-1]=0;
- if ((data_from_bfpp[cur_bfpp_test].msk>>8)&(1<<(i-1))) MSK_BFPP2[i-1]=1;
- else MSK_BFPP2[i-1]=0;
- LCD_uind16(MSK_BFPP2[i-1],i+22,2);
- LCD_uind16(MSK_BFPP1[i-1],i+14,2);
- }
- }
- extern uint8_t LED_Out_Str[];
- extern uint8_t MSK[];
- uint8_t E_null,E_nullR=0;//переменная для сброса всякого мусора
- void Etaz_init()
- {
- uint8_t i;
- for(i=LOW_ETAZ;i<NUM_OF_BFPP;i++) //обнуление счетчиков и статусаETAZ
- {
- etaz[i].init();
- data_for_bfpp[i].foo1=0; //отключение ключа, дабы клапана, по своему желание, не падали
- }
- // SET_ETAZ(etaz[0], &mY01, &mY02, &mY03, &mBFPP0, &mSG0, &mSB0, &mSQ0, &mKN0, &mSPS0, &KFIRE0)
- 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)
- //SET_ETAZ(etaz[1], &mY011, &mY012, &mY013, &mBFPP1, &mSG1, &mSB1, &mSQ1, &mKN1, &mSPS1, KFIRE1)
- //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)
- SET_ETAZ(etaz[2], &mKPP2_2_1, &mKPP2_2_2, &mKPP2_2_3, &mBFPP2, &mSG2, &mSB2, &mSQ2, &mKN2, &mSPS2, KFIRE2)
- SET_ETAZ(etaz[3], &mY031, &mY032, &mY033, &mBFPP3, &mSG3, &mSB3, &mSQ3, &mKN3, &mSPS3, KFIRE3)
- SET_ETAZ(etaz[4], &mY041, &mY042, &mY043, &mBFPP4, &mSG4, &mSB4, &mSQ4, &mKN4, &mSPS4, KFIRE4)
- SET_ETAZ(etaz[5], &mY051, &mY052, &mY053, &mBFPP5, &mSG5, &mSB5, &mSQ5, &mKN5, &mSPS5, KFIRE5)
- SET_ETAZ(etaz[6], &mY061, &mY062, &mY063, &mBFPP6, &mSG6, &mSB6, &mSQ6, &mKN6, &mSPS6, KFIRE6)
- SET_ETAZ(etaz[7], &mY071, &mY072, &mY073, &mBFPP7, &mSG7, &mSB7, &mSQ7, &mKN7, &mSPS7, KFIRE7)
- SET_ETAZ(etaz[8], &mY081, &mY082, &mY083, &mBFPP8, &mSG8, &mSB8, &mSQ8, &mKN8, &mSPS8, KFIRE8)
- SET_ETAZ(etaz[9], &mY091, &mY092, &mY093, &mBFPP9, &mSG9, &mSB9, &mSQ9, &mKN9, &mSPS9, KFIRE9)
- SET_ETAZ(etaz[10],&mY101, &mY102, &mY103, &mBFPP10, &mSG10, &mSB10, &mSQ10, &mKN10, &mSPS10,KFIRE10)
- SET_ETAZ(etaz[11],&mY111, &mY112, &mY113, &mBFPP11, &mSG11, &mSB11, &mSQ11, &mKN11, &mSPS11,KFIRE11)
- SET_ETAZ(etaz[12],&mY121, &mY122, &mY123, &mBFPP12, &mSG12, &mSB12, &mSQ12, &mKN12, &mSPS12,KFIRE12)
- SET_ETAZ(etaz[13],&mY131, &mY132, &mY133, &mBFPP13, &mSG13, &mSB13, &mSQ13, &mKN13, &mSPS13,KFIRE13)
- SET_ETAZ(etaz[14],&mY141, &mY142, &mY143, &mBFPP14, &mSG14, &mSB14, &mSQ14, &mKN14, &mSPS14,KFIRE14)
- SET_ETAZ(etaz[15],&mY151, &mY152, &mY153, &mBFPP15, &mSG15, &mSB15, &mSQ15, &mKN15, &mSPS15,KFIRE15)
- SET_ETAZ(etaz[16],&mY161, &mY162, &mY163, &mBFPP16, &mSG16, &mSB16, &mSQ16, &mKN16, &mSPS16,KFIRE16)
- SET_ETAZ(etaz[17],&mY171, &mY172, &mY173, &mBFPP17, &mSG17, &mSB17, &mSQ17, &mKN17, &mSPS17,KFIRE17)
- SET_ETAZ(etaz[18],&mY181, &mY182, &mY183, &mBFPP18, &mSG18, &mSB18, &mSQ18, &mKN18, &mSPS18,KFIRE18)
- SET_ETAZ(etaz[19],&mY191, &mY192, &mY193, &mBFPP19, &mSG19, &mSB19, &mSQ19, &mKN19, &mSPS19,KFIRE19)
- SET_ETAZ(etaz[20],&mY201, &mY202, &mY203, &mBFPP20, &mSG20, &mSB20, &mSQ20, &mKN20, &mSPS20,KFIRE20)
- SET_ETAZ(etaz[21],&mY211, &mY212, &mY213, &mBFPP21, &mSG21, &mSB21, &mSQ21, &mKN21, &mSPS21,KFIRE21)
- SET_ETAZ(etaz[22],&mY221, &mY222, &mY223, &mBFPP22, &mSG22, &mSB22, &mSQ22, &mKN22, &mSPS22,KFIRE22)
- SET_ETAZ(etaz[23],&mY231, &mY232, &mY233, &mBFPP23, &mSG23, &mSB23, &mSQ23, &mKN23, &mSPS23,KFIRE23)
- SET_ETAZ(etaz[24],&mY241, &mY242, &mY243, &mBFPP24, &mSG24, &mSB24, &mSQ24, &mKN24, &mSPS24,KFIRE24)
- //SET_ETAZ(etaz[25],&mY251, &mY252, &mY253, &mBFPP25, &mSG25, &mSB25, &mSQ25, &mKN25, &mSPS25,KFIRE25)
- /*//*/
- fire_floor=0xff;
- etaz_OPKEY_PK=0xff;
- etaz_OPSENS_PK=0xff;
- // etaz[1].enh_info|=etaz_1;
- // etaz[3].enh_info|=etaz_3;
- }
- //extern uint8_t LOW_ETAZ;
- uint8_t err;//байт неисправности////////////////////////////////////////////////////////////
- void Etaz_drv()
- {
- err=0;
- PN_fl &= ~PN_BFPP; //сброс флага перед очередной проверкой
- scafe_fl&=~OP_PK_SQ;//снимаем флаг открытия дверей пожкрана
- uint8_t i;
- for(i=LOW_ETAZ;i<NUM_OF_BFPP;i++)
- {
- if(i == 1){//для бфпп реализованном на имвв
- if(scafe_fl&SCAFE_STOP_PDZ)
- {
- scafe_fl_imvv_bfpp&=~(FIRE_FROM_BFPP|FIRE_FROM_SPS);
- }
- else if(fire_floor==0xFF)
- {
- if( KNC_SPS.Check(msk(KFIRE1))) //пришел пожар от СПС
- {
- fire_floor=1;
- scafe_fl_imvv_bfpp|=(FIRE_FROM_BFPP|FIRE_FROM_SPS);
- scafe_fl|=SCAFE_FIRE_SPS|SCAFE_FIRE;
- }
- }
- continue;
- }
- if(scafe_fl&SCAFE_STOP_PDZ)
- {
- etaz[i].stad=0;
- etaz[i].sub_st=0;
- etaz[i].clear_t_stad();
- etaz[i].clear_t_sub_st();
- etaz[i].enh_info&=~(FIRE_FROM_BFPP|FIRE_FROM_PK|FIRE_FROM_SPS|KEY_PK|SENS_PK);
- etaz[i].out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4|HL1);
- data_for_bfpp[i].foo1=0; //отключение ключа, дабы клапана, по своему желание, не падали
- }
- else if(fire_floor==0xFF)
- {
- etaz[i].out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4|HL1|HL1|HL2);
- if( KNC_SPS.Check( msk(etaz[i].KFireSPS)) ) //пришел пожар от СПС
- {
- fire_floor=i;
- etaz[i].enh_info|=(FIRE_FROM_BFPP|FIRE_FROM_SPS);
- scafe_fl|=SCAFE_FIRE_SPS|SCAFE_FIRE;
- }
- }
- //определение наличия связи с БФПП и проверка нажатия кнопки ПОЖАР на БФПП
- ///////////////////////////////////////////////////////////////////////////////////////////
- if((NetPackInfo[i+NUM_OF_SCAFE]<10))//если есть связь с БФПП
- {
- etaz[i].enh_info|=LINK_OK;
- if((0xb0+(data_from_bfpp[i].dip&0x1f))==data_from_bfpp[i].head.adr)//совпадение адреса ответа
- {
- etaz[i].enh_info&=~INCORRECT_ADR;
- if(!(data_from_bfpp[i].status1&CHECK_220)){
- etaz[i].enh_info&=~ERROR_220;
- if(data_from_bfpp[i].dip&AUTO_PDZ)//БФПП в режиме АВТО
- {
- etaz[i].enh_info&=~DIST_BFPP;
- if(data_from_bfpp[i].msk&OP_PK) {etaz[i].enh_info|=OPEN_PK; }//ПК ОТКРЫТ
- else {etaz[i].enh_info&=~OPEN_PK; }//
- ///////////////////////////////////////////////////////////////////////////////////////////
- if(KNC_SG.Check(data_from_bfpp[i].msk & S_PK))//
- {
- etaz[i].enh_info|=SENS_PK;
- PN_fl |= PN_BFPP;
- etaz_OPSENS_PK=i;
- // if(i>11) scafe_fl|=SHIGH_ETAG;
- // else scafe_fl&=~SHIGH_ETAG;
- }
- // else {etaz[i].enh_info&=~SENS_PK;}
- if (KNC_SB.Check(data_from_bfpp[i].msk & K_PK)) //
- {
- etaz[i].enh_info|=KEY_PK;
- PN_fl |= PN_BFPP;
- etaz_OPKEY_PK=i;
- //
- // if(i>11) scafe_fl|=SHIGH_ETAG;
- // else scafe_fl&=~SHIGH_ETAG;
- }
- // else {etaz[i].enh_info&=~KEY_PK;}
- //проверка луча
- #if KN2 //кусок кода для СДВОЕННОЙ кнопки
- if(data_from_bfpp[i].msk&(FIRE1|FIRE2))//нажата одна из кнопок пожара (или обе)
- {
- if((data_from_bfpp[i].msk&(FIRE1|FIRE2))==(FIRE1|FIRE2))//нажаты обе кнопки ПОЖАР
- {
- etaz[i].enh_info&=~LUCH;
- if(fire_floor==0xff)
- {
- if(!sec_tik) etaz[i].inc_t_sub_st();
- if(etaz[i].read_t_sub_st()>1)
- {
- scafe_fl|=(SCAFE_FIRE_BFPP|SCAFE_FIRE);
- etaz[i].enh_info|=FIRE_FROM_BFPP|FIRE_FROM_PK;
- fire_floor=i;
- }
- }
- }
- else
- {
- etaz[i].enh_info|=LUCH;
- etaz[i].clear_t_sub_st();
- }
- }
- else
- {
- etaz[i].enh_info&=~LUCH;
- etaz[i].clear_t_sub_st();
- }
- #else //если кнопка одинарная
- if( KNC_KN.Check(data_from_bfpp[i].msk & FIRE2) )//нажата кнопка пожара
- {
- if(fire_floor==0xff)
- {
- if(!sec_tik) etaz[i].inc_t_sub_st();
- if(etaz[i].read_t_sub_st()>1)
- {
- scafe_fl|=(SCAFE_FIRE_BFPP|SCAFE_FIRE);
- etaz[i].enh_info|=FIRE_FROM_BFPP|FIRE_FROM_PK;
- fire_floor=i;
- }
- }
- }
- #endif
- }
- else etaz[i].enh_info|=DIST_BFPP;
- }
- else etaz[i].enh_info|=ERROR_220;
- }
- else etaz[i].enh_info|=INCORRECT_ADR;
- }
- else {etaz[i].enh_info&=~LINK_OK; err++;}////////////////////////////////////////////
- //готовность силовых выходов OS
- //-------1-4
- if(i>2){// 3-24 этаж
- if(data_from_bfpp[i].status1&OS_OUT4_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA1_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA1_RD;
- if(data_from_bfpp[i].status1&OS_OUT4_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA2_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA2_RD;
- if(data_from_bfpp[i].status1&OS_OUT3_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA3_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA3_RD;
- if(data_from_bfpp[i].status1&OS_OUT3_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA4_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA4_RD;
- //готовность клапанов SB
- 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;
- else etaz[i].status|=STATUS_YA1_RD;
- 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;
- else etaz[i].status|=STATUS_YA2_RD;
- 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;
- else etaz[i].status|=STATUS_YA3_RD;
- 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;
- else etaz[i].status|=STATUS_YA4_RD;
- //готовность клапанов
- 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;
- else etaz[i].status|=STATUS_YA1_OP;
- 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;
- else etaz[i].status|=STATUS_YA2_OP;
- 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;
- else etaz[i].status|=STATUS_YA3_OP;
- 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;
- else etaz[i].status|=STATUS_YA4_OP;
- }else if(i == 2){
- if(data_from_bfpp[i].status1&OS_OUT4_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA1_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA1_RD;
- if(data_from_bfpp[i].status1&OS_OUT4_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA2_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA2_RD;
- if(data_from_bfpp[i].status1&OS_OUT3_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA3_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA3_RD;
- if(data_from_bfpp[i].status1&OS_OUT3_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA4_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA4_RD;
- //готовность клапанов SB
- 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;
- else etaz[i].status|=STATUS_YA1_RD;
- 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;
- else etaz[i].status|=STATUS_YA2_RD;
- 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;
- else etaz[i].status|=STATUS_YA3_RD;
- 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;
- else etaz[i].status|=STATUS_YA4_RD;
- //готовность клапанов
- 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;
- else etaz[i].status|=STATUS_YA1_OP;
- 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;
- else etaz[i].status|=STATUS_YA2_OP;
- 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;
- else etaz[i].status|=STATUS_YA3_OP;
- 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;
- else etaz[i].status|=STATUS_YA4_OP;
- }else if(i == 0){//0 этаж подвал
- if(data_from_bfpp[i].status1&OS_OUT4_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA1_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA1_RD;
- if(data_from_bfpp[i].status1&OS_OUT4_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA2_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA2_RD;
- if(data_from_bfpp[i].status1&OS_OUT3_2) etaz[i].OS_OUT_YA&=~OS_OUT_YA3_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA3_RD;
- if(data_from_bfpp[i].status1&OS_OUT3_1) etaz[i].OS_OUT_YA&=~OS_OUT_YA4_RD;
- else etaz[i].OS_OUT_YA|=OS_OUT_YA4_RD;
- //готовность клапанов SB
- 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;
- else etaz[i].status|=STATUS_YA1_RD;
- 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;
- else etaz[i].status|=STATUS_YA2_RD;
- 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;
- else etaz[i].status|=STATUS_YA3_RD;
- //готовность клапанов
- 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;
- else etaz[i].status|=STATUS_YA1_OP;
- 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;
- else etaz[i].status|=STATUS_YA2_OP;
- 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;
- else etaz[i].status|=STATUS_YA3_OP;
- 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;
- else etaz[i].status|=STATUS_YA4_OP;
- 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;
- else etaz[i].status|=STATUS_YA5_OP;
- 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;
- else etaz[i].status|=STATUS_YA6_OP;
- 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;
- else etaz[i].status|=STATUS_YA7_OP;
- 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;
- else etaz[i].status|=STATUS_YA8_OP;
- 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;
- else etaz[i].status|=STATUS_YA9_OP;
- }
- etaz[i].show_mnem();
- if(!NetPackInfo[i+NUM_OF_SCAFE]) {etaz[i].out^=HL0;NetPackInfo[i+NUM_OF_SCAFE]++;}
- data_for_bfpp[i].out_led=etaz[i].out;
- }
- if((scafe_fl&SCAFE_FIRE)&&(fire_floor<NUM_OF_BFPP))
- {
- etaz[fire_floor].drv();
- if(fire_floor != 0){
- //etaz[0].out&=~OUT_BFPP3;//отключение вентиляции на нулевом бфпп
- //data_for_bfpp[0].out_led&=~OUT_BFPP3;//отключение вентиляции на нулевом бфпп
- //data_for_bfpp[0].foo1=0xFF;// Включение ключа, блокирующего случайное открытие клапанов
- }
- data_for_bfpp[fire_floor].foo1=0xFF;// Включение ключа, блокирующего случайное открытие клапанов
- }
- //////////////////////////////////////////////////////////////////
- if(err) scafe_fl|=SCAFE_NET1; // нет в сети БФПП
- else scafe_fl&=~SCAFE_NET1;
- /////////////////////////////////////////////////////////////////////
- }
- void Etaz_item::show_mnem(){
- uint8_t curBfpp = (this - etaz);//узнаем положение экземпляра бфпп в массиве бфпп
- if(enh_info&FIRE_FROM_SPS)*mSPS=0x55;
- else *mSPS=0xff;////////////////////
- if((enh_info&LINK_OK)&&(!(enh_info&(INCORRECT_ADR|ERROR_220))))
- {//есть связь и правильный ответный адрес
- if(!(enh_info&DIST_BFPP))//БФПП не в дисте
- {
- if (enh_info&SENS_PK) *mSG=0xF0; //сработал датчик пожкрана
- else *mSG=0xFF;
- if(enh_info&FIRE_FROM_PK)*mKN=0x55; //запуск ПДЗ от кнопки
- else if(enh_info&LUCH) *mKN=0x33;//ошибка луча
- else *mKN=0xFF;
- if(enh_info&KEY_PK) *mSB=0xF0; //нажата кнопка пуска пожнасосов
- else *mSB=0xFF;
- if(enh_info&OPEN_PK){
- *mSQ=0xF3; //шкаф открыли
- scafe_fl|=OP_PK_SQ;//выставляем флаг открытия дверей пожкрана
- }
- else *mSQ=0xFF;
- if(enh_info&FIRE_FROM_BFPP)
- {//пожар светим красным
- *mBFPP=0x55;
- }
- else
- {//все нормально - светим зеленым
- *mBFPP=0x0f;
- //*mSPS=0xff;//////////////////////////////////////////
- }
- //отработка клапанов
- //if(enh_info&FIRE_FROM_BFPP)
- //{
- /*if(status&STATUS_YA1_OP) *mYA[0]=0x0f;
- else if(status&STATUS_YA1_RD) *mYA[0]=0xF0;
- if(status&STATUS_YA1_OP) *mYA[0]=0x0f;
- else if(read_t_stad()>2) *mYA[0]=0xF0;
- else *mYA[0]=0x0f;*/
- /*void showClapan(
- *
- *uint16_t stad, значение read_t_stad()
- *uint16_t status, флаги status
- *uint16_t maskOP, бит открытия
- *uint16_t maskRD, бит готовности
- *uint8_t firestate, проверка на пожар
- *uint8_t os_state, флаги обратной связи
- *uint8_t os_rd_mask бит обратной связи
- *uint8_t *led) указатель на светодиод
- */
- if(curBfpp > 2){//стандартные бфпп 3-24
- 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]);
- 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]);
- 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]);
- }else if(curBfpp == 2){//2
- 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]);
- 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]);
- 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]);
- //showClapan(read_t_stad(), status, STATUS_YA4_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[3]);
- //showClapan(read_t_stad(), status, STATUS_YA5_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[4]);
- //showClapan(read_t_stad(), status, STATUS_YA6_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[5]);
- //showClapan(read_t_stad(), status, STATUS_YA7_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA2_RD, mYA[6]);
- }else if(curBfpp == 0){//0 подвал
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- showClapan(read_t_stad(), status, STATUS_YA9_OP, 0, (enh_info&FIRE_FROM_BFPP), OS_OUT_YA, OS_OUT_YA5_RD, mYA[8]);//вентиляция
- }
- /*}
- //else
- //{//нет пожара
- if(KPD_TYPE.GetType()){
- if((!(OS_OUT_YA&OS_OUT_YA1_RD)))
- {//клапан не готов
- *mYA[0]=0x33;
- }
- else{
- if(status&STATUS_YA1_OP) *mYA[0]=0x00;
- else if(status&STATUS_YA1_RD) *mYA[0]=0xff;
- else *mYA[0]=0x00;
- }
- if((!(OS_OUT_YA&OS_OUT_YA2_RD)))
- {//клапан не готов
- *mYA[1]=0x33;
- }
- else{
- if(status&STATUS_YA2_OP) *mYA[1]=0x00;
- else if(status&STATUS_YA2_RD) *mYA[1]=0xff;
- else *mYA[1]=0x00;
- }
- if((!(OS_OUT_YA&OS_OUT_YA3_RD)))
- {//клапан не готов
- *mYA[2]=0x33;
- }
- else{
- if(status&STATUS_YA3_OP) *mYA[2]=0x000;
- else if(status&STATUS_YA3_RD) *mYA[2]=0xff;
- else *mYA[2]=0x00;
- }
- /*
- if((!(OS_OUT_YA&OS_OUT_YA4_RD)))
- {//клапан не готов
- *mYA[3]=0x33;
- }
- else{
- if(status&STATUS_YA4_OP) *mYA[3]=0x00;
- else if(status&STATUS_YA4_RD) *mYA[3]=0xff;
- else *mYA[3]=0x00;
- }
- }
- else{
- if(((!(OS_OUT_YA&OS_OUT_YA1_RD))||(status&STATUS_YA1_RD)))
- {//клапан не готов
- *mYA[0]=0x33;
- }
- else if((status&STATUS_YA1_OP))
- {//клапан упавший
- *mYA[0]=0x00;
- }
- else *mYA[0]=0xff;
- if(((!(OS_OUT_YA&OS_OUT_YA2_RD))||(status&STATUS_YA2_RD)))//
- {//клапан не готов
- *mYA[1]=0x33;
- }
- else if((status&STATUS_YA2_OP))
- {//клапан упавший
- *mYA[1]=0x00;
- }
- else *mYA[1]=0xff;
- if(((!(OS_OUT_YA&OS_OUT_YA3_RD))||(status&STATUS_YA3_RD)))
- {//клапан не готов
- *mYA[2]=0x33;
- }
- else if((status&STATUS_YA3_OP))
- {//клапан упавший
- *mYA[2]=0x00;
- }
- else *mYA[2]=0xff;
- /*
- if(((!(OS_OUT_YA&OS_OUT_YA4_RD))||(status&STATUS_YA4_RD)))
- {//клапан не готов
- *mYA[3]=0x33;
- }
- else if((status&STATUS_YA4_OP))
- {//клапан упавший
- *mYA[3]=0x00;
- }
- else *mYA[3]=0xff;
- }
- }*/
- }
- else
- {// БФПП в дисте - все моргает желтым
- *mBFPP=0x33;
- // *mYA[0]=0x33;
- // *mYA[1]=0x33;
- // *mYA[2]=0x33;
- // *mYA[3]=0x33;
- }
- }
- else
- {//неправильный сетевой адрес или нет связи
- *mBFPP=0x00; //пожарная лампочка желтая, клапана тушим
- *mSG=0xff;
- *mSB=0xff;
- *mSQ=0xff;
- *mKN=0xff;
- //*mSPS=0xff;
- for(uint8_t x=0; x < 9; x++)*mYA[x]=0xff;
- }
- }
- const char norma_str[] = "в норме";
- const char nolink_str[] = "не в сети";
- const char noadr_str[] = "ош. адр.";
- const char etaz_fire_str[] = "пожар сеть";
- const char firePK_str[] = "пожар ПК ";
- const char fireSPS_str[] = "пожар СПС ";
- const char dist_str[] = "дист";
- const char luch_str[] = "луч";
- const char error_220_str[] = "Нет 220";
- void Etaz_item::show_lcd()
- {
- if(!(enh_info&LINK_OK))
- {LCD_abc((char*)nolink_str,7);}
- else
- {
- if(enh_info&INCORRECT_ADR)
- {LCD_abc((char*)noadr_str,7);}
- else
- {
- if(enh_info&ERROR_220){
- LCD_abc((char*)error_220_str,7);
- }
- else
- {
- LCD_abc((char*)norma_str,7);
- if(enh_info&FIRE_FROM_BFPP)
- {
- LCD_abc((char*)etaz_fire_str,16);
- if(enh_info&FIRE_FROM_SPS)LCD_abc((char*)fireSPS_str,16);/////////////////////
- if(enh_info&FIRE_FROM_PK) LCD_abc((char*)firePK_str,16);/////////////////////
- }
- else
- {
- if(enh_info&DIST_BFPP)
- LCD_abc((char*)dist_str,16);
- if(enh_info&LUCH)
- LCD_abc((char*)luch_str,27);
- } //else ~fire_from_bfpp
- }
- } //else correct_addr
- } //else LINK_OK
- }
- void show_lcd_imvv_bfpp()
- {
- if(scafe_fl&SCAFE_NET4)
- {LCD_abc((char*)nolink_str,7);}
- else
- {
- LCD_abc((char*)norma_str,7);
- if(scafe_fl_imvv_bfpp&FIRE_FROM_BFPP)
- {
- LCD_abc((char*)etaz_fire_str,16);
- if(scafe_fl_imvv_bfpp&FIRE_FROM_SPS)LCD_abc((char*)fireSPS_str,16);/////////////////////
- if(scafe_fl_imvv_bfpp&FIRE_FROM_PK) LCD_abc((char*)firePK_str,16);/////////////////////
- }
- } //else LINK_OK
- }
- void Etaz_item::init()
- {
- enh_info=0;
- status=0;
- stad=0;
- sub_st=0;
- out=0xff;
- }
- void Etaz_item::drv()
- {
- //отработка драйвера при пожаре (поэтапный пуск заслонок на БФПП)
- if(!sec_tik) inc_t_stad();
- if(KPD_TYPE.GetType()){
- out&=~(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4);
- }
- else{
- switch(sub_st)
- {
- case 0://дружное падение клапанов
- out&=~(OUT_BFPP2|HL1);
- if(fire_floor!=0){
- out|=(OUT_BFPP1|OUT_BFPP3|OUT_BFPP4);
- }else{
- out|=(OUT_BFPP1|OUT_BFPP4);
- }
- if(read_t_stad()>2) {sub_st=1;clear_t_stad();}
- break;
- case 1://дружное падение клапанов
- out&=~(OUT_BFPP1|HL1);
- if(fire_floor!=0){
- out|=(OUT_BFPP2|OUT_BFPP3|OUT_BFPP4);
- }else{
- out|=(OUT_BFPP2|OUT_BFPP4);
- }
- if(read_t_stad()>2) {sub_st=2;clear_t_stad();}
- break;
- case 2://дружное падение клапанов
- out&=~(OUT_BFPP3|HL1);
- out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP4);
- if(read_t_stad()>2) {sub_st=3;clear_t_stad();}
- break;
- case 3://дружное падение клапанов
- out&=~(OUT_BFPP4|HL1);
- if(fire_floor!=0){
- out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3);
- }else{
- out|=(OUT_BFPP1|OUT_BFPP2);
- }
- if(read_t_stad()>2) {sub_st=4;clear_t_stad();}
- break;
- case 4://кто не упал - я не виноват
- if(fire_floor!=0){
- out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP3|OUT_BFPP4);
- }else{
- out|=(OUT_BFPP1|OUT_BFPP2|OUT_BFPP4);
- }
- if(read_t_stad()>1) {sub_st=5;clear_t_stad();}
- break;
- case 5://сидим, ждем когда потушат
- //
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement