2andnot

devGate.cpp

Dec 6th, 2019
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.77 KB | None | 0 0
  1. #include "devGate.h"
  2.  
  3.  
  4.     const prog_char fgate_state_str[5][10]=
  5.     {
  6.         "не в сети",
  7.         "открытие",
  8.         "закрытие",
  9.         "открыто",
  10.         "закрыто",
  11.     };
  12.  
  13. void fireGate::drv(){
  14.  
  15.     if(!sec_tik && counter)counter--;//убывающий счетчик таймер
  16.  
  17.     //~~~~~~~~~~~~~~отработка событий~~~~~~~~~~~~~~//
  18.     if(!(enh_info&FGATE_OPER)){
  19.         if(*eventOP && cmd == CMD_WAIT && tpCMDComplete != CMD_OPEN){//если пришел сигнал на открытие ворот и мы ожидаем сигнал
  20.             cmd = CMD_OPEN;
  21.         }else if(*eventCL && cmd == CMD_WAIT && tpCMDComplete != CMD_CLOSE){//если пришел сигнал на закрытие ворот и мы ожидаем сигнал
  22.             cmd = CMD_CLOSE;
  23.         }
  24.     }
  25.     //~~~~~~~~~~~~~~отработка комманд~~~~~~~~~~~~~~//
  26.     switch(cmd){
  27.         case CMD_CLOSE://при пожаре
  28.             switch(stad){
  29.                 case WAIT_stad://если устройство закончило все действия и ожидает комманду
  30.                     stad = UNLOCK_GATE;
  31.                     counter = 2;
  32.                     break;
  33.  
  34.                 case UNLOCK_GATE://подаем сигнал блокировки ворот
  35.                     if(!counter){//ждём
  36.                         counter = t_wait_pulse;
  37.                         stad = RUN_GATE;
  38.                     }
  39.                     break;
  40.  
  41.                 case RUN_GATE://подаем короткий сигнал на закрытие ворот
  42.                     if(!counter){//ждём
  43.                         counter = t_wait_run;
  44.                         stad = GATE_PAUSE;
  45.                     }
  46.                     break;
  47.  
  48.                 case GATE_PAUSE://ждем пока ворота закроются
  49.                     if(!counter){////ждём пока ворота не закрылись
  50.                         stad = WAIT_stad;   //переводим в режим ожидания этап работы
  51.                         cmd = CMD_WAIT;     //переводим в режим ожидания команду
  52.                         tpCMDComplete = CMD_CLOSE;//сохраняем отработавшую комманду
  53.                     }
  54.                     break;
  55.             }
  56.             break;
  57.  
  58.  
  59.         case CMD_OPEN://при сбросе пожара
  60.             switch(stad){
  61.                 case WAIT_stad://если устройство закончило все действия и ожидает комманду
  62.                     counter = t_wait_pulse;
  63.                     stad = RUN_GATE;
  64.                     break;
  65.  
  66.                 case RUN_GATE://подаем короткий сигнал на закрытие ворот
  67.                     if(!counter){
  68.                         counter = t_wait_run;
  69.                         stad = GATE_PAUSE;
  70.                     }
  71.                     break;
  72.  
  73.                 case GATE_PAUSE://ждем пока ворота откроются
  74.                     if(!counter){
  75.                         stad = LOCK_GATE;
  76.                         counter = 2;
  77.                     }
  78.                     break;
  79.  
  80.                 case LOCK_GATE://подаем сигнал блокировки ворот
  81.                     if(!counter){
  82.                         stad = WAIT_stad;
  83.                         cmd = CMD_WAIT;
  84.                         tpCMDComplete = CMD_OPEN;
  85.                     }
  86.                     break;
  87.  
  88.             }
  89.             break;
  90.  
  91.         case CMD_WAIT:// в ожидании каких либо комманд
  92.             break;
  93.     }
  94.  
  95.     //~~~~~~~~~видача сигналов в зависимости от стадии~~~~~~~~~//
  96.     if(stad == RUN_GATE) {//пуск ворот
  97.         *sig_run = 1;
  98.     }else{
  99.         *sig_run = 0;
  100.     }
  101.  
  102.     if(stad == UNLOCK_GATE){//разблокировка ворот
  103.         *sig_unblock = 1;
  104.     }else if(stad == LOCK_GATE){//блокировка ворот
  105.         *sig_unblock = 0;
  106.     }
  107.  
  108.  
  109.  
  110. }
  111. void fireGate::show_mnem(){
  112.  
  113.     if((*NetError < 12 && enh_info&FGATE_IN_IMVV) || !(enh_info&FGATE_IN_IMVV)){//если устройство в сети и выставлен флаг проверки в сети ли устройство или если флаг не выставлен
  114.  
  115.  
  116.             if(cmd == CMD_CLOSE){
  117.                 *mn_os = 0xf5;//моргаем красным при закрытии
  118.             }else if(cmd == CMD_OPEN){
  119.                 *mn_os = 0x5f;//моргаем зеленным при открытии
  120.             }else if(cmd == CMD_WAIT){
  121.                 if(tpCMDComplete == CMD_CLOSE)
  122.                     *mn_os = 0xf0;//светим красным если закрыто
  123.                 else
  124.                     *mn_os = 0x0f;//светим зеленым если открыто
  125.             }
  126.  
  127.  
  128.  
  129.         if(!msk(k_SMK)){//отображаем смк
  130.             *mn_smk = 0x0f;
  131.         }else{
  132.             *mn_smk = 0xff;
  133.         }
  134.  
  135.     }else{//если не в сети гасим светодиоды
  136.         *mn_smk = *mn_os = 0xff;
  137.     }
  138.  
  139. }
  140. void fireGate::show_lcd(){
  141.  
  142.  
  143.     //~~~~~~~~~выбор ручной или автоматический режим с пульта
  144.     if(KEY_4) {enh_info&=~FGATE_OPER;}
  145.     if(KEY_7) {enh_info|=FGATE_OPER;}
  146.     if(enh_info&FGATE_OPER)//режим ручной
  147.     {
  148.  
  149.         if(KEY_8 && cmd == CMD_WAIT && tpCMDComplete != CMD_OPEN) cmd=CMD_OPEN;//команда на открытие с кнопки
  150.         if(KEY_9 && cmd == CMD_WAIT && tpCMDComplete != CMD_CLOSE) cmd=CMD_CLOSE;//команда на закрытие с кнопки
  151.  
  152.     }
  153.  
  154.     LCD_abc((char*)name,0);
  155.  
  156.     if((*NetError < 12 && enh_info&FGATE_IN_IMVV) || !(enh_info&FGATE_IN_IMVV)){//если устройство в сети или флаг не выставлен на проверку сети
  157.         //отображение текущей команды
  158.         if(cmd == CMD_OPEN)  LCD_abc((char*)stad_str[0],6);
  159.         if(cmd == CMD_CLOSE) LCD_abc((char*)stad_str[1],6);
  160.         //отображение режима ручной/авто
  161.         if(enh_info&FGATE_OPER)LCD_abc((char*)mode_str[1],12);
  162.         else                 LCD_abc((char*)mode_str[0],12);
  163.         //отображение состояние и переходных процессов ворот
  164.         if(cmd == CMD_OPEN)                                     LCD_abc((char*)fgate_state_str[1],19);
  165.         else if(cmd == CMD_WAIT && tpCMDComplete == CMD_OPEN)   LCD_abc((char*)fgate_state_str[3],19);
  166.         else if(cmd == CMD_CLOSE)                               LCD_abc((char*)fgate_state_str[2],19);
  167.         else if(cmd == CMD_WAIT && tpCMDComplete == CMD_CLOSE)  LCD_abc((char*)fgate_state_str[4],19);
  168.  
  169.         //LCD_uind(stad, 30, 2);
  170.     }else{
  171.         LCD_abc((char*)fgate_state_str[0],19);//если не в сети
  172.     }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment