[KURS PLC, CZĘŚĆ 6] Sterowniki SIMATIC S7-1200 (CPU1211C) – typy zmiennych
Tablice
Podczas pisania programu może zaistnieć potrzeba zadeklarowania większej liczby zmiennych tego samego typu. Ręczne tworzenie już kilkudziesięciu zmiennych jest czasochłonne oraz wymaga nadania innej nazwy każdej z nich. W takiej sytuacji należy wykorzystać tablice.
Tablica jest szeregiem zmiennych tego samego typu, dzięki temu możemy odwołać się do zmiennej jako odpowiedni numer (nazywany także indeksem), który ona przyjmuje. Schemat definicji tablicy przedstawiono poniżej:
MojaNazwa Array [lo .. hi] of type
Definicja tablicy polega na podaniu nazwy (w przykładzie MojaNazwa) oraz:
- lo – dolny zakres tablicy. Zakres może być wartością ujemną, minimum to -32768,
- hi – górny zakres tablicy. Maksymalny zakres to +32767,
- type – typ danych, które będzie zawierać tablica. Może to być dowolny typ poza Array.
Jak widzimy, do określenia zakresu tablicy można użyć liczby ujemnej. Jednak z reguły numerowanie elementów tablicy zaczyna się od 0 lub 1. Definicja tablicy w języku S7-SCL przedstawia poniższy kod.
MojaPierwszaTablica Array [0 .. 3] of USInt
W ten sposób została wykonana definicja czteroelementowej tablicy, która przechowuje elementy typu USInt. Ważny jest sposób adresacji, ponieważ znacznie się różni od języka C. Przykład przypisania wartości do tablicy MojaPierwszaTablica przedstawia listing poniżej:
#MojaPierwszaTablica[0] := 10; #MojaPierwszaTablica[1] := 20; #MojaPierwszaTablica[2] := 30; #MojaPierwszaTablica[3] := 40;
W języku S7-SCL można wykorzystać każdy element z zadeklarowanego przedziału. Duża zaletą jest również zgłaszanie błędu przez kompilator w przypadku przekroczenia zakresu wielkości tablicy w programie.
Język SCL pozwala także na tworzenie tablic wielowymiarowych.
Bloki danych DB
Jedną z możliwości przechowywania danych w przypadku tworzenia kod programu do sterowników PLC jest blok danych nazywany Data block (DB). Są dwa typy bloków DB. Dzisiaj poznasz tylko jeden. Jest to typ globalny. Jak nazwa wskazuje, jest to globalny DB, zatem dostęp do wszystkich zmiennych znajdujących się w określonym bloku danych typu globalnego jest możliwy z każdego miejsca w kodzie programu. Z każdej funkcji można odwołać się do tego globalnego DB.
Tworzenie nowego bloku danych
Dodanie nowego bloku DB do projektu wygląda podobnie, jak utworzenie nowego bloku organizacyjnego OB. W drzewie projektu należy rozwinąć folder Program block i następnie wybrać Add new block. Wówczas pojawi się okno, jak na poniższym rysunku
W lewym dolnym rogu wybieramy Data block. W polu Name wpisujemy MyDB. W polu Type zostawiamy Global DB. Zostawiamy automatyczną numerację bloków danych. Zatwierdzamy wybierając przycisk OK.
W ten sposób mamy dodany nowy blok danych gdzie można dodawać zmienne.
Deklarowanie stałych
Podczas tworzenia kodu programu niejednokrotnie trzeba użyć zmiennej, która będzie miała przez cały czas wykonywania programu taką samą wartość. Programista chce mieć też pewność, że żaden fragment kodu programu nie zmieni tej wartości. Do tego typu zastosowań służą stałe, które występują w każdym języku programowania.
W TIA Portal definicja stałych polega na rozwinięciu z drzewa projektu PLC tags i kliknięciu na Add new tag table. Zostanie utworzona nowa tabela. Zmieniamy nazwę na CONST i otwieramy tabelę. Przechodzimy do zakładki User constants i możemy definiować nową stałą.
W ramach ćwiczeń utwórzmy stałą określającą prędkość obrotową silnika dla wolnych obrotów. Deklaracje przedstawia poniższy rysunek:
Została utworzona stała CONST_SLOW_MOTION. Dobra praktyka programowania mówi, aby nazwy pisać dużymi literami. Wówczas wyróżniają się w kodzie programu.
Nowe typy zmiennych
Tworzony przez programistę typ zmiennej grupuje logicznie powiązane ze sobą dane w taki sposób, aby można było odwołać się do nich wykorzystując wspólną nazwę. Ten złożony typ danych nazywany jest strukturą. Typy danych tworzące strukturę nie muszą być tego samego typu. Struktury pozwalają w klarowny sposób opisywać proste jak i złożone obiekty. Przykładem może być silnik, z którym wiąże się zawsze co najmniej kilka parametrów takich jak kierunek, obroty, stan pracy.
Tworzenie struktury
W drzewie projektu znajduje się PLC data types, który służy do deklaracji nowych struktur. Procedura tworzenia polega na kliknięciu Add new data type. Wówczas otworzy się nowo utworzone okno. Należy zmienić nazwę określającą tworzoną strukturę. W naszym przykładzie będzie to stt_Motor. Dodanie przedrostka stt podkreśla, że jest to struktura.
Okno ze zdefiniowanymi parametrami w strukturę przedstawiono na poniższym rysunku:
Tak zdefiniowaną strukturę możemy traktować jako nowy typ podczas definicji zmiennych w bloku danych DB.
Rozwiązanie zadania
Podczas omawiania podstaw utworzyliśmy jedną stałą oraz strukturę. Teraz tagi opisujące wejścia i wyjścia cyfrowe. Tablice PLC tags przedstawiono poniżej:
W tablicy Input widzisz dwa tagi opisujące adresy wejść cyfrowych do których są podłączone przełączniki, natomiast tablica Output zawiera dwa tagi opisujące adresy wyjść cyfrowych. Do wyjść cyfrowych zostały podłączone diody LED.
W bloku danych MyDB zadeklarujemy nową zmienną typu stt_Motor. W polu Name wpisujemy nazwę zmienne, czyli w tym przypadku możemy nazwać tą zmienną Conveyor. W kolumnie Data type wpisujemy typ zmiennej, która w tym wypadku to stt_Motor. Rysunek poniżej przedstawia blok danych MyDB ze zdefiniowaną zmienną:
Teraz w bloku danych MyDB znajduje się tylko jedna zmienna. Oczywiście można w tym bloku utworzyć więcej zmiennych. Zmienne mogą być różnych typów.
Pozostało nam tylko napisać kod programu. Wszystkie instrukcje umieścimy w bloku OB1. Kod przedstawiono poniżej:
Aby odwołać się do pola w strukturze, należy posłużyć się operatorem kropki. Na początku należy podać nazwę bloku danych, czyli MyDB. Następnie wpisujemy operator kropki. W tym momencie pojawi się lista dostępnych zmiennych z tego bloku danych. Nas interesuje zmienna Conveyor, więc wybieramy tą zmienną. Wpisujemy następnie jeszcze raz kropkę, wówczas pojawiają się wszystkie dostępne pola z tej struktury. W ten sposób wygląda odwołanie do zmiennych znajdujących się w bloku danych DB.
Co robi kod umieszczony w bloku OB1? W pierwszej linii do zmiennej Rotation jest przypisywana prędkość obrotowa, która została zdefiniowana jako stała. W drugiej linii kodu do zmiennej Status jest przypisywany stan przełącznika OnOff odpowiedzialnego za uruchomienie lub zatrzymanie silnika. W trzeciej linii kodu jest przypisywana stan przełącznika Direction do zmiennej Direction znajdującej się w strukturze Conveyor. W ten sposób mamy wszystkie informacje o stanie pracy silnika zebrane w strukturze.
Korzystając z informacji o silniku ze struktury stt_Motor został napisany kod sterujący sygnalizacją aktualnego stanu pracy tego silnika.
Dowolna dioda LED może się zaświecić tylko w momencie, gdy silnik jest uruchomiony (zmienna Status jest w stanie wysokim). Wówczas w zależności od stanu zmiennej Direction jest zapalana dioda. Aby diodę zapalić odpowiadającą kierunkowi, to należy skorzystać z operatora logicznego AND.
Dioda sygnalizująca kierunek obrotów silnika w lewo zostanie zapalona tylko w momencie, gyd zmienna Status jest w stanie wysokim oraz zmienna Direction także jest w stanie wysokim. Ten warunek jest zapisany w linii piątej. Natomiast dioda sygnalizująca kierunek obrotów silnika w prawo zostanie zapalona tylko w momencie, gdy zmienna Status jest w stanie wysokim oraz zmienna Direction także jest w stanie niskim, co zostało zapisane w linii szóstej. Wykorzystano dla zmiennej Direction operator negacji NOT, aby odwrócić stan zmiennej Direction. Wówczas wartość całego wyrażenia jest prawdziwa (zobacz tablicę
prawdy dla operatora AND), co zostaje przypisane do tagu RightDirectionLED.
Pozostało nam teraz skompilować cały projekt i zaprogramować sterownik. Możemy przetestować poprawność działania napisanego kodu. Poniższy wykres obrazuje działanie programu:
Widzisz, że sygnalizacja kierunku obrotów działa w momencie, gdy przełącznik OnOff jest w pozycji On (stan wysoki). Na wejściu cyfrowym, gdzie podłączono przełącznik Direction jest stan wysoki. To powoduje, że dioda LeftDirectionLED świeci (stan wysoki). Zmiana pozycji przełącznika Direction powoduje, że dioda LeftDirectionLED gaśnie, a zapala się dioda RightDirectionLED.
Tomasz Gilewski