fbpx

Instrukcje sterujące

instrukcja-warunkowa-if-else

Przebieg programu to kolejność w jakiej są wykonywane instrukcje. W Twoim pierwszym programie instrukcje były wykonywane kolejno od góry do dołu po czym wszystko zaczynało się od początku. W praktyce prawie nigdy nie będziesz tworzył tak prostego kodu więc będziesz posługiwał się zazwyczaj instrukcjami do tworzenia rozgałęzień oraz pętlami w celu powtarzania instrukcji. Więc poznajmy teraz tą część języka S7-SCL.

Instrukcje sterujące

Tak naprawdę, to są dwie instrukcje, które sprawdzają warunek i decydują o kierunku wykonywania programu. Pierwszą z nich będziesz stosował zdecydowanie częściej

Instrukcja warunkowa IF … ELSE

Możliwość rozgałęzienia nadaje elastyczność dla kodu programu. Instrukcja IF kontroluje przepływ programu w zależności czy będzie spełniony warunek. Przykład przedstawia poniższy kod

IF (warunek) THEN
zadanie1;
END_IF;

Instrukcja IF różni się od znanej z języka C dodatkowym słówkiem THEN. Działanie jest takie samo. Warunek może być dowolnym wyrażeniem. Wynikiem po sprawdzeniu warunku jest prawda albo fałsz. Jeżeli warunek jest spełniony (TRUE), wówczas zadanie1 jest wykonywane. Gdy warunek jest fałszywy (FALSE), wówczas wykonywanie programu przechodzi do END_IF które kończy instrukcję warunkowo. Następnie jest wykonywana dalsza część programu. Rozgałęziona wersja instrukcji IF została przedstawiona na poniższym kodzie

IF (warunek) THEN
zadanie1;
ELSE
zadanie2;
END_IF;

Sytuacja jest podobna do przypadku poprzedniego. Gdy warunek jest spełniony, wówczas jest wykonywane zadanie1, gdy warunek jest fałszywy, wówczas jest realizowane zadanie2. Oczywiście można po zadaniu1 dodać np. zadanieA. Przykład został przedstawiony poniżej

IF (#Przycisk = TRUE) THEN // wciśnięto przycisk
#SwiatloZielone := TRUE;
#SwiatloCzerwone := FALSE;
ELSE
#SwiatloZielone := FALSE;
#SwiatloCzerwone := TRUE;
END_IF;

Jeżeli naciśniemy przycisk (sygnał zmieni logiczny poziom z niskiego na wysoki) wówczas zostanie zapalone zielone światło sygnalizujące naciśnięcie oraz zgaszone światło czerwone. Gdy przycisk nie będzie wciśnięty, wówczas zostanie zapalone światło czerwone, natomiast światło zielone zostanie zgaszone. Warunek Przycisk = TRUE lepiej obrazuje, że interesuje nas właśnie ten stan.

Należy podkreślić, że instrukcje IF mogą być zagnieżdżone, co przedstawia poniższy kod programu

IF (#PoziomWody >= 50) THEN
	IF (#PrzyciskWlaczPompa = TRUE) THEN
		#Pompa := TRUE
	END_IF;
ELSE
#Pompa := FALSE;
END_IF;

W przypadku gdy woda przekroczy lub będzie równa 50% pojemności zbiornika, wówczas operator może włączyć pompę w celu zmniejszenia poziomu wody. Gdy poziom wody będzie mniejszy niż 50%, wówczas pompa się wyłączy.

Zdarzają się sytuacje, gdzie jest potrzeby wybór wielowariantowy. Jednym z rozwiązań jest kilka instrukcji IF..ELSE tak jak przedstawia  kod umieszczony poniżej

IF warunek5 THEN
Zadanie5;
ELSIF warunek6 THEN
Zadanie6;
ELSIF warunek7 THEN
Zadanie8;
ELSE
Zadanie9;
END_IF;
Kolejne_zadania;

Taki kod należy analizować następująco: jeżeli warunek5 jest prawdziwy, wówczas wykonaj zadanie5 i przejdź do dalszej części programu. Jeżeli warunek5 jest nieprawdziwy, to sprawdź warunek6. Gdy warunek6 jest spełniony, wykonaj zadanie6. Sytuacja powtarza się dalej analogicznie. Jeżeli żaden warunek nie będzie spełniony, wówczas zostanie wykonane zadanie9. Oczywiście ostatnia część ELSE jest opcjonalna. Wtedy zostaną sprawdzone tylko warunki. Jeżeli żaden warunek nie będzie spełniony, program przejdzie do wykonywania dalszego kodu.

Porównując składnię instrukcji z językiem C widzimy, ze oprócz słówka THEN jest również END_IF. Jest to po prostu zastąpienie klamr znanych z języka C. Jest to duży atut, ponieważ nie ma sytuacji popełnienia błędu podczas umieszczania kodu powiązanej z instrukcją.

Instrukcja CASE .. OF

Jest to instrukcja do wyboru wielowariantowego, który możemy zastąpić podobnie działający blok składający się z instrukcji IF..ELSE. Przykład przedstawia

CASE WybierzZadanie OF
	1 : Zadanie1;
	2 : Zadanie2;
	3 : Zadanie3;
ELSE
ZadanieXXX;
END_CASE;

Kolejne_zadania;

Konstrukcja może wygląda skomplikowanie, lecz to tylko błędne pierwsze odczucie. Instrukcja rozpoczyna się od sprawdzenia zmiennej WybierzZadanie które jest w tej sytuacji wyrażeniem. Poniżej znajdują się wartości liczbowe od jeden do trzech dzięki którym istnieje możliwość zdecydowania, jakie instrukcje (Zadanie) chcemy wykonać w zależności od wartości zmiennej WybierzZadanie. Przedstawiony przykład będzie działać następująco. Zakładamy, że zmienna WybierzZadanie wynosi 2, wówczas instrukcja CASE sprawdza tą wartości kolejno, czyli czy zmienna WybierzZadanie jest równe jeden. Wynik porównanie jest nie prawdziwy, więc przechodzi linię niżej i następuje następne porównanie. W tym wypadku porównanie jest prawdziwe więc następuje wykonanie instrukcji Zadanie2. Po wykonaniu tej instrukcji następuje zakończenie całej instrukcji CASE i przejście do wykonywania kolejnych linii kody, którą zawiera instrukcja Kolejne_zadania.

W naszym przypadku jest wykonana tylko jedna instrukcja Zadanie2 ale nic nie stoi na przeszkodzie, aby w kolejnych liniach napisać ich więcej.

Gdyby wartość zmiennej WybierzZadanie była różna od 1, 2, 3 (takie wartości są sprawdzanie przez instrukcję CASE) wówczas zostałaby wykonana instrukcja znajdująca się w sekcji ELSE czyli ZadanieXXX. Po wykonaniu tej instrukcji następuje zakończenie całej instrukcji CASE i przejście do wykonywania kolejnych linii kody.

Oczywiście można instrukcja CASE może być większa i sprawdzać wartość zmiennej WybierzZadanie w zakresie np. od 1 do 100. Istnieje również możliwość wykonania instrukcji, gdy zmienna WybierzZadanie będzie w pewnym przedziale wartości, co przedstawia kod umieszczony poniżej

CASE WybierzZadanie OF
	1 : Zadanie1;
	2..5 : Zadanie2Do5;
	6 : Zadanie3;
ELSE
ZadanieXXX;
END_CASE;

Kolejne_zadania;

W tym wypadku, jeżeli zmienna WybierzZadanie będzie znajdować się w przedziale od 2 do 5 wówczas zostanie wykonana instrukcja Zadanie2Do5.

 

Na początku może być Ci trudno zapamiętać konstrukcję tych instrukcji. Możesz wykorzystać pasek ulubionych instrukcji, który znajduje się w edytorze do pisania kodu programu. Ten pasek został przedstawiony poniżej

TIA-IF-ELSEWystarczy, abyś myszką przeciągnął wybraną instrukcję do edytora. W podobny sposób możesz dodać także instrukcję CASE .. OF. Wtedy pozostanie Ci tylko uzupełnić warunek oraz napisać kod wewnątrz tej instrukcji.

W następnym wpisie wykorzystamy instrukcję IF już w praktyce.

Kurs wideo

Więcej na temat programowania w języku SCL znajdziesz w kursie Sterownik PLC w praktyce:

pl-usb-1p1-tia-1200-scl_sterownik-plc_w-praktyce-1

 

Podziel się tym wpisem na:
  • Facebook
  • Google Bookmarks
  • Twitter
  • Wykop

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Newsletter - Zapisz się i jako pierwszy otrzymasz najnowsze informacje