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 Report

Transcript 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