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 :BOOL;
END_VAR
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%I1
%I4
~STOP
%Q1 (R)
%Q1 (S)
~%Q1
LD %I1
ANDN %Q2
S %Q1
LDN STOP
OR %I4
R %Q1
FlipFlop(S:=%I1 AND NOT %Q2,
R1:=NOT STOP OR %I4);
%Q1 := FlipFlop.Q1;
Język LD
Język IL Język ST
RS
OR
AND%Q1S
R1
%I1
%Q2
STOP
%I4
Język FBD
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
Top Related