Przekaźnik programowalny easyE4 (część 3). Własne moduły, użytkowanie

Zapoznaliśmy się już ze sposobem wykonania programu dla easyE4 i przesłania do przekaźnika. Wykonaliśmy też interfejs użytkownika i sprawdziliśmy jego działanie. Pozostało wykonanie oprogramowania służącego do obsługi czujników – barier świetlnych i rozpoznającego kierunek ruchu osoby oraz generującego na tej podstawie impuls zwiększający lub zmniejszający stan licznika aktualnej liczby osób w pomieszczeniu. Na jego podstawie będziemy sterowali pracą sygnalizatora 2-komorowego lub wyłącznikiem oświetlenia, wentylacji itp.

W automatyce przemysłowej znajdziemy wiele przykładowych rozwiązań detektorów kierunku ruchu. Na przykład, niektórzy producenci półprzewodników wytwarzają układy scalone, które dołączone do enkodera inkrementalnego podają na wyjściach przebiegi określające kierunek obrotu oraz jego prędkość. Taki enkoder ma dwa wyjścia A i B, na których sygnał B jest przesunięty w fazie w stosunku do sygnału A o ±90 stopni. W zasadzie można by było skorzystać z takiego układu lub rozwiązania dyskretnego (zbudowanego z bramek i rejestrów), jednak trzeba pamiętać, że pomimo zbliżonej sekwencji przebiegów na wejściach przekaźnika programowalnego ludzie mogą zachować się w sposób trudny do przewidzenia.

Przypomnijmy sobie rysunki 3 i 4 zamieszczone w pierwszej części artykułu. Pokazują one sekwencję sygnałów występującą na wyjściach barier świetlnych, a tym samym na wejściach przekaźnika programowalnego easyE4, w momencie, gdy osoba wchodzi lub wychodzi do/z pomieszczenia. Na obu rysunkach przedstawiono sytuację idealną, w której wystąpiła cała sekwencja sygnałów, jednak w rzeczywistych warunkach wcale nie musi tak być. Osoba wchodząca w zasięg czujnika 1 może zmienić zdanie i wycofać się. Może też pojawić się w zasięgu czujnika 2 z pominięciem czujnika 1 itd. Nasze rozwiązanie powinno być odporne na takie zachowanie się zliczanych osób i przynajmniej nie wstrzymywać pracy licznika, ale restartować proces i poprawnie reagować przy detekcji kolejnej osoby.

Najprostszy detektor kierunku ruchu można wykonać z użyciem rejestru typu D. Do wejścia informacyjnego takiego rejestru dołączamy barierę 1, natomiast do wejścia zegarowego barierę 2. Bariery ustawiamy na tyle blisko siebie, aby obiekt zmierzając od strony czujnika 1 najpierw spowodował wystąpienie logicznej jedynki na wejściu informacyjnym, a następnie – przy trwającej 1 na wejściu D – wystąpienie narastającego zbocza na wejściu zegarowym, które przepisze jedynkę z wejścia informacyjnego na wyjście rejestru. Przy ruchu od strony czujnika 2 najpierw pojawi się impuls zegarowy, co spowoduje przepisanie logicznego 0 z wejścia rejestru D na wyjście Q. W ten sposób możemy rozpoznać kierunek ruchu i sterować wejściem kierunku zliczania. Odrębne zagadnienie stanowi fakt, że impuls zegarowy powinien wystąpić dopiero wtedy, gdy ustali się stan wyjścia rejestru D. Można skorzystać z impulsu występującego na wejściu zegarowym rejestru D, ale trzeba dodać ścieżkę opóźniającą ten impuls, tak aby uwzględnić czas propagacji rejestru. No dobrze, a co, jeśli osoba wejdzie w zasięg działania czujnika 1 i wycofa się? Nie ma problemu, ponieważ impuls pojawił się jedynie na wejściu informacyjnym rejestru i nie spowodował zmiany stanu jego wyjścia. Gorzej od drugiej strony, ponieważ takie wejście/wyjście z zasięgu działania zostanie zidentyfikowane jako pełnoprawny cykl. Dlatego też nasz układ detekcji kierunku ruchu nie dosyć, że musi reagować na pełną sekwencję sygnałów, to jeszcze nie generować impulsu plus/minus dla licznika, jeśli ta sekwencja nie zostanie w całości zrealizowana, to znaczy nie wystąpią impulsy na obu wejściach przekaźnika programowalnego, w tym wypadku używane są I01 oraz I02.

Realizując detektor kierunku przemieszczania się osoby przyjęto, że będzie miał on dwa wyjścia zegarowe, które podobnie jak przyciski „w prawo”/„w lewo” lub „w górę”/„w dół” używane w tym programie, będą generowały impulsy zegarowe na dwóch odrębnych wyjściach. Jedno z tych wyjść będzie powodowało zwiększanie stanu licznika, a drugie zmniejszanie. Generowaniem sygnału dla bloku licznika będą zajmowały się bramki logiczne umieszczone w jednej sieci wraz z licznikiem. Ponadto, detektor będzie niewrażliwy na możliwe „migotanie” sygnału występującego na jego wejściach. Sygnał plus/minus będzie generowany tylko wtedy, gdy zostanie spełniona sekwencja:

  • Zwiększenie stanu licznika: impuls na I01 –> impuls na I02.
  • Zmniejszenie stanu licznika: impuls na I02 –> impuls na I01.

Najlepszą metodą zabezpieczenia się przed „migotaniem” przebiegu na wejściu jest użycie przerzutnika RS. Ma on tę zaletę, że po podaniu napięcia na wejście ustawiające wyjście (SET) lub zerujące (RESET) przerzutnik pozostaje w stanie stabilnym niezależnie od tego, czy poziom logiczny na wejściu SET zmieni się czy nie. W proponowanym detektorze kierunku ruchu na obu wejściach przekaźnika easyE4 (I01, I02) zastosowano przerzutniki RS. Są one ustawiane wysokim poziomem napięcia na odpowiednim wejściu i pozostają ustawione, aż do wyzerowania.

Najlepiej by było, aby impuls zerujący oba przerzutniki RS był impulsem wejściowym licznika, ponieważ jego odebranie znaczyłoby, że cykl detekcji kierunku ruchu zakończył się poprawnie, detektor wygenerował impuls dla licznika i jest gotowy na kolejną sekwencję sygnałów. Jednak osoba zliczana może wejść w zasięg działania jednego z czujników lub pomiędzy nie, a w takiej sytuacji na wejściu przekaźnika programowalnego wystąpi tylko jeden z sygnałów, a nie dwa wymagane do poprawnej detekcji. Jak wtedy wyzerować przerzutniki wejściowe i który z nich? Wydaje się, że najlepiej wyzerować oba po prostu po upływie jakiegoś niezbyt długiego czasu przeznaczonego na cały cykl. Taki czas w oprogramowaniu lub w rozwiązaniach sprzętowych jest zwany timeoutem lub spolszczając – limitem czasu operacji.

Przerzutnik RS – definiowanie modułu użytkownika

Jedną z zalet programowania za pomocą diagramu bloków funkcyjnych (FBD) jest możliwość definiowania bloków użytkownika. Dzięki niej można nie tylko definiować własne bloki i używać ich wielokrotnie na różnych schematach, ale także korzystać z wykonanych przez współpracowników, producentów rozwiązań sprzętowych, udostępnianych na forach internetowych i innych. Dla swoich potrzeb i w ramach ćwiczenia wykonamy taki blok użytkownika zawierający nieskomplikowany przerzutnik RS zbudowany z dwóch bramek NAND. Jego schemat pokazano na rysunku 1. W naszej aplikacji potrzebujemy przerzutnika wyzwalanego poziomem wysokim, więc na jego wejściach dodamy jeszcze inwertery (bramki NOT).

Rysunek 1. Przerzutnik RS zbudowany z dwóch bramek NAND

Aby wykonać moduł użytkownika wybieramy z menu Program –> Utwórz moduł użytkownika. Można też skorzystać z ikony skrótu lub (symbol bramki z gwiazdką na pasku menu) lub kliknąć prawym klawiszem myszy na pozycji Moduły użytkownika, poniżej wykazu modułów producenta. W wyniku wywołania opcji menu zostanie wyświetlone okienko, jak na rysunku 2. Wpisujemy w nim nazwę naszego modułu (np. RS) oraz – co bardzo ważne – liczbę oraz rodzaj wejść/wyjść. Teraz wystarczą nam 1 wyjście binarne oraz 2 wyjścia.

Rysunek 2. Okno właściwości modułu użytkownika

Wykonany przez nas moduł użytkownika będzie składał się jedynie z kilku elementów: dwóch bramek, styków na wejściu i cewek na wyjściu. Trzeba będzie też użyć znacznika do spięcia wejścia z wyjściem. Na tak niewielką liczbę komponentów wystarczy pojedyncza sieć.

Wygodniej byłoby poprowadzić połączenia w taki sposób, jak pokazano na schemacie, jednak nie jest to możliwe. Elementy układane są przez oprogramowanie jeden za drugim, więc musimy zaplanować ich „płaskie’ rozmieszczenie. Układanie bloków użytkownika najlepiej rozpocząć od wyjściowego elementu NAND. Do jednego z jego wejść dołączamy wyjście drugiego elementu NAND oraz styk. Do wejścia pierwszego NAND’a dołączamy dwa styki. Pozostało wyprowadzenie wyjścia – do drugiej w kolejności bramki NAND dołączamy dwie cewki. Teraz zajmiemy się właściwościami poszczególnych styków i cewek:

  • Styki na wejściu (pierwszy element NAND od lewej):
  • Typ: Wejścia i wyjścia oraz znaczniki binarne; Komentarz: SET; Typ logiki: Rozwierny; Argument: I – Wejście; Numer: 1.
  • Typ: Wejścia i wyjścia oraz znaczniki binarne; Typ logiki: Zwierny; Argument: M – Znacznik; Numer: 1.
  • Styki na wyjściu (drugi element NAND):
  • Typ: Wyjścia i znaczniki binarne; Komentarz: Q; Funkcja cewki: Zwykła cewka zanegowana; Argument: Q – Wyjście; Numer:  1.
  • Typ: Wyjścia i znaczniki binarne; Funkcja cewki: zwykła cewka; Argument: M – Znacznik; Numer: 1.

Pozostało ustawienie właściwości styku doprowadzającego sygnał zerowania RESET: Typ: Wejścia i wyjścia oraz znaczniki binarne; Komentarz: RESET; Typ logiki: Rozwierny; Argument: I – Wejście; Numer: 2.

Wykonany przez nas moduł funkcyjny powinien wyglądać tak, jak na rysunku 3.

Rysunek 3. Moduł funkcyjny przerzutnika RS

Klikamy na zakładce z nazwą utworzonego przez nas modułu i wybieramy Zamknij. Środowisko programistyczne zapyta nas o zapamiętanie modułu na dysku – potwierdzamy i nadajemy modułowi jakąś nazwę. Od tego momentu wykonana przez nas definicja jest dostępna na wykazie modułów i gotowa do użycia.

Możliwość definiowania modułów to kapitalne narzędzie. Za jej pomocą można utworzyć sobie bibliotekę gotowych rozwiązań, która znacznie uprości nam tworzenie kolejnych programów, a może też ułatwić pracę naszemu zespołowi czy współpracownikom. Można też podzielić pracę w ramach zespołu – niech każdy wykonana i przetestuje jakąś własną cegiełkę, a następnie połączyć te cegiełki w całość. Może to przesada w odniesieniu do easyE4, ponieważ ma on raczej skromne możliwości w porównaniu z „dużym” PLC, ale może wytworzyć nawyki w pracy, które wszystkim ułatwią życie.

Detektor kierunku ruchu

Aby zrozumieć pracę detektora kierunku ruchu warto otworzyć program dostępny w materiałach dodatkowych do artykułu. Umieszczenie rysunków wszystkich opisywanych sieci jest możliwe, ale wygodniej jest je przeglądać (oraz powiązania pomiędzy nimi) podczas lektury na ekranie środowiska programistycznego easySoft 7. W razie wątpliwości lub jeśli opis będzie się dłużył, można uruchomić symulator i poklikać obserwując, jak zachowuje się program. Zwłaszcza, że opisanie funkcjonowania pojedynczych sieci (niekiedy zawierających pojedynczą bramkę) w oderwaniu od siebie nie jest łatwe.

Schemat detektora kierunku ruchu zaczyna się od sieci numer 0010. Od sieci numer 0010 do 0016 są umieszczone elementy logiczne odpowiadające ze obsługę wejścia I01, natomiast od 0017 aż do końca, do sieci 0023 elementy obsługujące wejście I02. Obie części są symetryczne i są wzorowane na detektorze kolejności impulsów (detektor kwadraturowy) z przerzutnikiem typu D. W związku z tym, że detektory kwadraturowe pracują przy sygnałach, które są przesunięte w fazie o 90 stopni, a ten w liczniku osób musi reagować na sekwencje „brak – I01 – brak – I02 – brak” lub „brak – I02 – brak – I01 – brak”, to dodano przerzutniki RS zapamiętujące stany wejść, zabezpieczające przed migotaniem napięcia na wejściach oraz wypracowujące przesunięcie fazowe niezbędne w detektorze kwadraturowym.

Do obu przerzutników dodano timery odmierzające limit czasu operacji, generujące impuls zerowania wejściowych i wyjściowych przerzutników RS oraz bramki blokujące impulsy wejściowe aż do wyzerowania przerzutników, to jest do momentu gotowości na kolejny cykl detekcji. Poszczególne elementy są układane i łączone na schematach tak samo, jak opisywano to wcześniej i nie ma sensu robienie tego ponownie. Analizę pracy detektora najlepiej wykonać w oparciu o symulator uruchamiany za pomocą przycisku Symulacja. Niestety, schemat w easySoft 7 musi być dzielony na niewielkie sieci i przez to jest trudny do analizowania. Dlatego najlepiej, aby osoby dociekliwe i chcące zgłębić temat wydrukowały sobie poszczególne sieci i narysowały schemat złożony z bramek logicznych. Wówczas bez trudu będzie można wyróżnić elementy przerzutnika D i oddzielić je od dodanych funkcjonalności blokowania i zerowania przerzutników.

Zapamiętanie stanu liczników w razie wyłączenia napięcia zasilającego

Z punktu widzenia użytkownika jest wygodnie, aby w razie zaniku napięcia zasilającego nie trzeba było ponownie wprowadzać nastaw, a jedynie ewentualnie skorygować wartość wskazania bieżącego. W opisywanej aplikacji w tym celu musimy zapamiętać i odtworzyć zawartość dwóch liczników – są to moduły C01 oraz C02.

Producent środowiska programistycznego nazwał właściwość zapamiętywania i odtwarzania stanu modułów lub znaczników remanencją. Aby poczytać więcej na jej temat warto skorzystać z menu „Pomoc” dostępnego po wskazaniu „?” na pasku menu (można też nacisnąć F1). Następnie, wskazać zakładkę „Wyszukaj” i wpisać słowo „remanencja”. Można też skorzystać z dostępnego w tym samym menu podręcznika użytkownika. Co ważne, wszystkie opisy są w języku polskim, więc łatwo czyta się je ze zrozumieniem.

Na bajty remanentne, to jest odtwarzane po włączeniu zasilania, jest przeznaczona pamięć mieszcząca 400 bajtów. Zapewne jest to odrębny układ scalony lub fragment pamięci procesora zasilany za pomocą odrębnego źródła, np. super kondensatora lub baterii. Jak napisano w menu pomocy dotyczącym modułu licznika „C”, zapamiętanie/odtworzenie jego stanu wymaga 4 bajtów pamięci, więc bez trudu w 400 bajtach zmieszczą się dwa liczniki.

Aby włączyć zapamiętanie/odtworzenie zawartości licznika należy kliknąć w umieszczony w lewym dolnym rogu przycisk „Projekt”. Następnie wybrać zakładkę „Ustawienia systemowe”. Trzecie pole od lewej to „Remanencja” (rysunek 4). W tym momencie warto zwrócić uwagę na wartość w polu „Wolny:” – teraz jest to 400 bajtów i przypomnieć sobie, że każdy moduł licznika „C” wymaga 4 bajtów.

Rysunek 4. Pole „Remanencja”

Rysunek 5. Pole „Remanencja” po wprowadzeniu nastaw odnośnie do liczników C01 i C02

Dla opisywanej aplikacji jest istotna zawartość modułów liczników C01 i C02, więc w polu wartości obok „C” wpisujemy „01”, a w kolejnym „02”, jak na rysunku 5. Pozostałe pola, takie jak moduły szybkich liczników „CH”, moduł licznika przyrostowego „CI”, moduł danych „DB” i moduł przekaźnika czasowego „T” pomijamy. Podobnie w tym momencie nie będziemy zajmowali się znacznikami (MW, MB, MD). Łatwo zauważyć, że po prawidłowym wpisaniu zakresu wartość „Wolny” zmniejszyła się o 8 bajtów, a więc o tyle, ile wymaga zapamiętanie dwóch modułów liczników.

Symulowanie pracy licznika

Środowisko programistyczne easySoft 7 ma wbudowany symulator, który pozwala na sprawdzenie funkcjonowania programu, obejrzenie stanu wejść, wyjść i poziomów logicznych występujących na poszczególnych elementach schematu FBD. Użycie symulatora daje nam możliwość wypróbowania działania programu i pozwoli odnaleźć błędy, chociaż z oczywistego powodu nie będą to dokładnie takie warunki pracy, jakie napotka nasza aplikacja w rzeczywistych warunkach. Teraz posłużymy się symulatorem dla sprawdzenia pracy aplikacji licznika osób.

Symulator uruchamia się klikając w przycisk Symulacja umieszczony po lewej stronie, na dole okna środowiska easySoft 7. Symulując pracę licznika pozostawimy większość parametrów taką, jak jest i nie będziemy też ustawiali żadnych pułapek, ale symulator ma bardzo ciekawe możliwości, których na próżno szukać w porównywalnych produktach konkurencyjnych. Oprócz ustawiania pułapek, pozwala na przykład na skorzystanie z wirtualnego oscyloskopu, który zaprezentuje nam przebiegi wybranych sygnałów. Spróbujmy zaprząc go do kontroli wykonanego przez nas programu.

Mając otwarty program „Licznik osób v11.e70” klikamy w przycisk Symulacja, a następnie rozwijamy umieszczoną powyżej niego listę Wyświetlacz i klikamy w Okno argumentów + oscyloskop. Po prawej stronie zostanie pokazane puste Okno argumentów + oscyloskop. Klikamy na symbolu gwiazdki (*) w kolumnie Argument i wpisujemy M05. Obok, w kolumnie Komentarz powinien wyświetlić się komunikat IMPULSY W GÓRĘ. Teraz, kliknięcie w kolumnie Oscyloskop powoduje wyświetlenie znaku checkmark oraz jakby kanału analizatora stanów logicznych w oknie Oscyloskop. W taki sam sposób dopisujemy: M04 (IMPULSY W GÓRĘ), I01 (WEJŚCIE 1) oraz I02 (WEJŚCIE 2). Powinniśmy uzyskać efekt, jak na rysunku 6.

Rysunek 6. Ekran oscyloskopu po konfiguracji

Uruchamiamy symulator naciskając F9 lub wybierając z menu Symulacja –> Rozpocznij. Z menu wybieramy Oscyloskop –> Rejestracja start (lub posługujemy się odpowiednią ikoną na pasku narzędzi – kwadrat z czerwonym kółkiem). Po lewej stronie ekranu powinniśmy mieć rozwiniętą listę Wyświetlacz. Klikamy na niej w Wyświetlacz + przyciski. W dolnej części okna zostanie wyświetlony ekran roboczy naszej aplikacji licznika i tu za pomocą przycisków w prawo/w lewo ustawiamy wartość DOZWOLONA na większą od 0, na przykład 5, jak na rysunku 7. Teraz klikamy w Wyświetlacz –> Wejście cyfrowe, a następnie kolejno, dwukrotnie w kwadracik obok 1:WEJŚCIE 1 oraz 2:WEJŚCIE 2.

Rysunek 7. Ekran licznika podczas symulacji. Na rysunku z wprowadzoną dopuszczalną liczbą osób w pomieszczeniu

Rysunek 8. Przebiegi na wejściach/wyjściach licznika w trakcie symulacji

Fotografia 9. Licznik osób wykonany w oparciu o przekaźnik programowalny easyE4

 

Efekt pracy oscyloskopu pokazano na rysunku 8. Widać na nim, że jako pierwszy występuje impuls na wejściu I01, a kolejny na I02. Jednocześnie z narastającym zboczem na I02 jest generowany impuls na wyjściu M05:IMPULSY W GÓRĘ, co powoduje zwiększenie o jeden stanu licznika AKTUALNIE oraz pokazanie tej wartości na wyświetlaczu. Podanie impulsów w odwrotnej kolejności powoduje wygenerowanie impulsu na wyjściu M04:IMPULSY W DÓŁ i zmniejszenie stany licznika AKTUALNIE. Do ekranu oscyloskopu można jeszcze dodać np. wyjścia i obserwować, jak zmieniają się występujące na nich poziomy w rytm impulsów na I01 i I02, ale w tej sytuacji wydaje się to raczej nadmiarem informacji. Stan wyjść równie dobrze można zaobserwować klikając w Wyświetlacz –> Wyjścia cyfrowe.

Dzięki oscyloskopowi można zauważyć, że kolejne osoby będą wykrywane dopiero po upływie ustalonego czasu przekroczenia operacji (tu jest to 2,5 sekundy), więc jeśli bariery są umieszczone blisko siebie, to może warto ten czas skrócić. Da się też zaobserwować, że w sekwencji impulsów, przy której licznik działa poprawnie mogą one również nakładać się na siebie. To na wypadek, gdyby bariery były zamontowane zbyt blisko siebie.

Po sprawdzeniu pracy programu wystarczy przesłać go do przekaźnika easyE4, doprowadzić sygnały z wejść czujników oraz dołączyć sygnalizator. Na fotografii 9 pokazano gotową aplikację umieszczoną w skrzynce z tworzywa sztucznego typowo stosowanej na rozdzielnice mieszkaniowe. Obok sterownika, pod otwieraną klapką zamontowano przycisk zerowania.

Na koniec

W cyklu kolejnych artykułów opisano aplikację licznika osób. Można jej użyć na dwa sposoby: albo do sygnalizacji przekroczenia dozwolonej ich liczby w pomieszczeniu w związku z wprowadzonymi restrykcjami, albo do załączenia/wyłączenia oświetlenia lub wentylacji w pomieszczeniu, w którym powinny one działać jedynie wtedy, gdy ktoś w nim przebywa. W urządzeniu wykorzystano w nim właściwość remanencji, więc oprogramowanie działa w taki sposób, że bloki liczników zawierających nastawy oraz stan bieżący są zapamiętywane w pamięci nieulotnej i przywracane w momencie włączenia napięcia zasilania. W razie zaniku napięcia nie trzeba więc ponownie ustawiać parametrów licznika – w razie potrzeby wystarczy policzyć osoby przebywające w pomieszczeniu i skorygować wskazanie.

EasyE4 w porównaniu do starszych produktów to ogromny krok naprzód. Już bardzo dobre środowisko programistyczne easySoft 7 z całą pewnością będzie jeszcze udoskonalane. Już w tym momencie jest ono znaczącym krokiem w stronę programowania „dużych” PLC, do których zastosowania wstępem może być opisywany mikrosterownik.

Niegdyś w różnych zastosowaniach królowały sterowniki przeznaczone do konkretnego zastosowania. Teraz, patrząc na produkty, takie jak easyE4 nietrudno zauważyć, że niekiedy nie warto ich wykonywać w oparciu o jakieś mikrokontrolery. Za relatywnie niedużą cenę dostajemy bowiem do rąk sterownik z szybkim procesorem, w solidnej obudowie na szynę, z wbudowanym wyświetlaczem i klawiaturą. Można go przy tym łatwo włączyć w sieć i skomunikować z otoczeniem, rozszerzyć jego funkcjonalność i – co jest niezmiernie ważne w każdym zastosowaniu profesjonalnym – jest on zgodny z licznymi normami zharmonizowanymi, w tym dla środowisk przemysłowych. Możemy więc mieć pewność, że oddajemy do rąk użytkownika urządzenie, którego rdzeń został przebadany w certyfikowanym laboratorium i za którym stoi też marka i renoma jego producenta.

Jacek Bogusz
j.bogusz@easy-soft.net.pl

ZałącznikWielkość
licznik_osob.zip8.3 KB

Dodaj nowy komentarz

Zawartość pola nie będzie udostępniana publicznie.