Witamy, Gość. Zaloguj się lub zarejestruj.
Aktualności:
Forum Sterowniki PLC Inteligentny dom > Inteligentny dom funkcjonalności >

Ladder i procedury? Dlaczego nie!

Strony: [1]
Drukuj
Autor Wątek: Ladder i procedury? Dlaczego nie!  (Przeczytany 10824 razy)
ryskasz20
Full Member
***
Wiadomości: 51


Ladder i procedury? Dlaczego nie!
: Wrzesień 22, 2012, 21:22:36 pm »

Witam,
Ponieważ jest to mój pierwszy post pragnę się przedstawić i przywitać z hobbystyczną bracią inteligentnego domu.   Co do automatyki budynku i inteligentnego domu to mam na przestrzeni ostatnich lat kilka realizacji.  I to w różnych systemach - ale to działalność marginalna, raczej z ciekawości i dodatkowa. Do tej pory sporadycznie programowałem i używałem w nieskomplikowanych aplikacjach sterowniki UNITRONIC. Dodam, że z drabinką FATEka teraz mam dopiero pierwsze kontakty.  Co do różnicy w oprogramowaniu: tu i tu Ladder, niby podobne są podstawowe instrukcje ale  diabeł  tkwi w szczegółach. Pierwsze zdziwienie: niektóre sekwencje drabinki dobrze działające w Unitronicsie wcale nie nie działają na Fateku!! Dodam jeszcze, że są to podstawowe w moich programach sekwencje służące do oprogramowania wejść i  przycisków.  W  Unitronicsie cztery styki  i mam przerzutnik Flip-flop z wejściem SET i RESET!!!  W tym temacie tu – kicha . Podobnie timery… prawie 300 funkcji a tu tylko w zasadzie 1 timer…  A co do funkcji: operacje na 16 i 32 bitach a na 8 ?   Brak.  Choć to akurat nie przeszkadza. Przestaję  narzekać. Każdy /producent, oprogramowanie itp. / ma swoje ale. A co do moich programów: programowałem np. aplikacje typu sterowanie dmuchawami napowietrzania w małej oczyszczalni ścieków, sterowanie wentylacją w myjni samochodów, jakaś mała elektrownia wodna / no ale nie samodzielnie/ ,  a  i nawet  jeden letni domek „chodzi „ od 5 lat na sterowniku Unitronicsa.  Ten  program  jest nieskomplikowany – proste sterowanie oświetleniem 16 punktów + jakieś dodatki typu sterowanie wyłącznikiem zmierzchowym, przyjazd i wyjazd z domu.. itp.  Ale nawet w tak prostym i nie rozbudowanym programie jest wiele powtarzających się sekwencji  instrukcji drabinki. Chciałoby się mieć je w procedurze… wywoływanej z różnych miejsc drabinki.  Dlaczego nie ma takich gotowych procedur?  Właśnie.. bez wnikania w szczegóły wynika to z zasady pracy sterownika w czasie rzeczywistym. A przecież  bardzo kuszące jest używanie podprogramów gdy dłuższe ciągi instrukcji są często powielane. A tak jest w programach do inteligentnego domu – szczególnie bardziej zaawansowane oprogramowanie przycisków, funkcji centralnych itp. Niestety – dotyczy to też  Fateka – miła  z nazwy funkcja   procedury   CALL  etykieta,    LAB etykieta  …….  RTS   poza uporządkowaniem programu poprzez przeniesienie jego fragmentu do nowej zakładki – pozornie-  nic nie wnosi. Przyzwyczajenia z programowania algorytmicznego gdzie programista  steruje pętlą programu tu na nic się zdają. Ale po jakimś wstępnym zrozumieniu i przyzwyczajeniu się do „inności” oprogramowania Fateka,  gdy już opanowałem ten zakres co w poprzednim sterowniku, postanowiłem uporać się z procedurami wywoływanymi  wielokrotnie.  Bo kurna jest to potrzebne np. do oprogramowania przycisków /klik, dwuklik, trzyklik, itp./, albo funkcji centralnych -  klik to wywołanie np. sceny świetlnej a długi klik to jej np. zaprogramowanie.  Przewertowałem między innymi to forum aby znaleźć gotowca / a cooo? najlepiej  iść  na łatwiznę… jakby się dało/. Ale  niestety go nie znalazłem. Przykre. Również nie znalazłem na forach pomysłu jak to rozwiązać.  Albo dobrze nie szukałem. Po wielu przemyśleniach myślę, że jednak jest niezłe rozwiązanie „wielokrotnego” wywoływania procedury. Piszę w cudzysłowie bo mimo wielokrotnego użycia procedurę wywołuję  w programie tylko raz…
Wracamy do instrukcji CALL etykieta   LAB etykieta  … program…..  RTS.  Czyli wywołanie procedury.
Rozwiązaniem problemu wywoływania podprogramu  i  jego powrót z przetworzonymi danymi  tylko do funkcji która potrzebuje te dane - jest zastosowanie tzw.  FLAGI.
 FLAGA to jest sygnalizacja w programie jakiegoś stanu  poprzez np. ustawienie konkretnego bitu w rejestrze oznaczonym przez programistę jako FLAGA. I nie trzeba znać adresata wiadomości. Jest to idealne narzędzie dla drabinki. Działanie programu z jednym  rejestrem FLAGA:
1.   Nadawca  informacji w momencie wystąpienia przyczyny działania np. pobudzenia wejścia ustawia konkretny, swój  bit  w rejestrze FLAGA ,  dostarcza dane i to jest jego zadanie. Inni potencjalni nadawcy informacji nie mają powodu ustawienia swojej FLAGI  bo nie maja działania na swoim wejściu. / a gdy mają działanie to zasada kto pierwszy ten lepszy, pozostali nie maja prawa głosu do czasu jak flaga zostanie wyzerowana/
2.   Podprogram wykonujący główną robotę  nie wie kto mu dostarcza dane i nie wie kto je odbiera.  Bo to określa przecież stan FLAGI,  a w podprogramie stanu FLAGI się nie sprawdza bo i po co?.  Podprogram  nie musi  tego wiedzieć – jest tylko od permanentnej roboty przetwarzania danych.
3.    I tak samo konkretny  odbiorca tej już przetworzonej informacji /tylko on wie że jest do niego kierowana poprzez ustawiony bit FLAGI/   nie musi  wiedzieć kto mu ją dostarcza, ale ponieważ jest zaadresowany, pobiera dane i  je wykorzystuje.  Pozostali odbiorcy stwierdzając, ze ustawiona flaga ich nie dotyczy  informacje ignorują.
4.   Bardzo ważne: po wykonaniu ciągu instrukcji  fragmentu  z ustawioną flagą czyli po osiągnięciu finału tego fragmentu programu -  kasujemy rejestr FLAGI.  Bo przecież  teraz czekamy już na następną akcję przyciskami  i na następne ustawienie FLAGI  … itd.
5.   A na koniec  niestety duża ułomność tego rozwiązania:  dozwolone jest tylko w jednym czasie  ustawienie tylko jednego konkretnego bitu w rejestrze  FLAGA. W tym samym czasie możemy użyć tylko jednego pobudzenia wejścia lub programowo inne ignorować.
 I w  ten właśnie sposób możemy sterować  przesyłaniem danych do i  z podprogramu.
W załączeniu prymitywny programik dla sprawdzenia powyższego wywodu.  Krótki opis:                                   
WEJSCIE – nadawca informacji:
X0---3  - cztery wejścia które po pobudzeniu ustawiają odpowiednie,  swoje bity w rejestrze  FLAGA  /dla przejrzystości programu nie ma tu wyboru pierwszy-lepszy czyli niedopuszczalne jest pobudzenie jednoczesne  kilku wejść/
Procedura w podprogramie:
Najprostsza:  podstawia  z wejścia zmienną bitową do wyjścia  – tylko dla ilustracji działania. Jedna zmienna wejściowa i wyjściowa dla wszystkich klientów.
 Wyjście – odbiorca informacji
M0---3 – zmienne rozpoznające ustawienie „swojego” bitu we fladze i w zależności od stanu wejścia sterujące ustawieniem odpowiedniego wyjścia
Y0---3  - wyjścia przypisane do odpowiednich wejść
A na koniec kasowanie FLAGI.
Potem pokażę też program dla którego to całe zamieszanie/ już nie tak prosty/ dla obsługi funkcji centralnych: mianowicie scen świetlnych obsługiwanych przez procedurę. Załączę go w następnym poście może jeszcze dzisiaj. Program mi dobrze działa. Obsługuje w wersji DEMO 3 wejścia, 2 sceny świetlne i 1 funkcje ALL OFF. Docelowo ma być 8 wejść, 3 sceny, 1 ALL OFF bo taki mi potrzebny - zresztą  x3  - dla sterownika 60MA. Myślę, że do jutra się z nim uporam. Podstawowa trudność to oprogramowanie pierwszy-lepszy - nie mam jeszcze to rozpracowane - nie zajmowałem się na razie tym.
pozdrawiam Ryszard



* flaga.pdw (96.55 KB - pobrany 630 razy.)
* flaga.pdf (9.45 KB - pobrany 683 razy.)

ryskasz20
Full Member
***
Wiadomości: 51


Ladder i procedury? Dlaczego nie!
#1 : Wrzesień 23, 2012, 00:50:03 am »

witam
w załączeniu obiecany program. 3 wejścia/wyjścia flip-flop, 2 funkcje centralne/sceny świetlne, 1 funkcja Off ALL.  Niestety bez wyboru pierwszy-lepszy bo zbrakło czasu, może później. Program raczej poglądowy  na teraz bo docelowo / trochę klików i dodanie kilkunastu linii/ ma obsługiwać 8 we/wy, 3 fc, 1 alloff.
Ale właśnie ze względu na małą liczbę we/wy jednak bardzo użytkowy BOO: załączanie scen wyłącznikiem zmierzchowym, systemem alarmowym, domo/videofonem z kasetki przy furtce, wyłączanie oświetlenia zegarem /np. ustawienie sceny na niezapalenie lamp!/ itp
Opisy działania w komentarzach w programie.
pozdrawiam
Ryszard

* flaga_3we_2fc_1off.pdf (36.58 KB - pobrany 758 razy.)
* flaga_3we_2fc_1off.pdw (98.7 KB - pobrany 642 razy.)

ryskasz20
Full Member
***
Wiadomości: 51


Ladder i procedury? Dlaczego nie!
#2 : Wrzesień 23, 2012, 19:28:41 pm »

Witam,
Jeszcze informacja uzupełniająca do zamieszczonych programów.
Na razie dałem sobie spokój z implementacją pierwszy-lepszy pobudzeń na wejściach. Bo po dokładnej analizie i sprawdzeniu w symulatorze nie ma kolizji wejść. Programy: zarówno testowy jak i użytkowy działają poprawnie, tylko inny jest priorytet wykonania  najwyższy numer wygrywa. Czyli jak jednocześnie lub w trakcie wykonywania procedury pobudzone będzie wejście X0 i X2 to pobudzenie wejścia X0 będzie ignorowane a  program wykona się dla pobudzenia wejścia X2. 
pozdrawiam
Ryszard

ryskasz20
Full Member
***
Wiadomości: 51


Ladder i procedury? Dlaczego nie!
#3 : Wrzesień 30, 2012, 23:14:13 pm »

Witam,
Tak dla nie zawodowców / czyli takich jak ja - amatorskich użytkowników języka Ladder np. Fateka/ podam SWÓJ opis na czym polega programowanie przy pomocy tzw FLAGI. Bo ten sposób programowania już znam. W postaci bajki.    Ale bez urazy: bajki są też dla dorosłych całkiem ludzi...
OPIS bajki:
1. Mamy zamek, ma 3 kondygnacje, na każdym jest korytarz i jest 10 komnat
2. Trzeba w każdym sprawdzać czy jest ktoś z rycerzy - wtedy nic nie robimy , ale jak nie ma nikogo to sprawdzamy czy jest  zamknięte okno, bo jak jest otwarte to trzeba zamknąć.
3. Proste nie?
1 WARIANT  programowanie klasyczne:
pętla główna programu:
Wchodzimy na 1 kondygnację,
wchodzimy do korytarza:
komnata1 - pętla podprogramu: wchodzimy do komnaty, sprawdzamy warunki:  gdy okno jest zamknięte lub jest rycerz to powrót do programu 1 kondygnacji korytarza , jak okno otwarte wywołujemy podprogram zamykania okna - czekamy do zamknięcia okna i powrót do programu 1 kondygnacji korytarza - zadanie wykonane.
komnata2 - ..... itd
komnata3 - ..... itd
..
Wchodzimy na 2  kondygnację,
....
....
Wchodzimy na 3   kondygnację,
....
....
....
itd. 
Kończymy główną pętlę gdy sprawdzimy już wszystkie 3 kondygnacje - wtedy wykonujemy kolejny raz wszystko od początku - na okrągło.
DUŻO BEZPRODUKTYWNEJ CZASOWO ROBOTY dla komputera. A te sprawdzania trzeba dodać przecież do wykonywania głównych funkcji sterowniczych programu...

2 WARIANT  programowanie w PLC z użyciem FLAGi:
1. jw
2. jw
3. jw
4.Podprogram "komnatowy" sprawdza poszczególne komnaty zamku, zmiana komnaty  w podprogramie np. co 0,1 s / wystarczy../. Jak jest akcja, czyli brak rycerza a okno otwarte wystawia odpowiednią dla nr komnaty swoją FLAGĘ.
5. Podprogram główny w czasie między innymi ważnymi działaniami sprawdza czy jest "zapalona " jakaś FLAGA na każdym z 3 korytarzy. Jak nie to nic w tym temacie nie robi. Wtedy koncentruje swoje działania na innych funkcjach sterowniczych obiektu. Jak jest zapalona jakaś flaga  to "zleca" wykonanie czynności zamknięcia odpowiedniego okna.
Ten wariant jest prostszy, nie zwalnia pętli głównej programu, ma nadzorować przecież wejścia  i nie prowadzi do zawieszenia programu jakby np. zamykanie okna za długo trwało... /bo nie czeka na wykonanie podprogramu - zakończenia jego pętli/
Tak ułomnie opisuję działanie narzędzia programistycznego FLAGA.
Jak komuś to pomoże to OK. Jak nie trudno. Starałem się.
Mi takie podejście do programowania PLC dużo pomogło - łopatologicznie.
pozdrawiam
Ryszard

bogasman
Sr. Member
****
Wiadomości: 155


Ladder i procedury? Dlaczego nie!
#4 : Październik 01, 2012, 16:20:25 pm »

Dla mnie, jako początkującego, bardzo ciekawe jest to co piszesz, tym bardziej, że czeka mnie zaprogramowanie mojego mieszkania, a będzie tego całkiem sporo.. Dzięki za przykłady, ciekawi mnie implementacja pierwszy-lepszy.

ryskasz20
Full Member
***
Wiadomości: 51


Ladder i procedury? Dlaczego nie!
#5 : Październik 05, 2012, 22:39:37 pm »

Witam,
Niestety na razie nie zamieszczę programu pierwszy-lepszy  /bo też tak na szybko i z braku czasu nie mam na razie w tym temacie prostej koncepcji..  jak to zaimplementować tu, bo procedurę na sposób prymitywny czyli nieelegancki to mam .../. Ale ponieważ zamieszczone programy działają na zasadzie ostatni-lepszy to na razie uznaję ta zasadę.. / każda zasada dobra jak jest jakaś, nie? a na razie mi wystarczy/ wobec tego idę dalej....  Teraz zamieszczę tzw docelowy fragment programu dla funkcji centralnych: czyli  3 we fc programowalne, 1 we fc off, 7 we/wyjśc flip flop. Zamieszczam dlatego,  bo wydaje mi się, że tu dałem znacznie lepsze opisy jak to działa.
A co do programowania: to jest jakiś MÓJ subiektywny sposób. Poszczególne chwyty w  tym konkretnym temacie mój znajomy zaprogramował całkowicie inaczej -  i też działają dobrze . A przecież razem się zapoznawaliśmy z tą wersją Laddera....  Ta wersja Laddera umożliwia programowanie na różne sposoby.  Dlatego nie należy traktować tego przykładu jako jedyny słuszny..
Mi tu chodzi tylko o pokazanie jak wykorzystać pozytywnie tzw, procedury w Ladderze.
pozdrawiam
Ryszard

* flaga_7we_3fc_off.pdw (99.15 KB - pobrany 618 razy.)
* flaga_7we_3fc_off.pdf (52.31 KB - pobrany 662 razy.)

ryskasz20
Full Member
***
Wiadomości: 51


Ladder i procedury? Dlaczego nie!
#6 : Październik 08, 2012, 19:54:23 pm »

Witam,
załączam prosty programik - implementację zasady pierwszy-lepszy.  Przy okazji prostuję niedokładność w poprzednim poście: program nie działa wg zasady ostatni-lepszy tylko najwyższy numer wejścia- lepszy. Podobne ale jakże różne..
Załaczony programik nic nie robi tylko ilustruje jak oprogramować wejścia wg zasady : pierwszy lepszy z 3 wejść.
Działanie jest dosyć dokładnie opisane w programie. Oczywiście wejść może być do woli.. Wykorzystywany Rejestr jest 16-bitowy.  Ciekawym jest przypadek gdy np. wszystkie wejścia pobudzimy. Oczywiście jedno z nich jest pierwsze ale co będzie jak puścimy ten przycisk?  Proszę samemu sprawdzić w symulatorze - program działa przewidywalnie i nie powoduje kolizji wejść.
A tak na marginesie mam też pomysł jak to oprogramować całkowicie inaczej w tym Ladderze. Dużo funkcji - dużo możliwości.
pozdrawiam
Ryszard

* 1lepszy.pdf (25.22 KB - pobrany 642 razy.)
* 1lepszy.pdw (97.28 KB - pobrany 603 razy.)

ryskasz20
Full Member
***
Wiadomości: 51


Ladder i procedury? Dlaczego nie!
#7 : Październik 11, 2012, 21:35:27 pm »

Witam,
teraz zamieszczam już, niestety, ostatni programik.
Sterowanie oświetleniem salonu: 8 sterowanych wyjść, 3 sceny świetlne, 1 centralne OFF /zgaś wszystko/. Program w w zamierzeniu jest dedykowany do przycisku podwójnego  6x Gira ESPRIT szkło z diodami sygnalizującymi stan obwodu.  Czyli mamy do wykorzystania 12 przycisków / i 13 diód LED - ale o tym nie pisze/. Ale może oczywiście służyć dla dowolnych przycisków. Sterowanie 8 obwodami jest klasyczne - przyciskami flip-flop. Program umożliwia zaprogramowanie przez użytkownika w dowolnym momencie każdej z 3  scen świetlnych. Wywołanie czyli zapalenie oświetlenia sceny jest klasyczne: krótki klik np. o czasie trwania do 1s. Programowanie sceny to najpierw zapalenie wybranych obwodów swoimi przyciskami flip-flop a następnie dłuugi klik np 30s programowanym przyciskiem - jest to ten sam przycisk który wywołuje tą scenę świetlną. /w programie są to czasy po 2s  dla potrzeb symulacji - trzeba to oczywiście zmienić w aplikacji docelowej/ Potwierdzenie zaprogramowania następuje poprzez kilkukrotne mrugnięcie załączonymi obwodami.
3 przyciski funkcyjne scen świetlnych oprogramowane są w funkcji pierwszy-lepszy, aby nie było kolizji ich działania w przypadku naciśnięcia jednoczesnego np. w trakcie procedury programowania. Jest to konieczne, ponieważ korzystają z jednej procedury, a dzieje się wszystko przecież w czasie rzeczywistym. Ta funkcja jest w zakładce programu 1lepszy. Działanie całego programu jest opisane w linijkach komentarzy. Aha: po wgraniu trzeba wejść do zakładki Project/Sub Program/1lepszy   aby pokazała się zakładka 2-giej procedury. Bo u mnie po otwarciu programu nie jest widoczna. Nie wnikam dlaczego - tak widać chcieli tajwańczycy...
Dodam jeszcze dla rozszerzenia pomysłów /sam to zastosowałem dlatego tyle zachodu/ zastosowania takiego programu poprzez powielenie jego bloków:
1. Takie procedury można zastosować do wejść oświetlenia zewnętrznego: np zaprogramowanie sceny świetlnej po przyjeździe   do domu w nocy..np  po sygnale otwarcia bramy
2. Zadziałanie systemu alarmowego w nocy
3. Wyłącznik zmierzchowy - zapalenie wybranych obwodów
4. jw wyłączenie wyłącznika zmierzchowego /nie jest to jednoznaczne z załączeniem - obwody nocne/
5. jw powiązanie z zegarem np. tygodniowym czy astronomicznym /nie jestem zwolennikiem - w odróżnieniu od niektórych kolegów - stosowania do tego zegara wewnętrznego sterownika PLC z różnych, praktycznych względów/
6. Reakcja na wywołanie od furtki /domofon-videofon/

A to jest tylko przecież proste sterowanie oświetleniem.

Wiem, że można bez takich bajerów zaprogramować w prosty sposób /funkcje AND, OR, XOR itp czyli styki/ w Ladderze to samo. A potem po jakimś czasie wnikać w program, poprawiać itp. Też można. Ja taki program mam już kilka lat. I sam już nie pamiętam która zmienna do czego służy. Po tylu zmianach.

Pozdrawiam,
życzę fajnych efektów w swoim nie tak głupim - no może "prawie" inteligentnym domu.
Może ktoś skorzysta.

Ryszard














* 8_wyjsc.pdw (100.54 KB - pobrany 663 razy.)
* 8wyjsc.pdf (58.77 KB - pobrany 714 razy.)

impressa
Jr. Member
**
Wiadomości: 12


Ladder i procedury? Dlaczego nie!
#8 : Luty 16, 2015, 00:36:26 am »

Właśnie przegryzłem się przez programy z tego wątku. Poezja i elegancja algorytmiczna Gratulacje!

Szczególnie do gustu przypadło mi użycie rejestrów na poszczególnych bitach do zapisania stanów wejść/wyjść (zamiast po jednym rejestrze na we/wy), no i oczywiście innowacyjne podejście do a'la procedur z flagami.

Dzięki wielki dla Autora

koles
Full Member
***
Wiadomości: 44


Ladder i procedury? Dlaczego nie!
#9 : Luty 16, 2015, 23:00:23 pm »

Jest jeszcze jeden mechanizm, na któy warto zwrócić uwagę - Fatek ma instrukcje do obsługi stosu. Można robić tak, jak w mikrokontrolerach, przed wywołaniem funkcji parametry na stos, funkcja je zdejmuje, wynik wrzuca do ustalonego rejestru albo na stos, skąd zdejmuje go program wywołujący. To bardziej złożone rozwiązanie, ale pozwala nawet przesyłać dane o zmiennej długości.

koles
Full Member
***
Wiadomości: 44


Ladder i procedury? Dlaczego nie!
#10 : Kwiecień 15, 2015, 19:09:25 pm »

Cytat: daniel.polak1  Kwiecień 15, 2015, 14:16:15 pm
w zupełności się ze wszystkimi zgadzam
Idź sobie, proszę.

Strony: [1]
Drukuj
Skocz do: