OptimaGSM - wyjście licznikowe.

Zaczęty przez alarmymazury, Marzec 20, 2017, 09:02:21

Poprzedni wątek - Następny wątek

alarmymazury

Mam pytanie - chciałem zrobić wyjście załączane licznikiem.

Zrobiłem tak -
1 warunek : naruszenie któregokolwiek z wejść wykonuje  L1 + 1

następnie

2 warunek   L1 > L2  wyzwala przekaźnik czasowy na out i robi  L1 - 20

W tym celu w wartościach początkowych zrobiłem L2=20   i teoretycznie co 20-te naruszenie (liczone są wszystkie czujniki) powinien uruchamiać się przekaźnik czasowy na out i odejmować 20 od licznika... ale nic się nie dzieje.

mirekgrz

Czy o to Ci chodziło:

int I1;
int I2;
int L1;
int L2;
int M1;
int O1;
main(){
gbenv();
O1=geto(1);
L1=0;
L2=20;
while(1){
gbenv();
I1=geti(1);
I2=geti(2);
O1=geto(1);
if(I1==1||I2==1){
L1=L1+1;
WAIT(1000);
};
if(L1>L2){             
M1=1;
L1=L1-20;   
} else {
M1=0;
};
O1=pons(0,M1,0,5);
seto(1,O1);
};
}; 

Mam tylko problem jak zaznaczyć wszystkie wejścia. W przykładzie są tylko wykorzystane dwa wejścia.

alarmymazury

Dokładnie o takie zastosowanie chodzi, bez "wait", ale dokładnie o to.
Sprawdzę jeszcze dzis, bo ja korzystałem z argumentu __| zamiast =1 przy czujnikach (tak było w nocie aplikacyjnej na stronie ropama).

mirekgrz

wait dodalem do latwiejszego testowania. kazde zaznaczenie "ptaszka" przy wejsciu generuje duzo impulsow. Swoja droga jak dodac do skryptu zeby wszystkie wejscia mozba bylo zliczac? Panowie Roberci jest jakis sposób?

robertm

Proponuje jednak użycie zbocza narastającego:

if((I1p==0&&I1==1)||(I2p==0&&I2==1)||(I3p==0&&I3==1)){

Co ma Pan na myśli pisząc : "kazde zaznaczenie "ptaszka" przy wejsciu generuje duzo impulsow" ?

alarmymazury

#5
udało sie zrobić.

wkleje swój skrypt poniżej

naruszenie wejść I11 do I16 powoduje włączenie odpowiadającego dla nich out-u na 5 sekund (działają jak czujki ruchu załacząjące światło)

możliwe jest również załączenie tych out-ów na stałe z panelu TPR-1.

Dodatkowo, naruszenia wejść od i11 do i15 są liczone do licznika, jeżeli ten licznik przekroczy 20 naruszeń to jest uruchamiany out15 na czas 15 sekund. Możliwe jest też wyłączenie zliczania, żeby ten out w ogóle się nie uruchamiał - również z panelu TPR.

Całość będzie sterować wentylacją |(out15) i oświetleniem (out 9-14) w podziemnych łazienkach.
int I11;
int I11p;
int I12;
int I12p;
int I13;
int I13p;
int I14;
int I14p;
int I15;
int I16;
int L1;
int L2;
int M1;
int M2;
int M3;
int M4;
int M5;
int M6;
int M7;
int O10;
int O11;
int O12;
int O13;
int O14;
int O15;
int O25;
int O26;
int O27;
int O28;
int O29;
int O30;
int O31;
int O9;
main(){
gbenv();
I11p=geti(11);
I12p=geti(12);
I13p=geti(13);
I14p=geti(14);
O10=geto(10);
O11=geto(11);
O12=geto(12);
O13=geto(13);
O14=geto(14);
O15=geto(15);
O25=geto(25);
O26=geto(26);
O27=geto(27);
O28=geto(28);
O29=geto(29);
O30=geto(30);
O31=geto(31);
O9=geto(9);
L2=20;
L1=0;
while(1){
gbenv();
I11=geti(11);
I12=geti(12);
I13=geti(13);
I14=geti(14);
I15=geti(15);
I16=geti(16);
O10=geto(10);
O11=geto(11);
O12=geto(12);
O13=geto(13);
O14=geto(14);
O15=geto(15);
O25=geto(25);
O26=geto(26);
O27=geto(27);
O28=geto(28);
O29=geto(29);
O30=geto(30);
O31=geto(31);
O9=geto(9);
if(O25==0){
M1=I11;
} else {
M1=1;
};
if(O26==0){
M2=I12;
} else {
M1=1;
};
if(O27==0){
M3=I13;
} else {
M1=1;
};
if(O28==0){
M4=I14;
} else {
M4=1;
};
if(O29==0){
M5=I15;
} else {
M5=1;
};
if(O30==0){
M5=I16;
} else {
M6=1;
};
if((I11p==0&&I11==1)||(I12p==0&&I12==1)||(I13p==0&&I13==1)||(I14p==0&&I14==1)){
L1=L1+1;
};
if(L1>L2&&O31==0){
M7=I11;
L1=L1-20;
} else {
M7=0;
};
O9=tofd(0,M1,0,5);
O10=tofd(1,M2,0,5);
O11=tofd(2,M3,0,5);
O12=tofd(3,M4,0,5);
O13=tofd(4,M5,0,5);
O14=tofd(5,M6,0,5);
O15=tofd(6,M7,0,15);
I11p=I11;I12p=I12;I13p=I13;I14p=I14;
seto(9,O9);
seto(10,O10);
seto(11,O11);
seto(12,O12);
seto(13,O13);
seto(14,O14);
seto(15,O15);
};
};

mirekgrz

Cytat: robertm w Marzec 22, 2017, 09:35:47

Co ma Pan na myśli pisząc : "kazde zaznaczenie "ptaszka" przy wejsciu generuje duzo impulsow" ?

W symulatorze zaznaczajac wejscie.

Podczas testu po jednym zaznaczeniu danego wejscia impulsy zliczalo dosc szybko dlatego uzylem funkcji WAIT.

RobertH

#7
Dlatego w przykładzie jest liczenie zbocza wejścia a nie stanu (bo przy każdym przejściu pętli stan zwraca '1' jeżeli wejście jest naruszone).