5. Oświetlenie oraz pojedyncze i podwójne klikanie

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 pojedyncze i podwójne 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:

1

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:

  • wyjściem OUT1 sterowały wejścia IN1 i IN3,
  • wyjściem OUT2 sterowały wejścia IN2 i IN4,
  • długie przyciśnięcie klawisza IN1 włączało oba światła,
  • długie przyciśnięcie klawisza IN2 wyłączało oba światła.

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:

  • do wejścia xSwitch podłączone są fizyczne przyciski oraz zmienna do sterowania z wizualizacji,
  • do wjeścia xCentON podłączony jest impuls długiego przyciśnięcia klawisza IN1,
  • do wjeścia xCentOFF podłączony jest impuls długiego przyciśnięcia klawisza IN2.

Dodatkowo przebudowujemy wizualizację VIS_PLC, by wyglądała następująco:

2

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:

  • Text – “Light_1”
  • Colors -> Alarm color -> Inside -> pomarańczowy
  • Variables -> Change color -> “OUT1”
  • Input -> Tap variable -> “PLC_PRG.VIS_Light_1”

Brawo! Mamy oprogramowanie pierwszego pokoju z dodatkowymi funkcjami ukrytymi pod przyciskami. Następny dział będzie nieco bardziej teoretyczny 

Oto paczka z programem wykorzystanym w tym przykładzie.