Wstęp do PLC Sławomir Mamica Spis treści: 1. Ogólnie o PLCach 2. Programowanie w LD 3. Funkcje i bloki 4. Obsługa programu CoDeSys 5. Przykładowe zadania Literatura: Jerzy Kasprzyk, Programowanie sterowników przemysłowych, (WNT, 2006)
Ogólnie o PLCach
PLC Programmable Logic Controller (Programowalny Sterownik Logiczny) Uniwersalne urządzenie mikroprocesorowe przeznaczone do sterowania pracą maszyny lub urządzenia technologicznego
Budowa sterownika
Dane użytkownika Pamięć przeznaczona na dane użytkownika dzieli się na obszary: dane wejściowe, zawierające obraz wejść sterownika, wg normy IEC 61131-3 oznaczane przez %I lub %IX, dane wyjściowe, zawierające obraz wyjść sterownika, wg normy IEC 61131-3 oznaczane przez %Q lub %QX, dane pomocnicze, dane zadeklarowane w programie użytkownika, ale nie przypisane do wejść ani wyjść.
Moduły wejść-wyjść Pośredniczą w wymianie danych z otoczeniem. Dzielą się na dwa typy: cyfrowe (Digital Input, Digital Output), analogowe (Analog Input, Analog Output). Wszystkie sygnały trafiające do CPU muszą mieć postać cyfrową sygnał wejściowy analogowy jest dekodowany (A/C) (podobnie sygnał wyjściowy C/A).
Podłączenie predefiniowanych zmiennych wejściowych cyfrowych (IX, X = 1, 2, ), analogowych (IX_Analog) oraz wyjściowy cyfrowych (QX) do elementów sterujących (przyciski, potencjometry) oraz sterowanych (diody).
Podstawowe zadanie sterownika Generowanie sygnałów sterujących w odpowiedzi na zmiany sygnałów wejściowych, zgodnie z przyjętym algorytmem sterowania lub regulacji. Zadanie to realizowane jest poprzez cykliczny odczyt stanu sygnałów wejściowych sterownika, realizację programu użytkownika oraz aktualizację sygnałów wyjściowych sterownika. Pojedynczy cykl pracy sterownika zwany jest cyklem programowym (ang. Program Sweep).
Cykl programowy Pojedynczy cykl pracy sterownika. Realizowany w zewnętrznej, bezwarunkowej pętli typu WHILE. Podzielony na fazy. Odpowiednio krótki (aby zapewnić pracę w czasie rzeczywistym). Możliwość ustawienia czasu trwania cyklu na stałą wartość (Constant Sweep). Zależnie od trybu pracy sterownika niektóre fazy mogą nie występować lub podlegać ograniczeniom.
Fazy cyklu programowego Kolejna faza zaczyna się dopiero po zakończeniu poprzedniej! Porządkowanie cyklu (Housekeeping). Czytanie stanów wejść (Data Input). Wykonanie programu użytkownika (Program Execution). Aktualizacja stanów wyjść (Data Output). Obsługa urządzeń zewnętrznych (Service External Devices). Wykonanie funkcji diagnostycznych (Diagnostics).
Programowanie w LD
Programowanie PLC Schemat drabinkowy (Ladder diagram, LD) Należy do grupy języków graficznych Powstał jako odpowiednik stykowych obwodów przekaźnikowych, w którym oprócz symboli styków, cewek i połączeń między nimi, dopuszcza się także użycie funkcji (np. arytmetycznych, logicznych, porównań, relacji) oraz bloków funkcjonalnych (np. przerzutniki, czasomierze, liczniki). Język IL (Instruction List - Lista rozkazów), będący odpowiednikiem asemblera, którego zbiór instrukcji obejmuje operacje logiczno-arytmetyczne, operacje relacji, jak również funkcje przerzutników, czasomierzy, liczników itp. Programowanie w IL nie jest wymagane na egzaminie
Styki i cewki w LD Klucz (przycisk) Cewka zwierny X rozwierny X Q1 Q2 Odpowiedniki w LD: X X Q1 Q2 Odpowiedniki w IL: LD X LDN X ST Q1 STN Q2 (zmienna do CR) (z CR do zmiennej)
Funkcje logiczne w LD Szczebelek drabiny funkcja logiczna Przycisk argument funkcji Wartość funkcji cewka Jeśli szczebelek przewodzi, to wartość funkcji przez niego realizowanej wynosi 1. Zawsze 1 Funkcja logiczna Wartość funkcji
Bramki logiczne w LD AND: a b Q NAND: a b Q OR: a Q NOR: a Q b b XOR: a b Q XNOR: a b Q a b a b
Przerzutniki Przerzutnik (ang. flip-flop) jest to układ sekwencyjny, którego sygnał na wyjściu może zależeć od stanu na jego wejściu lub od jego stanu wewnętrznego. Istnieją trzy rodzaje przerzutników bistabilne, monostabilne oraz astabilne. W układach cyfrowych najczęściej stosowane są przerzutniki bistabilne mogące być stosowane jako układy pamiętające. Grupa połączonych ze sobą przerzutników bistabilnych może tworzyć tzw. rejestr.
Przerzutnik typu RS Przerzutnik asynchroniczny (choć jest też wersja synchroniczna) Wejście Set Wejście Reset Q Q Wyjścia Działanie: Set ustawia (przypisuje 1) wyjście Q Reset zeruje wyjście Q
Przerzutnik typu RS / SR RS R - priorytetowy SR S - priorytetowy Funkcja przełączająca Q = ( Q + S) R Funkcja przełączająca Q = QR + S Algebra kluczy : Algebra kluczy : Q R Q Q R Q S S
Cewki S i R Cewka S (Set) ustawiająca W odpowiedzi na 1 ustawia zmienną (ale nie może zmiennej wyzerować!) S Cewka R (Reset) zerująca W odpowiedzi na 1 zeruje zmienną (ale nie może zmiennej ustawić!) R
Przerzutniki raz jeszcze RS Przycisk S - ustawia Przycisk R - zeruje S R Q S Q R SR Przycisk R - zeruje Przycisk S - ustawia R S Q R Q S
Funkcje i bloki
Funkcje a bloki funkcyjne Podstawowa różnica między funkcją a blokiem funkcyjnym: wywołanie funkcji z tymi samymi argumentami (parametrami wejściowymi) zawsze daje tę samą wartość na wyjściu (wartość funkcji), wywołanie bloku funkcyjnego z tymi samymi parametrami wejściowymi nie musi prowadzić do tych samych wartości wyjściowych. Przyczyna: zmienne wewnętrzne bloku funkcyjnego są pamiętane pomiędzy kolejnymi wywołaniami przechowując informację o jego stanie wewnętrznym ( element dynamiczny ), zmienne wewnętrzne funkcji nie są pamiętane ( element statyczny ).
Bloki funkcyjne Egzemplarz (ukonkretnienie, instancja, ang. instance) bloku funkcyjnego zmienna typu będącego blokiem funkcyjnym. Posiada unikalną nazwę oraz własną realizację struktury danych. (Podobnie do obiektu określonej klasy w językach programowania wyższego poziomu.) Dzięki temu wartości zmiennych wewnętrznych i wyjściowych są przechowywane pomiędzy kolejnymi wywołaniami (w kolejnych cyklach programowych). Zwraca wartości poprzez zmienne wyjściowe może ich być więcej niż jedna. Nazwa egzemplarza może być użyta na wejściu funkcji lub innego bloku funkcyjnego.
Bloki funkcyjne Deklaracja bloku funkcyjnego (a w zasadzie typu będącego blokiem funkcyjnym): Słowo kluczowe Nazwa (typu) Deklaracje zmiennych: Wejściowych Wyjściowych Wewnętrznych
Bloki funkcyjne Użycie bloku funkcyjnego w LD (dwa egzemplarze) Typ bloku Nazwa egzemplarza Poszczególne egzemplarze deklarowane tak jak inne zmienne w jednostce wywołującej
Bloki funkcyjne Zmienne wejściowe i wyjściowe w egzemplarzu występują w takiej samej kolejności jak w deklaracji Deklaracja bloku Realizacja bloku Sposób komunikacji z blokiem funkcyjnym zmienne wewnętrzne są niewidoczne
Bloki funkcyjne Przypisanie zmiennych uwaga na typ Deklaracja bloku Deklaracje zmiennych w jednostce wywołującej Realizacja bloku
Bloki funkcyjne Deklaracja bloku Pierwsza zmienna na liście zmiennych wejściowych oraz wyjściowych BOOL pogrzebna do zawieszenia drabince bloku na Jeśli inna błąd przypisania Realizacja bloku
Bloki funkcyjne Przypisanie zmiennych zakres deklaracji zmiennych Zmienna zadeklarowana w jednostce wywoływanej Zmienna zadeklarowana w jednostce wywołującej Każda z nazw zmiennych jest unikalna w swojej jednostce POU więc nie ma konfliktu (to nie dotyczy nazw typów, np. nazwy typu bloku funkcyjnego) Wyjątek 2: egzemplarz jako zmienna globalna
Funkcje Funkcja nie posiada zmiennych wyjściowych. Zwraca wartość (tylko jedną) poprzez nazwę funkcji, więc w ciele funkcji trzeba jej nazwie przypisać wynik. Nie posiada egzemplarzy wartości zmiennych wewnętrznych nie są przechowywane pomiędzy kolejnymi wywołaniami. Zmienne lokalne funkcji nie są pamiętane, nawet gdyby je zadeklarować jako RETAIN (bateryjne podtrzymanie zmiennych). Podobnie jak dla bloków funkcyjnych, zmienne wejściowe w wywołaniu pojawiają się w takiej kolejności jak w deklaracji. Pierwsza zmienna wejściowa powinna być typu BOOL (do zawieszenia funkcji na drabince).
Funkcje Deklaracja funkcji Słowo kluczowe Nazwa funkcji Deklaracje zmiennych: Wejściowych Typ zwracanej wartości Wewnętrznych Brak zmiennych wyjściowych Przykładowe przypisanie wyniku do nazwy funkcji
Funkcje Użycie funkcji w LD (dwa razy) Brak egzemplarzy na liście zmiennych jednostki wywołującej. Nazwa funkcji przypisana do zmiennej Brak możliwości kontynuowania szczebelka po użyciu funkcji.
Bloki z wejściem EN W drabinkach funkcje są wywoływane w postaci bloków z wejściem EN. Aby funkcja została wywołana na EN musi pojawić się 1. Co daje możliwości warunkowego wywołania funkcji. (Nie tylko funkcje można obudować blokiem z EN.)
Obsługa programu CoDeSys
Moeller CoDeSys Demo (free): http://www.moeller.pl/desktopdefault.aspx?pageid=813
W wersji DEMO
Typ POU + język funkcjonalny, funkcyjny Diagram drabinkowy
Okno robocze
Wstawianie elementów programu Wstaw przycisk (szeregowo) Wstaw cewkę Wstaw przycisk równolegle do zaznaczonego fragmentu Neguj cewkę lub przycisk Przełącz cewkę na: setującą / resetującą / zwykłą
Wstawianie elementów programu Z menu Wstaw (Insert) oraz Dodatki (Extras) lub menu kontekstowego: Wstaw szczebelek (przed lub za zaznaczonym) Neguj cewkę lub przycisk Wstaw przycisk (szeregowo) Wstaw przycisk równolegle do zaznaczonego fragmentu Wstaw cewkę Wstaw blok funkcyjny Przełącz cewkę na: setującą / resetującą / zwykłą
Deklarowanie zmiennych Po wpisaniu nazwy zmiennej (z wyjątkiem predefiniowanych) pojawia się okienko deklaracji zmiennych: Klasa: wejściowe, wyjściowe, wewnętrzne Nazwa zmiennej Typ zmiennej
Simulation mode On logowanie do wirtualnego sterownika (brak wymiany informacji ze sprzętem) (konieczność wymuszenia stanu zmiennych dwuklik + F7) Off logowanie do rzeczywistego sterownika (musi być fizycznie podłączony) (odczyt ze sterownika nadrzędny nad odczytem z wizualizacji - por. dalej)
Uruchomienie programu 1. Logowanie
Uruchomienie programu 2. Ładowanie programu jeśli nie ma błędów!!! Możliwe błędy: Komunikacji (np.: brak podłączonego PLC, źle skonfigurowane połączenie, uszkodzony kabel) Programu (np.: błędy w deklaracjach zmiennych, błędy składniowe)
Uruchomienie programu 3. Start (Run) Czarny - aktywny Szary - nieaktywny Zalogowany Program uruchomiony Wymuszone wartości Tryb symulacji ON
Program w akcji Podgląd aktualnych wartości zmiennych Niebieski = 1
Ponowna edycja po wylogowaniu
Wizualizacja
Nowy zestaw ikon Obszar roboczy tu budujemy wizualizację
(Dwuklik na elemencie) Wizualizacja
Wizualizacja
Wizualizacja
Wizualizacja
Wizualizacja
Bloki funkcyjne listy zmiennych
Przykładowe zadania
Przykłady 1. Sumator liczb czterobitowych Proszę napisać program (LD) dodający dwie liczby czterobitowe (binarne). 2. Sterowanie drzwiami w tramwaju (wersja prymitywna) Proszę napisać program (LD) sterujący drzwiami w tramwaju. Tramwaj ma dwoje drzwi otwieranych na żądanie pasażera. (Osobne przyciski, z których każdy otwiera tylko jedne drzwi. Przyciski z zatrzaskiem żądanie otwarcia drzwi jest zapamiętywane.) Drzwi mogą być otwarte o ile motorniczy na to zezwoli. Włączenie blokady otwarcia drzwi jest równoznaczne z ich zamknięciem. 3. Sterowanie z histerezą (grzałka, wersja z ogranicznikami) Proszę napisać program (LD) sterujący pracą grzałki w pewnym procesie technologicznym. Układ posiada włącznik główny (przycisk) oraz dwa wejścia, na których sygnał oznacza osiągnięcie określonego poziomu temperatury: dolnego i górnego (1 na wejściu oznacza, iż temperatura jest co najmniej na danym poziomie, a 0, że jest niższa). Zadaniem sterownika jest utrzymanie temperatury pomiędzy tymi dwoma poziomami.
Uwaga, spoiler!
Podpowiedź 2. Sterowanie drzwiami w tramwaju (wersja prymitywna) Proszę napisać program (LD) sterujący drzwiami w tramwaju. Tramwaj ma dwoje drzwi otwieranych na żądanie pasażera. (Osobne przyciski, z których każdy otwiera tylko jedne drzwi. Przyciski z zatrzaskiem żądanie otwarcia drzwi jest zapamiętywane.) Drzwi mogą być otwarte o ile motorniczy na to zezwoli. Włączenie blokady otwarcia drzwi jest równoznaczne z ich zamknięciem. Najprostsze układy z pamięcią to przerzutniki. Zatrzask to inna nazwa przerzutnika. Co jest sygnałem do wyzerowania żądania otwarcia drzwi? Jeśli blokada ma również zamykać otwarte drzwi, to działa jak Reset w RS. Kluczowa jest tu właściwa kolejność cewek S i R! Tabela prawdy? We własnym zakresie :)
Realizacja w LD 2. Sterowanie drzwiami w tramwaju (wersja prymitywna) (dla drzwi 1) Przycisk pasażera Sygnałżądania otwarcia drzwi Sygnał otwierający drzwi Blokada Dlaczego po wykonaniu szczebelka nr 2 drzwi nie zaczynają się otwierać? Jeśli naciśnięty P1 to zatrzaśnij żądanie otwarcia drzwi Jeśli ustawione żądanie to ustaw sygnał otwierający drzwi Jeśli ustawiona blokada to resetuj sygnał otwierający drzwi Jeśli drzwi się otwierają to resetuj żądanie otwarcia drzwi
Podpowiedź 3. Sterowanie z histerezą (grzałka, wersja z ogranicznikami) Proszę napisać program (LD) sterujący pracą grzałki w pewnym procesie technologicznym. Układ posiada włącznik główny (przycisk) oraz dwa wejścia, na których sygnał oznacza osiągnięcie określonego poziomu temperatury: dolnego i górnego (1 na wejściu oznacza, iż temperatura jest co najmniej na danym poziomie, a 0, że jest niższa). Zadaniem sterownika jest utrzymanie temperatury pomiędzy tymi dwoma poziomami. Czyżby znowu zatrzask? Tabela prawdy znowu się przyda
Rozwiązanie 3. Sterowanie z histerezą (grzałka, wersja z ogranicznikami) Zadaniem sterownika jest utrzymanie temperatury pomiędzy dwoma poziomami. High Low Q 0 0 1 0 1 0 1? X za zimno (temp. niższa niż Low) zostaw jak było (pamiętaj Q, zatrzask) błąd 1 1 0 za ciepło (temp. wyższa niż High) Czyli: High = Reset, /Low = Set + sytuacja niedopuszczalna Oczywiście, jeśli mamy błąd, to grzałkę dobrze jest wyłączyć. Czyli RS + błąd
Rozwiązanie 3. Sterowanie z histerezą (grzałka, wersja z ogranicznikami) RS błąd
Wizualizacja 3. Sterowanie z histerezą (grzałka, wersja z ogranicznikami) Ustawiamy kolor dla 1 (Alarm) Do zmiany koloru przypisujemy zmienną (jeśli nie jest zmienną predefiniowaną to poprzedzić nazwą bloku!) Podobnie dla pozostałych tylko Grzałka i Błąd nie powinny ustawiać zmiennych! A dzięki temu klik na prostokącie przełącza wartość zmiennej
Wizualizacja w akcji 3. Sterowanie z histerezą (grzałka, wersja z ogranicznikami)
1. Sumator liczb czterobitowych Podpowiedź 1 Proszę napisać program (LD) dodający dwie liczby czterobitowe (binarne). Zorganizować dodawanie dla dwóch bitów (można w bloku funkcyjnym). Tabela prawdy może być użytecznym narzędziem.
1. Sumator liczb czterobitowych Podpowiedź 2 Proszę napisać program (LD) dodający dwie liczby czterobitowe (binarne). W systemie dwójkowym mamy tylko dwie cyfry: 0 i 1. Dodawanie jest przemienne i łączne.
1. Sumator liczb czterobitowych Podpowiedź 3 Proszę napisać program (LD) dodający dwie liczby czterobitowe (binarne). Dodajemy trzy bity (uwzględniając bit przeniesienia z poprzedniej pozycji). Nie ma znaczenia ich źródło. Otrzymujemy wynik (Q) i przeniesienie (P).
1. Sumator liczb czterobitowych Tabele prawdy dla Q i P. Funkcja przełączająca dla Q i P. Redukcja funkcji przełączających. Rozwiązanie A 0 0 0 B 0 0 1 C 0 1 0 P 0 0 0 Q 0 1 1 P = ABC + ABC + ABC + Postać zredukowana: P = BC + AC + AB ABC 0 1 1 1 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 0 Q = ABC + ABC + ABC + Postać zredukowana: ABC 1 1 1 1 1 Q = A B C XOR
Realizacja w LD 1. Sumator liczb czterobitowych (na razie jednobitowych) Q = ( A B) C = ( A B) C + ( A B)C P = BC + AC + AB
Realizacja w LD 1. Sumator liczb czterobitowych (połączyć kaskadowo sumatory jednobitowe ) Ax, Bx bity dodawanych liczb (od najmłodszych) Qx bity wyniku P przeniesienie (wystarczy jeden bit) Na pierwszym stopniu nie ma przeniesienia, więc można go uprościć (dodawanie dwóch bitów, a nie trzech).
Realizacja w LD 1. Sumator liczb czterobitowych (połączyć kaskadowo sumatory jednobitowe )
Realizacja w LD (2) 1. Sumator liczb czterobitowych (połączyć kaskadowo sumatory jednobitowe jako bloki funkcyjne) Deklaracje zmiennych wejściowych i wyjściowych!!!
I to by było na tyle