diff --git a/braker.tc b/braker.tc index c508fbb..6bc7104 100644 --- a/braker.tc +++ b/braker.tc @@ -95,8 +95,7 @@ void braker_set(string cmd){ } else{ if (type == "G"){ - relay_set(brakers[num].config->Relay,true); - brakers[num].State = true; + braker_change_state(num-1,true); d("Бракиратор #"+str(num)+" включен по сигналу сервера"); }else{ d("Бракиратор #"+str(num)+" получил сигнал 'B'. Игнорируем."); @@ -114,24 +113,18 @@ void braker_proc(unsigned char number) unsigned long timeout = brakers[num].config->Timeout; if (brakers[num].State){ // проверка на выключение if (brakers[num].OnTime + timeout < sys.timercountms){ // Обработка таймаута - relay_set(brakers[num].config->Relay,false); - brakers[num].State = false; + braker_change_state(num,false); d("Бракиратор #"+str(number)+" выключен по таймауту ["+str(sys.timercountms - brakers[num].OnTime)+"/"+str(timeout)+"]ms"); - brakers[num].OnTime = 0; }else{ // проверка статуса порта if (brakers[num].config->DropPort>0 && getPinState(brakers[num].config->DropPort)){ - relay_set(brakers[num].config->Relay,false); - brakers[num].State = false; + braker_change_state(num,false); d("Бракиратор #"+str(number)+" выключен по сигналу сброса через "+str(sys.timercountms - brakers[num].OnTime)+"ms"); - brakers[num].OnTime = 0; } } }else{ // проверка на сработку if (brakers[num].config->Mode==0 && pinChange(brakers[num].config->SensPort) && getPinStateS(brakers[num].config->SensPort,true)){ if (braker_get_current(num) == "B"){ - relay_set(brakers[num].config->Relay,true); - brakers[num].State = true; - brakers[num].OnTime = sys.timercountms; + braker_change_state(num,true); d("Бракиратор #"+str(number)+" включен по сигналу сенсора"); } } @@ -140,6 +133,16 @@ void braker_proc(unsigned char number) } } +void braker_change_state(unsigned char num, bool state){ + relay_set(brakers[num].config->Relay,state); + brakers[num].State = state; + if (state){ + brakers[num].OnTime = sys.timercountms; + }else{ + brakers[num].OnTime = 0; + } +} + string braker_get_current(unsigned char num){ string c = left(brakers[num].Fifo,1); int l = len(brakers[num].Fifo); diff --git a/braker.th b/braker.th index 2da17e9..a76261e 100644 --- a/braker.th +++ b/braker.th @@ -10,4 +10,5 @@ void braker_proc(unsigned char number); string braker_get_current(unsigned char num); void braker_add_port(char port); bool isBrakerPort(int port); +void braker_change_state(unsigned char num, bool state); #endif \ No newline at end of file diff --git a/global.th b/global.th index a33a99c..49f0077 100644 --- a/global.th +++ b/global.th @@ -9,7 +9,7 @@ #message "link global not defined" #endif -#define VERSION "2.0b_1908141216" +#define VERSION "2.0b_1908151156" #define MAX_FIFO_SIZE 20 #define BRAKER_COUNT 3 @@ -132,5 +132,6 @@ extern BrakerProcess brakers[BRAKER_COUNT]; +