W tej części opiszę, jak stosować blok funkcyjny Fb_LatchingRelay przeznaczony do sterowania oświetleniem oraz blok Fb_ShortLong umożliwiający rozróżnianie długie i krótkie przyciśnięcie klawiszy łącznika sciennego. Będzie też przykładowa wizualizacja do sterowania oświetleniem.
Niejszy artykuł bazuje na pojęciach i plikach omawianych w poprzednich częściach - zachęcam więc, by czytać całość od samego początku
Rozważmy następujący układ oświetlenia i przycisków w salonie:
Na lewej i górnej ścianie znajdują się dwu-klawiszowe łączniki zwierne podłączone do wejść od 1 do 4. Na suficie znajdują się 2 lampy sterowane wyjściami OUT1 i OUT2.
Chcemy aby:
W definicjach programu będziemy mieli:
VAR VIS_Light_1, VIS_Light_2 : BOOL; (* do sterowania z wizualizacji *) Light_1, Light_2 : Fb_LatchingRelay; LongShort_IN1, LongShort_IN2 : Fb_ShortLong; END_VAR
Wprowadzamy do użytku nowy blok funkcyjny Fb_ShortLong z biblioteki Building_common.lib. Do wejścia xSwitch podłączyć należy wejście cyfrowe, czyli konkretny fizyczny przycisk. Blok oferuje 2 wyjścia – xShort i xLong, na które wysyła impulsy po rozpoznaniu, czy na wejściu xSwitch pojawił się impuls dostatecznie długi…
Trzeba jeszcze ten blok skonfigurować. Parametr, które nas interesuje to „uiT_10tel_s”, w którym z dokładnością do 0,1 sekundy określamy długość przyciśnięcia długiego. Z moich doświadczeń wynika, iż uruchamianie złożonych funkcji przy długim przyciśnięciu powinno wymagać 2-sekundowego impulsu. Dlatego też zmieniamy nieco linię definicji i wpisujemy:
(…) LongShort_IN1, LongShort_IN2 : Fb_ShortLong := (uiT_10tel_s := 20); (…)
Konsekwencje definiowania parametrów bloku funkcyjnego pomiędzy słowami VAR i END_VAR opiszę w późniejszych artykułach.
Teraz czas na treść programu:
LongShort_IN1( xSwitch := IN1 ); LongShort_IN2( xSwitch := IN2 ); Light_1( xSwitch := LongShort_IN1.xShort OR IN3 OR VIS_Light_1, xCentON := LongShort_IN1.xLong, xCentOFF := LongShort_IN2.xLong ); Light_2( xSwitch := LongShort_IN2.xShort OR IN4 OR VIS_Light_2, xCentON := LongShort_IN1.xLong, xCentOFF := LongShort_IN2.xLong ); OUT1 := Light_1.xActuator; OUT2 := Light_2.xActuator;
Linia LongShort_IN1 (xSwitch := IN1) oznacza, że do wejścia xSwitch podłączamy fizyczne wejście IN1. Od tej pory blok LongShort_IN1 czekać będzie na naciśnięcie przycisku IN1 i po upływie czasu określonego w parametrze uiT_10tel_s lub po zwolnieniu przycisku (w zależności od tego, co nastąpi wcześniej) na wyjściach xShort lub xLong poda impuls – w zależności od czasu trwania zwarcia przycisku.
Linie definiujące bloki funkcyjne Fb_ LatchingRelay są bardziej rozbudowane:
Dodatkowo przebudowujemy wizualizację VIS_PLC, by wyglądała następująco:
Jak widzicie, nie umieszczam na wizualizacji poszczególnych przycisków symulujących klawisze łącznika ściennego podłączone do wejść sterownika. Nie ma to praktycznego sensu (może z wyłączeniem fazy testowania). Wystarczą przyciski dla poszczególnych wyjść. W okrągłych elementach określone zostały:
Brawo! Mamy oprogramowanie pierwszego pokoju z dodatkowymi funkcjami ukrytymi pod przyciskami. Następny dział będzie nieco bardziej teoretyczny