Sterownik astronomiczny - sterowanie roletami logika

Zaczęty przez sq9ord, Październik 16, 2016, 14:56:39

Poprzedni wątek - Następny wątek

sq9ord

Witam Potrzebuje pomocy w konfiguracji (LogicRrocessor) OptimaGSM ze sterownikiem astronomicznym który ma sterować roletą.
Założenia:
Sterownik podłączony pod wejście int3 podaje tylko 2 stany, wysoki i niski zależny od pory dnia.
Wyjście OUT7 steruje zamykaniem rolety
Wyjście OUT8 steruje otwieraniem rolety

Po otrzymaniu sygnału na wejściu int3 (zbocze narastające ) wyzwoli impuls 2s na wyjściu out7 natomiast po otrzymaniu sygnału na int3 (zbocze opadające)
wyzwoli impuls 2s na wyjściu out8.

robertm

#1
Witam,
Na zrzutach rozwiązanie.
Dodatkowo poniżej kod skryptu:
int I3;
int I3p;
int M1;
int M2;
int O7;
int O8;
main(){
gbenv();
I3p=geti(3);
O7=geto(7);
O8=geto(8);
while(1){
gbenv();
I3=geti(3);
O7=geto(7);
O8=geto(8);
if((I3p==0&&I3==1)){
M1=1;
} else {
M1=0;
};                                         
if((I3p==1&&I3==0)){
M2=1;
} else {                                               
M2=0;
};
O7=pons(0,M1,0,2);
O8=pons(1,M2,0,2);
I3p=I3;
seto(7,O7);
seto(8,O8);
};
};
             

sq9ord


sq9ord

Czy jest możliwość  dodania logiki aby w sobotę i niedziele roleta (out8) otwierała się o wyznaczonej porze np 8:00 ? (sterownik astronomiczny niestety nie  posiada takiej funkcji ). Wiem, że można ustawić TIMER ale LogicProcessor ma chyba wyższy priorytet stąd moje pytanie..

robertm

Można w LP użyć wskaźników timerów.

tk1÷tk4 wskaźniki timerów/kalendarzy, przyjmuje wartość binarną 0 lub 1

1= timer załączony (ON->OFF)
0= timer wyłączony (OFF->ON).

sq9ord

Super :) problem z tym ze LogicProcessor to dla mnie "czarna magia"..
Prosił bym o przykład jak i co pozmieniać ;)

robertm

Witam,
Przykład wykorzystania timerów w LP jest w nocie aplikacyjnej:  an_optimagsm_notkaserwisowa.pdf


sq9ord

Powyższy schemat nie bardzo pasuje do mojego pytania..
od poniedziałku do piątku sterowaniem roletą (otwieranie jak i zamykanie)  sterowanie przez sterownik astronomiczny.
W sobotę i niedziele TIMER ma tylko otwierać roletę o godzinie 8:00 natomiast zamykaniem ma być realizowane przez sterownik astronomiczny.

robertm

Nie jest to schemat do Pana pytania a przykład zastosowania danej funkcji.
Nie jesteśmy wstanie przygotować gotowej konfiguracji do każdego zastosowania, staramy się robić różne przykłady i już instalator musi dostosować konfigurację w szczegółach do danego obiektu.
Niemniej przygotowałem dla Pana rozwiązanie - opis znajduje się w nocie aplikacyjnej: an_optimagsm_sterowanie_roletami_timer_zegar_astronomiczny.pdf

Założenia:

Sterowanie roletami ma się odbywać poprzez załączenie wyjść na 3 sekundy 
O7 – otwarcie rolet
O8 – zamkniecie rolet

Rolety od poniedziałku do piątku powinny się otwierać wg. Stanu z wyjścia zegara astronomicznego gdzie stan wysoki (1) to dzień a stan niski (0) to noc.
Sygnał z zegara jest podłączony do wejścia I3.

W sobotę oraz niedziele niezależnie od zegara astronomicznego  otwarcie rolet ma nastąpić automatycznie o godzinie 8:00

Dodatkowo w każdej chwili ma być możliwe ,,ręczne" zamkniecie lub otwarcie rolet.

sq9ord

#9
No cóż.. powiem tak.. dziękuje za  zmuszenie mnie do logicznego myślenia bo w/w skrypt niestety nie miał prawa działać dużo błędów.
Mój wygląda następująco
int I2;
int I2p;
int M1;
int M2;
int O5;
int O6;
int tk1;
int tk2;
main(){
gbenv();
I2p=geti(2);
O5=geto(5);
O6=geto(6);
while(1){
gbenv();
I2=geti(2);
O5=geto(5);
O6=geto(6);
if((I2p==0&&I2==1)){
M1=1;
} else {
M1=0;
};
if((I2p==1&&I2==0)&&tk1==1){
M2=1;
} else {
M2=0;
};
if(tk2==1){
M2=1;
} else {
M2=0;
};
O6=pons(0,M1,0,1);
O5=pons(1,M2,0,1);
I2p=I2;
seto(5,O5);
seto(6,O6);
};
};


ustawienia timerów:

TIMER1 ON   23:59:59 Niedziela
             OFF 23:59:59 Piątek

TIMER2 ON   08:00:00 Sobota
             OFF 08:00:01 Sobota
             ON  08:00:00 Niedziela
             ON  08:00:01 Niedziela

Działa tak jak chciałem tj od poniedziałku do piątku sterowanie on-off rolety odbywa się przez sterownik astronomiczny natomiast sobota i niedziela sterowana jest przez timer otwierając roletę o godzinie 8:00.
Poza tym sterowanie z panela TPR,SMS i WWW działa bez problemowo.

EDIT:
wejście sterownika podpięte pod I2
wyjścia do sterowania rolet O5 i O6
czas wysterowania wyjścia O5,O6 zmieniony na 1s

robertm

#10
Konfiguracja opisana w nocie aplikacyjnej została przetestowana i działa.
W nocie dodany jest jeszcze warunek ręcznego otwierania zamykania rolet.

Gratuluje - idzie Panu bardzo dobrze ! Jednak skrypt który Pan przedstawił nie może działać.
Instrukcje wykonywane są w kolejności dlatego warunek wysterowania wyjścia O5 poprzez opadające zbocze I2 nigdy nie zostanie wykonany ponieważ w kolejnych linijkach przed "pons" M2 zostanie nadpisane na =0 przez warunek tk2

if((I2p==1&&I2==0)&&tk1==1){
M2=1;
} else {
M2=0;
};
if(tk2==1){
M2=1;
} else {
M2=0;

};
O6=pons(0,M1,0,1);
O5=pons(1,M2,0,1);

Sterowanie poprzez www, sms i aplikacje mobilne również nie może działać na Pana skrypcie. Ponieważ LP ma wyższy priorytet i inne sterowanie będzie natychmiast nadpisane przez logike.
Sterowanie to trzeba wykryć w LP i obsłużyć.

sq9ord

#11
Obecna konfiguracja i jest ok :)

int I2;
int I2p;
int I5;
int I5p;
int I6;
int I6p;
int M1;
int M2;
int M3;
int O5;
int O6;
int tk1;
int tk2;
int tk2p;
main(){
gbenv();
I2p=geti(2);
I5p=geti(5);
I6p=geti(6);
tk2p=tk2;O5=geto(5);
O6=geto(6);
while(1){
gbenv();
I2=geti(2);
I5=geti(5);
I6=geti(6);
O5=geto(5);
O6=geto(6);
if((I2p==1&&I2==0)&&tk1==0){
M1=1;
} else {
M1=0;
};
if((I2p==0&&I2==1)||(I6p==0&&I6==1)){
M2=1;
} else {
M2=0;
};
if(M1==1||(tk2p==0&&tk2==1)||(I5p==0&&I5==1)){
M3=1;
} else {
M3=0;
};
O5=pons(0,M3,O6,1);
O6=pons(1,M2,O5,1);
I2p=I2;I5p=I5;I6p=I6;tk2p=tk2;
seto(5,O5);
seto(6,O6);
};
};

Dzięki Wielkie za pomoc ;)