NeoGSM IP - czujnik alarmowy ze zwłoką czasową

Zaczęty przez Elektroinstalacje, Październik 04, 2019, 21:52:31

Poprzedni wątek - Następny wątek

Elektroinstalacje

Witam!

Mam kolejny problem z którym bezskutecznie walczę od dłuższego czasu...
W skrypcie poniżej funkcja TimeOfDelay zwraca 1 przez 180 sekund od naruszenia czujnika PIR NC podłączonego pod I5.
W momencie braku ruchu przez 180 s wykrywane jest zbocze opadające M14 które wyzwala M10, które to następnie powoduje zatrzymanie funkcji czasowej SetReset przez M11 (iloczynyn logiczny M10 i M1).
Objaw jest taki, że po wyzwoleniu O3 przez O2, przez przy braku ruchu (I5=0) funkcja działa prawidłowo. Dopiero po wykryciu ruchu, nigdy nie następuje zatrzymanie O3 resetem M10.
Czy prawidłowo wykorzystałem zbocza markerów?
Przy okazji zauważyłem, że trzeba było przestawić miejscami również tk1p=tk1 aby zadziałało.
Proszę o sugestie.
Pozdrawiam!

int ac;
int I1;
int I2;
int I3;
int I4;
int I4p;
int I5;       
int I5p; 
int I6;
int L2;
int L4;
int M1;       
int M10;       
int M11;
int M12;       
int M13;
int M14;   
int M14p;       
int M15;
int M2;
int M3;   
int M4; 
int M5;     
int M6;
int M7;
int M8;
int M9;
int O1;
int O2;
int O3;
int O3p;
int O4;
int O5;
int O6;   
int tk1;
int tk1p;
main(){
gbenv();
I4p=geti(4);
I5p=geti(5);
M14p=M14;
O3p=geto(3);
tk1p=tk1;O1=geto(1);
O2=geto(2);
O3=geto(3);
O4=geto(4);
O5=geto(5);
O6=geto(6);
L4=0;
L2=0; 
while(1){
gbenv();
I1=geti(1);
I2=geti(2);
I3=geti(3);
I4=geti(4);
I5=geti(5);
I6=geti(6);
O1=geto(1);
O2=geto(2);
O3=geto(3);     
O4=geto(4);
O5=geto(5);
O6=geto(6); 
if(O3==1&&(I4p==0&&I4==1)){
L4=L4+1;
M4=1;
} else {
M4=0;
};
if(L4==2){
M1=1;
L4=0;
} else {
M1=0;
};
if((O3p==1&&O3==0)){
L2=L2+1;
};       
if((M14p==1&&M14==0)){   
M10=1;   
L4=0;
} else {
M10=0;
};                     
M7=!O3;
M12=M7&I1;     
M2=M4|I3;         
M5=M3|I2|I6;     
M6=M12|M5;     
M8=I4|ac;   
M11=M1|M10;       
M13=M4|ac|O6;       
if((tk1p==0&&tk1==1)){ 
SMS("Liczba wejsc dzis: ",L2);
L2=0;
};                       
O3p=O3;M14p=M14;
M14=tofd(0,I5,M1,180);   
O2=setr(0,M6,M13,0);
O3=setr(1,O2,M11,0);   
O4=pons(2,M2,0,3);         
M3=tond(3,O3,M11,900); 
O1=setr(4,M5,M4,0);
O5=I6;
O6=ac;   
I4p=I4;I5p=I5;tk1p=tk1;
seto(1,O1); 
seto(2,O2);
seto(3,O3);
seto(4,O4);
seto(5,O5);
seto(6,O6);       
};
};