Systemy wbudowane Wykład nr 9 Programowanie sterowników PLC Piotr Bilski Wstęp • Celem programowania jest implementacja algorytmu sterowania • W normie IEC 61131 zdefiniowany jest standard programowania dla.
Download ReportTranscript Systemy wbudowane Wykład nr 9 Programowanie sterowników PLC Piotr Bilski Wstęp • Celem programowania jest implementacja algorytmu sterowania • W normie IEC 61131 zdefiniowany jest standard programowania dla.
Systemy wbudowane Wykład nr 9 Programowanie sterowników PLC Piotr Bilski Wstęp • Celem programowania jest implementacja algorytmu sterowania • W normie IEC 61131 zdefiniowany jest standard programowania dla wszystkich rodzin • Podstawowe pojęcia to model programowania i model danych Rodzaje języków programowania PLC • Języki tekstowe – IL – odpowiednik asemblera dla PLC – ST – odpowiednik C lub Pascala dla PLC • Języki graficzne – LD – język schematów drabinkowych, składa się ze styków, cewek, połączeń między nimi oraz funkcji – FBD – język funkcjonalnych schematów blokowych (schematy przepływu sygnałów) Struktura wewnętrzna programu • Opisywana przez sekwencyjny schemat funkcjonalny SFC • Jest to graf składający się z wierzchołków (kroków programu) oraz krawędzi (tranzycji między krokami) • Kroki definiowane są przez akcje programu • Tranzycje opisują warunki przejścia z jednego stanu programu do następnego Elementy języków programowania PLC • Typy danych (stałe, zmienne oraz ich wartości) • Jednostki organizacyjne oprogramowania (niezależne fragmenty programu: funkcje, bloki funkcjonalne, programy) • Elementy sekwencyjnego schematu funkcjonalnego • Elementy konfiguracji (wspomagają konfigurację sprzętu i instalację oprogramowania: konfiguracje, zasoby, zadania, zmienne globalne) Model programistyczny Zalety modelu programistycznego • Prosta reprezentacja hierarchicznej struktury zależności pomiędzy elementami programu • Łatwe wykonywanie wielu zadań w systemie wieloprocesorowym • Jednoznaczna interpretacja uruchamiania konfiguracji, zasobu itp. Model komunikacji Wymiana danych odbywa się pomiędzy: • Elementami jednego programu • Programami w ramach jednej konfiguracji • Różnymi konfiguracjami Komunikacja między elementami jednego programu • Najprostsze w realizacji • Połączenie typu wejście-wyjście (bloków funkcjonalnych) Komunikacja między różnymi programami Zmienne globalne (VAR_GLOBAL) Funkcje komunikacyjne Komunikacja między konfiguracjami – ścieżka dostępu Cele stosowania normy IEC 61131 • Bezpieczeństwo stosowania obszarów danych – wprowadzenie nazw zmiennych o określonym zasięgu – wymuszenie określenia typu danych zmiennej • Rozszerzenie możliwości jednostek organizacyjnych (wielokrotne wykorzystanie funkcji, programów itp.) • Ujednolicenie języków i technik programowania • Ujednolicenie struktury programu Struktura programu • Jednostki organizacyjne są niezależne od siebie • Rekurencje są niemożliwe (funkcja nie może wywołać samej siebie) • Bloki funkcjonalne są elementami dynamicznymi, funkcje – statycznymi • Jednostka ma następujące elementy: – Nazwa i typ (PROGRAM, FUNCTION, FUNCTION BLOCK) – Deklaracja zmiennych (wejściowych, wyjściowych i lokalnych) – Kod FUNCTION ALARM: BOOL; Deklaracje zmiennych • Zmienne przechowywane są w pamięci danych • Muszą mieć zadeklarowany typ • Zmienne są przyporządkowane adresom wejść lub wyjść • Zmienne globalne deklarowane są poza jednostkami organizacyjnymi, lokalne wewnątrz nich • Zmienne podtrzymywane bateryjnie Deklaracje zmiennych - przykład VAR S1 AT%I1 :BOOL; S2 :BOOL; END_VAR VAR RETAIN K1 AT%Q1 END_VAR :BOOL; Kod jednostki • Występuje po części deklaracyjnej • Zalecenie: kod powinien być pisany w jednym języku! • Ujednolicona strukturyzacja programu (schemat SFC oparty na sieciach Petriego) • Przykład: %Q1 := NOT(NOT STOP OR %I4) AND (%Q1 OR %I1 AND NOT %Q2) Realizacje kodu jednostki ~%Q1 %I1 %Q1 (R) ~STOP %Q1 (S) Język LD %I4 LD %I1 %I1 ANDN %Q2 S %Q1 LDN STOP OR %I4 R %Q1 Język IL %Q2 AND %Q1 RS R1 STOP %I4 S Język FBD OR FlipFlop(S:=%I1 AND NOT %Q2, R1:=NOT STOP OR %I4); %Q1 := FlipFlop.Q1; Język ST Wpływ wielozadaniowości na wykonanie programu • Problem przydziału procesora do uruchomionego zadania • Uruchomione programy mają różne priorytety • Przypisywanie zmiennych do adresów fizycznych • Szczegółowe informacje o przydziale i sposobie wykonania przechowywane są w konfiguracji Przykład konfiguracji Elementy wspólne języków • Ograniczniki – znaki specjalne (np. + _ $ = := # ; ( ) * ) • Słowa kluczowe – identyfikatory funkcji, operacji, deklaracji itp. (np. FUNCTION, VAR_INPUT, INT, BOOL, AND, ADD) • Literały – służą do przedstawiania wartości danych (stałych i zmiennych) • Identyfikatory – ciągi znaków alfanumerycznych w celu definiowania własnych zmiennych, etykiet, funkcji itp. Zmienne • Deklarowane są poza POU (globalne), wewnątrz (lokalne) lub jako parametry (wejściowe/wyjściowe) • Deklaracja zawiera nazwę, typ oraz atrybuty • Odwołanie do zmiennej to wskazanie na pewne miejsce w pamięci • Typ wymusza rezerwację określonej wielkości pamięci Typy danych • • • • • • • • • • • • BOOL – true/false SINT – liczby całkowite -128 do 127 INT – liczby całkowite -32768 do 32767 USINT – liczby całkowite 0 do 255 REAL – liczby rzeczywiste pojedynczej precyzji LREAL – liczby rzeczywiste podwójnej precyzji ANY_NUM – ogólne dane liczbowe ANY_DATE – ogólna data STRING – ciąg znaków o zmiennej długości BYTE – ciąg 8 bitów WORD – ciąg 16 bitów Itd. Przykłady danych • • • • • • ‘’ – ciąg pusty ‘R’ – litera R ‘$’’ – apostrof ‘$R$L’ – CR+LF T#14ms – czas trwania – 14ms t#5d14h12m18s3.5ms – dokładna godzina (time of day) • DATE#2006-04-15 Pochodne typy danych • Typy definiowane przez użytkownika • Rozpoczynają się słowem TYPE, kończą – END_TYPE • Brak możliwości deklaracji typów graficznie • Możliwe jest podawanie nazw alternatywnych (aliasów), typów wyliczeniowych, okrojonych, tablic danych oraz struktur • Zmienne otrzymują wartości domyślne Przykłady pochodnych typów danych TYPE (* typ wyliczeniowy*) ANALOG_SIGNAL_TYPE: (SINGLE_ENDED, DIFFERENTIAL) END_TYPE TYPE (* typ wyliczeniowy*) ANALOG_16_IN: ARRAY[1..16] OF ANALOG_DATA; ANALOG_ARRAY: ARRAY[1..4,1..16] OF ANALOG_DATA; END_TYPE Zmienne • Deklarowane na samym początku POU • Słowa kluczowe: VAR, VAR_INPUT, VAR_OUTPUT, VAR_IN_OUT, VAR_EXTERNAL, VAR_GLOBAL • Przykład: VAR_OUTPUT RETAIN Sivar: DINT := 240; END_VAR Zmienne proste • Są to zmienne przechowujące jedną wartość • Adres poprzedza symbol %, po którym następuje przedrostek lokalizacji i rozmiaru: – – – – – – – I – wejście O – wyjście M – pamięć X – jeden bit B – jeden bajt W – słowo D – podwójne słowo Przykłady zmiennych prostych %QX45 – 45. bit wyjścia %IW20 – 20. słowo wejścia %MB7 – 7. bajt w pamięci (pod adresem 7) %IW2.5.7.1 – adresowanie hierarchiczne (np. 1. słowo wejścia 7. gniazda w 5. kasecie na 2. magistrali) 10010101 Jednostki organizacyjne oprogramowania • Stanowią niezależne moduły w aplikacji użytkownika • Funkcja jest blokiem o parametrach wejściowych, produkującą wartość wyjściową • Blok funkcjonalny ma wejścia i wyjścia, generacja sygnałów wyjściowych zależy od wejść i historii • Program jest najwyższą jednostką, wszystkie funkcje i bloki muszą znajdować się wewnątrz niego Funkcje • Produkują jeden element danych wyjściowych • Prezentowane graficznie jako prostokąty • Możliwe dodatkowe wejście EN i wyjście ENO (relacja: 0 -> 0, 1 -> 1) • Przykłady: Bloki funkcjonalne • Mogą produkować wiele wartości wyjściowych • Są elementami dynamicznymi (informacja o stanie – pamięć!) • Blok może być wykonywany w programie wielokrotnie, ale za każdym razem konieczna jest rezerwacja pamięci – ukonkretnienie egzemplarza • Brak możliwości deklarowania zmiennych reprezentowanych bezpośrednio (%I, %Q, %M) Programy • Odpowiedniki „programu głównego” w klasycznych językach programowania • Nie są wywoływane jawnie przez inne POU • Można w nich deklarować zmienne reprezentowane bezpośrednio • Program w trakcie wykonania jest kojarzony z zadaniem