'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.

Wiadomości - oley

Strony: [1]
1
 Nadal nie rozwiązałem problemu ;(
Na razie doszedłem do tego, że w pliku visu-1.js wrzuciłem:

document.cookie = 'username='+data[0] ;

a w pliku index.php w miejscu gdzie ma się wyświetlić dana wartość pobrana ze sterownika
  <?php
if ( ! empty( $_COOKIE['username'] ) ) {
            
                echo "Hi " . $_COOKIE['username']; // Outputs : Hi John Doe
               
             }
 ?>


Wszystko niby działa problem pojawia się taki, że to zrobiłem na ciasteczkach i jak sterownik zmieni wartość to u mnie na stronie nic się nie zmieni do ponownego odświeżenia strony. Generalnie mogę ustawić cykliczne odświeżanie strony, ale pewnie jest na to lepszy sposób niż ciasteczka.

2
Generalnie chodzi mi o to, że mam np coś takiego:

   <div class="row">
            <div class="col-xl-3 col-sm-6 mb-3">
              <div class="card text-white bg-primary o-hidden h-100">
                <div class="card-body">
                  <div class="card-body-icon">
                    <i class="fas fa-fw fa-comments"></i>
                  </div>
                  <div class="mr-5"> Ilość świateł: ??????????????????</div>
         
                </div>
               
              </div>
            </div>
                  </span>
                </a>
              </div>
            </div>

no właśnie i jak w miejsce ??????????? wsadzić tą ilość zaczytaną ze sterownika ??


3
Jak zliczane i potem wyświetlane są np. ilości zapalonych świateł ?? Czy zlicza to sterownik i wysyła konkretną wartość czy robione jest to na poziomie PHP. Można dostać przykład jak zrobić taki widget który będzie wyświetlał jakąś wartość ??

4
Tematy ogólne / Odp: oley- kolejny projekt
« dnia: Lutego 06, 2013, 03:53:30 pm »
Więcej już nie udało mi się uprościć. Myślę, że i tak wygląda to o niebo lepiej niż poprzednio i w takiej formie narazie zostawiam. Może jak już zamieszkam w domku i będe miał czas długimi zimowymi wieczorami to coś jeszcze poprzerabiam.

Zacząłem myśleć nad roletami i jakoś nie bardzo mogę porozumieć się z gotowym bloczkiem z biblioteki bulding. Zauważyłem, że parametr zliczający pozycję nie zabezpiecza rolety przed wyłączeniem jej w skrajnych warunkach np. gdy jest max otwarta i dam otwieranie to i tak próbuje ją otworzyć mimo, iż ilość impulsów jest 0 (skrajnie otwarta)
Bawił się ktoś z tym bloczkiem ??

Zaczynam zastanawiać się nad napisaniem własnej procedury obsługi rolet i może to zabrzmi jak "wyważenie otwartych drzwi" uważam, że ja sam najlepiej wiem jak moja roleta ma działać. Nie wiem jeszcze jak robi się samodzielne bloczki ale na razie spróbuję napisać jakiś kawałek kodu działającego na roletach a potem się zobaczy.

Wrzucam jeszcze kod do obsługi mojego przedpokoju może komuś się przyda:


IF(godzina=godzina_wylacz ) THEN
blokuj_swiatlo:=TRUE;
END_IF
IF(godzina=godzina_wlacz) THEN
blokuj_swiatlo:=FALSE;
END_IF

przedpokoj_zwykle(xSwitch:=w_przedpokoj OR wylacz_ton_przedpokoj.Q);(* Fb_Click  daje impuls na wysciu rozpoznaje 1 lub 2 klikniecia*)
przedpokoj_pojedyncze(xSwitch:= przedpokoj_zwykle.xSingle  );         (* zwykly wlacznik podtrzymujacy ten do swiatla gornego*)
przedpokoj_podwojne(xSwitch:= przedpokoj_zwykle.xDouble OR wylacz_ton_przedpokoj2.Q ); (* jw ten do obrysowek*)

s_przedpokoj:=przedpokoj_pojedyncze.xActuator;  (*wyjscie na swiatlo gorne*)
s_obrysowki_dol:=przedpokoj_podwojne.xActuator; (*wyjscie na obrysowki*)
dioda_przedpokoj:=przedpokoj_pojedyncze.xActuator OR przedpokoj_podwojne.xActuator; (*wyjscie na diody wyzwalane 1 or dwoma klikami*)

               (*-------------------------------------LICZNIKI WYLACZAJACE SWIATLO_____________________*)
(*   to jest odlicznie dla zwyklego swiatla *)
przedpokoj_TON(IN := przedpokoj_pojedyncze.xActuator , PT:= T#10s);  (*licznik*)
wylacz_ton_przedpokoj(CLK:=przedpokoj_TON.Q);  (* zbocze zostaje wyzwolone przez licznik przedpokoj_TON.Q *)
(*  to jest licznik obrysowek*)
przedpokoj_TON2(IN := przedpokoj_podwojne.xActuator , PT:= T#10s);
wylacz_ton_przedpokoj2(CLK:=przedpokoj_TON2.Q);
                                (*-----------------------------------------------------------------------------------------------------------------------*)

IF(przedpokoj_pojedyncze.xActuator=FALSE AND przedpokoj_podwojne.xActuator=FALSE) THEN (*jezeli swiatlo gorne sie nie swieci*)
   IF(blokuj_swiatlo=FALSE) THEN                            (*jezeli nie jest godzina nocna*)

   przedpokoj(CLK:=r_przedpokoj );    (*czujnik ruchu wyzwala  zbocze*)
   przedpokoj_off_triger(CLK:=r_przedpokoj); (*zbocze gaszace swiatlo zbocze opadajace tutaj ustawienia czujki ruchu decyduja jak dlugo ma sie swiecic swiatlo*)
   przedpokoj_sema(CLAIM:=przedpokoj.Q,RELEASE:=przedpokoj_off_triger.Q);
   s_przedpokoj:=przedpokoj_sema.BUSY;

   END_IF

IF(przedpokoj_podwojne.xActuator=FALSE) THEN
   IF(blokuj_swiatlo=TRUE) THEN
   przedpokoj(CLK:=r_przedpokoj );  (*czujnik ruchu wyzwala  zbocze*)
   przedpokoj_off_triger(CLK:=r_przedpokoj); (*zbocze gaszace swiatlo zbocze opadajace tutaj ustawienia czujki ruchu decyduja jak dlugo ma sie swiecic swiatlo*)
   przedpokoj_sema(CLAIM:=przedpokoj.Q,RELEASE:=przedpokoj_off_triger.Q);
   s_obrysowki_dol:=przedpokoj_sema.BUSY;
   END_IF
END_IF
END_IF


5
Tematy ogólne / Odp: oley- kolejny projekt
« dnia: Stycznia 31, 2013, 03:43:13 pm »
To co piszesz brzmi bardzo rozsądnie i zgadzam się z tobą. Mój kod chodź działający jest mocno zamotany.
Ale uściślając nie korzystanie z IF-ów ma na celu ład i harmonię programu a nie jakieś techniczne (elektroniczne) wytłumaczenie np. wariowaniem przekaźników wyjściowych czy czymś takim ????

6
Tematy ogólne / Odp: oley- kolejny projekt
« dnia: Stycznia 31, 2013, 02:13:56 am »
dzięki Piotrze za wskazówki. Już myślałem, że napisałem konkretny program a tu masz :D przeróbka wszystkiego.
Zabieram się od razu za analizę Twojego kodu.
Zastanawia mnie jedynie dla czego jesteś takim przeciwnikiem funkcji IF ?? wydaje mi się, że jak by ta funkcja była niepoprawna z punktu widzenia sterownika nie wprowadzono by jej w kompilatorze. Mogę się mylić, ale napisz skąd twoja niechęć do if-ów. Czy masz pewność, że w gotowych bloczkach których używasz nie ma ich gdzieś w środku? Po ostatniej rozmowie z tobą na priv o tych funkcjach starałem się ich nie używać, ale jest to dla mnie tak odruchowe jak oddychanie i ciężko mi się z nimi pożegnać :D jedynie co to pilnuję (w miarę możliwości) aby nie używać tych funkcji bezpośrednio przy wyjściach np. IF warunek then %q0.0:=true;  Aczkolwiek nie do końca rozumiem dla czego nie powinno się tak robić.

Dzięki za twój kod zaraz zabieram się za rozgryzanie wszystkiego pewnie niedługo się pochwalę co i jak mi z nim wyszło.

7
Tematy ogólne / Odp: oley- kolejny projekt
« dnia: Stycznia 30, 2013, 11:56:43 am »
Słuszna uwaga. Zupełnie zapomniałem o tym a bez tego nic nie wynika  :-[

               (* przedpokoj na dole *)

      wylacz_przedpokoj: BOOL; (*zmienna pomocnicza powoduje wylaczanie latching_relay (swiatlo zwykle z wlacznika) Zmienna jest true jako impuls od licznika TON *)
   wylacz_ton_przedpokoj: R_TRIG;  (* zbocze wyzwalane przez TON umozliwia zastosowanie warunku if jak ton zliczy robi z "tego.q" true *)
   wylacz_ton_przedpokoj2: R_TRIG;  (* zbocze wyzwalane przez TON umozliwia zastosowanie warunku if jak ton zliczy robi z "tego.q" true *)
   przedpokoj_TON:TON; (*licznik*)
   przedpokoj_TON2:TON; (*licznik dla obrysowek*)
   przedpokoj_pojedyncze:Fb_LatchingRelay;
   przedpokoj_podwojne:Fb_LatchingRelay;
   przedpokoj_zwykle:Fb_Click;
   przedpokoj:R_TRIG;
   przedpokoj_off_triger:F_TRIG;
   przedpokoj_sema:SEMA;
   obrysowki_przedpokoj:Fb_LatchingRelay;
   dioda_przedpokoj_pojedyncze: BOOL;
   dioda_przedpokoj_podwojne: BOOL;

   godzina_poczatek:STRING;
   godzina_koniec:STRING;
   blokuj_swiatlo:BOOL; (*miedzy okreslona godzina zablokuje swiatlo gorne*)

   (*    --------------------------------------------------- *)

8
Tematy ogólne / Odp: oley- kolejny projekt
« dnia: Stycznia 30, 2013, 02:19:36 am »
Nie jestem jakimś wielkim programistą ale jakoś pomalutku rezam program. Jak obiecałem dzielę się moimi wypocinami może komuś się przydadzą.
Na początek prosta rzecz czyli zapalenie pojedynczego światła. Włączniki są zwierne czyli tzw. dzwonkowe. Nie ma tu filozofii wykorzystujemy gotowy bloczek z biblioteki „bulding”
Fb_LatchingRelay .

swiatlo_zew_drzwi(xSwitch:=w_swiatlo_zew_drzwi); s_zew_drzwi:=swiatlo_zew_drzwi.xActuator;

gdzie:
swiatlo_zew_drzwi –nazwa bloku
w_swiatlo_zew_drzwi- wejście kanapki np. %I0.0;
s_zew_drzwi- wyjście kanapki np. %Q0.0
swiatlo_zew_drzwi.xActuator- wyjscie z bloku

To może teraz troszkę trudniej.

W przedpokoju mam:
- Światło górne
- Światło dolne (obrysówki)
- Dioda w włączniku (sygnalizować będzie wyzwolenie z włacznika)
- czujnik ruchu (ciemna kulka na suficie)
- dwa włączniki.

Jak to ma działać:

Czujnik ruchu włącza światło górne. Pomiędzy godzina 23:00-5:00 czujnik ruchu zalącza jedynie obrysówki.
Włączniki spięte są równolegle i wchodzą na jedno wejście.
Włącznik rozróżnia kliknięcia.
Jedno kliknięcie załącza światło górne oraz diode LED (ponowne kliknięcie wylączy światło)
Dwa kliknięcia załącza światło dolne oraz LED
Kliknięcia są priorytetowe więc olewany jest w tym czasie czujnik ruchu.
Dodatkowo po kliknięciu załącza się licznik i po np.godzinie wyłączy się światło górne a po np. 3h światło dolne (to taka wersja dla zapominalskich nie musze wyłączać światła liczniki zrobią to za mnie ) Jak tylko światło wyłączy się od licznika czujnik ruchu przejmuje z powrotem kontrole.


(* ta czesc odpowiada za sprawdzenie czy ma blokowac swiatlo gorne 23-5*)
IF(godzina_rtc=godzina_poczatek ) THEN
blokuj_swiatlo:=TRUE;
END_IF
IF(godzina_rtc=godzina_koniec) THEN
blokuj_swiatlo:=FALSE;
END_IF
(*---------------------------------------------------------*)

przedpokoj_zwykle(xSwitch:=w_przedpokoj OR wylacz_przedpokoj);     (*rozroznia jedno lub 2 klikniecia daje impuls*)
przedpokoj_pojedyncze(xSwitch:= przedpokoj_zwykle.xSingle );   (*jezeli bylo jedno klikniecie podtrzymujemy to bloczkieb fb daje ciaglosc do nastepnego klikniecia*)
IF(przedpokoj_pojedyncze.xActuator=TRUE ) THEN           (*jezeli jest pojedynczy impuls to wystaw na diode w wlaczniku true*)
dioda_przedpokoj:=TRUE;

ELSE
dioda_przedpokoj:=FALSE;

END_IF
s_przedpokoj:=przedpokoj_pojedyncze.xActuator;   (* jezeli jest pojedynczy impuls zapal rownierz swiatlo na przedpokoju "ustraw true*)


przedpokoj_podwojne(xSwitch:= przedpokoj_zwykle.xDouble ); (* analogocznie podtrzymanie 2 klikniec*)
IF(przedpokoj_podwojne.xActuator=TRUE  ) THEN  (*jezeli jest podwojny impuls i nie sa juz zapalone diody to zapal diody*)
dioda_przedpokoj:=TRUE;

END_IF
IF(przedpokoj_podwojne.xActuator=FALSE AND  przedpokoj_pojedyncze.xActuator=FALSE ) THEN
dioda_przedpokoj:=FALSE;

END_IF
s_obrysowki_dol:=przedpokoj_podwojne.xActuator;  (*jezeli jest podwojny zapal obrysowki*)

(*   to jest odlicznie dla zwyklego swiatla *)
przedpokoj_TON(IN := przedpokoj_pojedyncze.xActuator , PT:= T#10s); (*przedpokoj_TON(IN := przedpokoj_zwykle.xActuator, PT:= T#35s);*)
wylacz_ton_przedpokoj(CLK:=przedpokoj_TON.Q);
IF(wylacz_ton_przedpokoj.Q=TRUE) THEN
wylacz_przedpokoj:=TRUE;
ELSE
wylacz_przedpokoj:=FALSE;
END_IF
(*  to jest licznik obrysowek*)
przedpokoj_TON2(IN := przedpokoj_podwojne.xActuator , PT:= T#10s); (*przedpokoj_TON(IN := przedpokoj_zwykle.xActuator, PT:= T#35s);*)


wylacz_ton_przedpokoj2(CLK:=przedpokoj_TON2.Q);
IF(wylacz_ton_przedpokoj2.Q=TRUE) THEN
przedpokoj_zwykle(xSwitch:=TRUE);
przedpokoj_zwykle(xSwitch:=FALSE);
przedpokoj_zwykle(xSwitch:=TRUE);

END_IF

IF(przedpokoj_pojedyncze.xActuator=FALSE AND przedpokoj_podwojne.xActuator=FALSE) THEN (*IF(przedpokoj_zwykle.xActuator=FALSE) THEN*)
   IF(blokuj_swiatlo=FALSE) THEN

   przedpokoj(CLK:=r_przedpokoj );
   przedpokoj_off_triger(CLK:=r_przedpokoj); (*gasi swiatlo*)
   przedpokoj_sema(CLAIM:=przedpokoj.Q,RELEASE:=przedpokoj_off_triger.Q);
   s_przedpokoj:=przedpokoj_sema.BUSY;

   END_IF


   IF(blokuj_swiatlo=TRUE) THEN
   przedpokoj(CLK:=r_przedpokoj );
   przedpokoj_off_triger(CLK:=r_przedpokoj); (*gasi swiatlo*)
   przedpokoj_sema(CLAIM:=przedpokoj.Q,RELEASE:=przedpokoj_off_triger.Q);
   s_obrysowki_dol:=przedpokoj_sema.BUSY;
   END_IF

END_IF

Pewnie wielu znajdzie masę błędów i niedociągnięć, ale na tym etapie na którym jestem ta cześć programu przetestowana i działa poprawnie. Może są w niej błędy merytoryczne ale to co zamierzałem uzyskać działa. Wszelkie sugestie mile widziane.

9
Sterowanie i Wizualizacje / Odp: Wago 750-880 problem z wizualizacja
« dnia: Stycznia 29, 2013, 03:58:07 pm »
Czy poradziłeś sobie z problemem ??

10
Tematy ogólne / oley- kolejny projekt
« dnia: Stycznia 29, 2013, 12:16:19 pm »
Zawsze marzyłem o inteligentnym domu. Pewnego dnia z małżonką postanowiliśmy, że się budujemy. Biorąc pod uwagę, że będzie to nowy budynek to dla czego nie inteligentny. Troszkę miałem obawy ale co tam raz się żyje czemu nie spróbować.
Wybór sterownika był prosty od razu postanowiłem, że będzie to WAGO prze de wszystkim cena do możliwości jest moim zdaniem najlepsza. Po drugie "kanapki" to super rozwiązanie jak padnie coś wymieniam kanapkę a nie cały sterownik. Możliwości rozbudowy są ogromne a do tego ETHERNET cóż można chcieć więcej ;)
 Może teraz troszkę o budynku:
Z założenia sterownik ma obsługiwać oświetlenie i ew. czujniki. Nie odważyłem się na podłączanie do sterownika gniazdek. Tak więc obwody gniazdek są tradycyjne.
Może powiedzenie "nie odważyłem się " jest zbyt mocne po prostu nie uważam aby było mi to potrzebne.
Do włączników oświetlenia ciągnąłem kabel 3x1,5 + UTP tak więc zawsze zostawiłem sobie możliwość podłączenia oświetlenia w sposób tradycyjny, z tą różnicą, że kable z włączników schodzą bezpośrednio do rozdzielni. W planach mam podłączenie 24V pod kabel 3x1,5 a utp będzie na czujniki, diody itp.
Włączniki rolet mają tylko kable UTP a zasilanie idzie z rozdzielni tak więc tu jedyna opcja sterowania to sterownik.
Każdy pokój ma gniazdo eternetowe schodzące oczywiście do rozdzielni.
W łazienkach dodatkowo poprowadzony kabel do czujek rozlanej wody (w razie pękniętej rurki sterownik odetnie wodę)
Nie przewidziałem kabla na wyświetlacz gdyż przy cenie tabletów z androidem uważam iż taki mobilny wyświetlacz będzie lepszy niż przemysłowy wyświetlacz do którego trzeba podejść.

z gratów jakie już mam to (będzie tego więcej na razie brak funduszy):
Sterownik - WAGO 750-841
Rozdzielnica - BP-O-800/12-C moeller-a + 3x BPZ-DINR35-800-T
Pozostałe elementy:
750-430 x8
750-402 x4
750-400 x3
-----------
750-530 x7
750-512 x3
Przekaźniki - 788-304
Zasilacze - 787-612, 787-602
Centrala alarmu - Satel Integra 64.

fotka rozdzielnicy na razie wygląda tak:
http://www.edom-plc.pl/images/stories/e-dom/L_SZ/6.jpg

na wiosnę dalsze prace.

 Na razie dłubie program, idzie wolno ale małymi kroczkami idę do celu.
Dla zainteresowanych niedługo umieszczę kawałki moich wypocin. Nie jestem programistą profesjonalnym, dopiero wszystkiego się uczę więc może moje moje kawałki programów pomogą początkującym(takim jak ja).
Oczywiście od razu pragnę podziękować Adminowi który jest bardzo pomocny w wielu problemach.

Strony: [1]