Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "devGate.h"
- const prog_char fgate_state_str[5][10]=
- {
- "не в сети",
- "открытие",
- "закрытие",
- "открыто",
- "закрыто",
- };
- void fireGate::drv(){
- if(!sec_tik && counter)counter--;//убывающий счетчик таймер
- //~~~~~~~~~~~~~~отработка событий~~~~~~~~~~~~~~//
- if(!(enh_info&FGATE_OPER)){
- if(*eventOP && cmd == CMD_WAIT && tpCMDComplete != CMD_OPEN){//если пришел сигнал на открытие ворот и мы ожидаем сигнал
- cmd = CMD_OPEN;
- }else if(*eventCL && cmd == CMD_WAIT && tpCMDComplete != CMD_CLOSE){//если пришел сигнал на закрытие ворот и мы ожидаем сигнал
- cmd = CMD_CLOSE;
- }
- }
- //~~~~~~~~~~~~~~отработка комманд~~~~~~~~~~~~~~//
- switch(cmd){
- case CMD_CLOSE://при пожаре
- switch(stad){
- case WAIT_stad://если устройство закончило все действия и ожидает комманду
- stad = UNLOCK_GATE;
- counter = 2;
- break;
- case UNLOCK_GATE://подаем сигнал блокировки ворот
- if(!counter){//ждём
- counter = t_wait_pulse;
- stad = RUN_GATE;
- }
- break;
- case RUN_GATE://подаем короткий сигнал на закрытие ворот
- if(!counter){//ждём
- counter = t_wait_run;
- stad = GATE_PAUSE;
- }
- break;
- case GATE_PAUSE://ждем пока ворота закроются
- if(!counter){////ждём пока ворота не закрылись
- stad = WAIT_stad; //переводим в режим ожидания этап работы
- cmd = CMD_WAIT; //переводим в режим ожидания команду
- tpCMDComplete = CMD_CLOSE;//сохраняем отработавшую комманду
- }
- break;
- }
- break;
- case CMD_OPEN://при сбросе пожара
- switch(stad){
- case WAIT_stad://если устройство закончило все действия и ожидает комманду
- counter = t_wait_pulse;
- stad = RUN_GATE;
- break;
- case RUN_GATE://подаем короткий сигнал на закрытие ворот
- if(!counter){
- counter = t_wait_run;
- stad = GATE_PAUSE;
- }
- break;
- case GATE_PAUSE://ждем пока ворота откроются
- if(!counter){
- stad = LOCK_GATE;
- counter = 2;
- }
- break;
- case LOCK_GATE://подаем сигнал блокировки ворот
- if(!counter){
- stad = WAIT_stad;
- cmd = CMD_WAIT;
- tpCMDComplete = CMD_OPEN;
- }
- break;
- }
- break;
- case CMD_WAIT:// в ожидании каких либо комманд
- break;
- }
- //~~~~~~~~~видача сигналов в зависимости от стадии~~~~~~~~~//
- if(stad == RUN_GATE) {//пуск ворот
- *sig_run = 1;
- }else{
- *sig_run = 0;
- }
- if(stad == UNLOCK_GATE){//разблокировка ворот
- *sig_unblock = 1;
- }else if(stad == LOCK_GATE){//блокировка ворот
- *sig_unblock = 0;
- }
- }
- void fireGate::show_mnem(){
- if((*NetError < 12 && enh_info&FGATE_IN_IMVV) || !(enh_info&FGATE_IN_IMVV)){//если устройство в сети и выставлен флаг проверки в сети ли устройство или если флаг не выставлен
- if(cmd == CMD_CLOSE){
- *mn_os = 0xf5;//моргаем красным при закрытии
- }else if(cmd == CMD_OPEN){
- *mn_os = 0x5f;//моргаем зеленным при открытии
- }else if(cmd == CMD_WAIT){
- if(tpCMDComplete == CMD_CLOSE)
- *mn_os = 0xf0;//светим красным если закрыто
- else
- *mn_os = 0x0f;//светим зеленым если открыто
- }
- if(!msk(k_SMK)){//отображаем смк
- *mn_smk = 0x0f;
- }else{
- *mn_smk = 0xff;
- }
- }else{//если не в сети гасим светодиоды
- *mn_smk = *mn_os = 0xff;
- }
- }
- void fireGate::show_lcd(){
- //~~~~~~~~~выбор ручной или автоматический режим с пульта
- if(KEY_4) {enh_info&=~FGATE_OPER;}
- if(KEY_7) {enh_info|=FGATE_OPER;}
- if(enh_info&FGATE_OPER)//режим ручной
- {
- if(KEY_8 && cmd == CMD_WAIT && tpCMDComplete != CMD_OPEN) cmd=CMD_OPEN;//команда на открытие с кнопки
- if(KEY_9 && cmd == CMD_WAIT && tpCMDComplete != CMD_CLOSE) cmd=CMD_CLOSE;//команда на закрытие с кнопки
- }
- LCD_abc((char*)name,0);
- if((*NetError < 12 && enh_info&FGATE_IN_IMVV) || !(enh_info&FGATE_IN_IMVV)){//если устройство в сети или флаг не выставлен на проверку сети
- //отображение текущей команды
- if(cmd == CMD_OPEN) LCD_abc((char*)stad_str[0],6);
- if(cmd == CMD_CLOSE) LCD_abc((char*)stad_str[1],6);
- //отображение режима ручной/авто
- if(enh_info&FGATE_OPER)LCD_abc((char*)mode_str[1],12);
- else LCD_abc((char*)mode_str[0],12);
- //отображение состояние и переходных процессов ворот
- if(cmd == CMD_OPEN) LCD_abc((char*)fgate_state_str[1],19);
- else if(cmd == CMD_WAIT && tpCMDComplete == CMD_OPEN) LCD_abc((char*)fgate_state_str[3],19);
- else if(cmd == CMD_CLOSE) LCD_abc((char*)fgate_state_str[2],19);
- else if(cmd == CMD_WAIT && tpCMDComplete == CMD_CLOSE) LCD_abc((char*)fgate_state_str[4],19);
- //LCD_uind(stad, 30, 2);
- }else{
- LCD_abc((char*)fgate_state_str[0],19);//если не в сети
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment