Optima GSM - logic procesor zdanie złożone kilka warunków

Zaczęty przez garzew2, Listopad 20, 2018, 11:16:55

Poprzedni wątek - Następny wątek

garzew2

Witam
Chciałbym w optimie za pomocą logicproseccor wykonać taki warunek:
IF (as2=1) i ((i1 != 1) lub (i2 !=1) lub (i3!=1)) THEN (O4=1) ELSE (O4=0)

Jeżeli mam tylko jedno warunek że jest uzborjona strefa  i tylko jedno wejście to wszytko działa (zdjęcie 1)
Ale gdy dodam kolejne wejścia to już nie działa. Nawet jeżeli strefa jest rozbrojona to przy naruszaniu wejścia 2 lub 3 załącza się wyjście 4 a nie powinno.

Czy ktoś może mi pomóc jak to można poprawić żeby to działo ?

robertm

Wszystko działa poprawnie ponieważ, tak jak Pan napisał, warunek jest taki :
IF (as2=1) i ((i1 != 1) lub (i2 !=1) lub (i3!=1)) THEN (O4=1) ELSE (O4=0)

Natomiast tworząc warunek z kreatora nie ma możliwości dodania nawiasów - w podglądnie skryptu jak Pan zobaczy jest następujacy zapis:

if(as2==1&&I1!=1||I2!=1||I3!=1){     
O4=1;                         
} else {                                                 
O4=0;
};


Może Pan się przełączyć na edytor tekstowy i dodać nawiasy:

if(as2==1&&(I1!=1||I2!=1||I3!=1)){     
O4=1;                         
} else {                                                 
O4=0;
};

Warunek jest równiez do wykonania w kreatorze - rozwiązanie w załączniku.


garzew2

Dziękuje za odpowiedź.
Mam jeszcze jedno pytanie. Trochę się bawię przez edytor tekstowy skryptu. I napisałem taki kod:

int as1;   
int as2;
int I1;
int I2;
int I3;
int I4;
int O4;     
int O5;
int M1;
int M2; 
main(){
gbenv();
O4=geto(4);   
O5=geto(5); 
while(1){
gbenv();
I1=geti(1);
I2=geti(2);
I3=geti(3);
I4=geti(4);
O4=geto(4);   
O5=geto(5);     
if(as1==1&&(I1!=1||I2!=1)){
M1=1;
} else {
M1=0;
}; 
if(as2==1&&(I3!=1||I4!=1)){
M2=1;
} else {
M2=0;
};     
O4=blnk(0,M1,0,3);
O5=blnk(1,M2,0,3);
seto(4,O4);
seto(5,O5); 
};
};

Drugi blinker mi nie działał. Dopiero jak przypadkiem się przełączyłem w kreatora logiki i w zakładce przekaźniki czasowe dodałem drugi blinker (puste pole bez żadnych danych), i potem przełączyłem się z powrotem do edytora tekstowego i wkleiłem ten kod to wszytko zadziałało.
Czy rzeczywiście tak trzeba robić czy może w kodzie powinna być jeszcze jakaś dodatkowa linijka kodu?

robertm

Nie  ma potrzeby ustawiania czegokolwiek w kreatorze.
Urządzenia analizują powstały lub napisany kod skryptu.
Jeżeli jest prawidłowy  -powinien działać.