Sterowniki programowalne Systemy SCADA Programowanie w systemach SCADA Języki programowania sterowników PLC Sebastian Plamowski
Informacje ogólne - prowadzący dr inż. Sebastian Plamowski (wykład, laboratorium) mgr inż. Patryk Chaber (wykład, laboratorium) mgr inż. Andrzej Wojtulewicz (wykład) Kamil Czerwiński (laboratorium)
Plan na najbliższy miesiąc 15.03 – wykład wprowadzający/ języki dr inż. Sebastian Plamowski 22.03 – wolne 29.03 – wykład L1 mgr inż. Patryk Chaber 05.04 – wykład L2 mgr inż. Andrzej Wojtulewicz 12.04 – wykład L2 mgr inż. Patryk Chaber Laboratorium 05.04 – 17.04 L1 19.04 – 08.05 L2 10.05 –22.05 L3 24.05 – 07.06 L4 (L3 i L4 jest w CS402 traktowane jako jedno lab)
Struktura Informatyczna przedsiębiorstwa MRP Material Requirements Planning MRPII Manufacturing Resource Planning ERP Enterprise Resource Planning ERPII (eERP) Enterprise Resource Planning CIM Computer Integrated Manufacturing CAD Computer Aided Design CAM Computer Aided Manufacturing MES Manufacturing Execution System SCM Supply Chain Management DRP Distribution Resource Planning CIM Computer Integrated Manufacturing MES Warehouse Management systems
Miejsce systemów SCADA SCADA (Supervisory Control And Data Acquisition) DCS (Distributed Control system)
Co to jest system SCADA
Funkcje systemów SCADA komunikację z aparaturą sterującą i stacjami operatorskimi, przetwarzanie zmiennych procesowych, oddziaływanie na proces (sterowanie, regulacja), kontrolę procesu i sygnalizację alarmów, raportowanie i archiwizacje danych, wizualizację graficzną przebiegu procesu na schematach, wykresach, itp., konfigurowanie struktur algorytmicznych i obrazów synoptycznych, wymianę danych z innymi systemami poprzez sieci FAN, LAN, WAN itd. Inne: optymalizacja procesów, diagnostyka stanu urządzeń Symulacja (prognozowanie, testy dla operatorów)
Użytkownicy systemów DCS i SCADA Operatorzy procesu (praca zmianowa 24h) Kierownicy zmiany Inżynierowie systemowi Administratorzy
Programowanie w systemach SCADA Programowanie HMI na poziomie stacji operatorskich Programowanie skryptów/programów na poziomie stacji operatorskiej Programowanie komputerów przemysłowych/sterowników PLC
Programowanie w systemach SCADA Programowanie na poziomie stacji operatorskich Programowanie grafik operator HMI (DCS i SCADA) Kolorystyka Standardy Nawigacja Typy stacyjek Potwierdzanie alarmów Usability – zasady projektów GUI i reklamy Wykorzystano: http://www.projektowaniegraficzne.pl/zasady-projektowania-grafiki-i-reklamy
Programowanie HMI - środowisko
Przykładowa grafika
Programowanie HMI – usability (Złota Proporcja) Złota Proporcja może być opisana w ten sposób, że stosunek miedzy elementami danego ksz tałtu jak np. wysokość i szerokość musi wynosić w przybliżeniu 0.618. Jeśli Złota Proporcja jest dobrze użyta w projekcie, bardzo pomaga w jego pozytywnym odbiorze.
Programowanie HMI – usability (Zasada podziału na trzy) Zasada ta mówi, ze oglądający w większości przypadków będzie oglądał te punkty na kompozycji, miejscu których przecinają się linie. Dodatkowo dobrze jest umieszczać bardziej wartościowe elementy projektu równo z tymi liniami.
Programowanie HMI – usability (Prawo Hicka) Prawo Hicka i niekorzystny paradoks wyboru. Czyli kiedy mniej produktów, oznacza więcej zysków. Prawo Hicka mówi o tym, że każdy wybór, który musi zostać wykonany, zwięk sza jego czas. Oznacza to, że czym więcej użytkownik musi dokonać wyborów tym trudniejsze jest skorzystanie z „oferty” Im więcej wyborów musi dokonać odbiorca, tym mniej skuteczna będzie Twoja oferta. Tak naprawdę to prawo mówi o potrzebie prostoty. Klasyczny case study prawa Hicka przedstawia sklep z warzywami, który wystawił darmowy dżem do próbowania przez klientów. W jednym przykładzie mają oni więcej niż 40 do spróbowania i wyboru, a w drugim tylko kilka. Zaobserwowano, że klienci kupili więcej dżemów, jeśli prezentowane były tylko cztery rodzaje zamiast 40 i więcej. Większość klientów decydowała się w ogóle na brak zakupu, jeśli miała do wyboru tak ogromną ilość.
Programowanie HMI – usability (Prawo Fittsa) Prawo Fittsa można opisać w ten sposób: „Czas potrzebny do dojścia do celu jest funkcją wielkości celu i odległości do niego” Prawo to również działa w drugą stronę. Dokładniej mówiąc, pewne elementy interfejsu powinny być trudniejsze do kliknięcia. Przykładem jest przycisk lub odnośnik anulowania akcji. Dlatego możemy często zauważyć w różnych aplikacjach duży przycisk zapisania, a mały anulowania.
Programowanie HMI – usability (Prawo bliskości) Prawo bliskości jest często niedostrzegane, nawet przez doświadczonych projek tantów. Prawo to stwierdza, że elementy, które są w jakiś sposób ze sobą pow iązane, przedstawiane są w jakiejś relacji i umieszczane blisko siebie. Brzmi to bardzo prosto i wydaje się być oczywiste, ale często bywa pomijane. Prawo to oznacza, że musisz być bardzo świadomy, jak wiele przestrzeni jest między elementami danego projektu. Jeżeli w projekcie masz zbyt wiele elementów, które są blisko siebie, odbiorca stwierdzi, że jest to zrobione celowo i że te elementy są ze sobą powiązane. Na przykład przycisk wyszukiwania, który jest za blisko przycisku zapisywania czy anulowania spowoduje przypuszczenie, że przyciski zapisu i anulowania są pow iązane z samym wyszukiwaniem. Warto więc zadbać o odpowiednią odległość między takimi elementami w projekcie. W bliskim sąsiedztwie starajmy się umieszczać takie elementy, które są ze sobą powiązane.
Programowanie HMI – usability (Komunikaty zwrotne) Komunikaty zwrotne są techniką, opanowaną przez projektantów przemysłowych od wielu dekad. Komunikaty zwrotne przekazują użytkownikowi informacje o tym, że coś się stało, się dzieje lub się stanie. Komunikacja z użytkownikiem jest czymś fundamentalny.
Programowanie HMI – usability (Brzytwa Ockhama) Brzytwa Ockhama. Najprostsze rozwiązanie jest zawsze najlepsze. „Wszystko powinno być tak proste, jak to tylko możliwe, ale nie prostsze.” - Albert Einstein Przeładowanie plansz powoduje że stają się nieczytelne i trudne do utrzymania Projekty proste są eleganckie, wysublimowane i o wiele bardziej efektywne niż skomplikowane udekorowane stylizacje.
High Performance HMI – nowy trend
Example: Condensate screen
Example: Heaters with valves
Main sequence
High Performance HMI
P&ID (Piping and instrumentation diagram/drawing) schematy stanowiły podstawę grafik
Programowanie skryptów/programów na poziomie stacji operatorskich w SCADA W SCADA dopuszcza się w pewnych przypadkach programowanie skryptów, które mają na celu odciążenie obliczeń wykonywanych na PLC. Proste okienka do wpisania formuł matematycznych – operacje w ramach jednego punktu wyjściowego. Wyzwalane na zdarzenie (wartość punktu) lub czasowo Skrypty obliczeniowe pisane w językach skryptowych często o własnej składni lub BASIC/PASCAL/C. Większość operacji matematycznych, tablice, instrukcje IF, FOR, WHILE. Dostęp odczyt/zapis do punktów. Wyzwalane na zdarzenie (wartość punktu) lub czasowo. Skrypty wywoływane z HMI, pozwalające na programowanie ekstra funkcjonalności (głównie graficznej). Programowanie w większości języków wysokiego poziomu, np. ostatnia wersja MAPS pozwala na programowanie w #C
Programowanie komputerów przemysłowych/sterowników PLC Norma IEC 61131-3 „Programmable Controllers" standaryzująca sposoby programowania składa się z pięciu części: Informacje ogólne (General Information), Sprzęt i wymagania testowe (Equipment and Test Requirements), Języki programowania (Programing Languages), Wytyczne użytkownika (User Guidelines), Wymiana informacji (Messaging Service).
Norma IEC 61131-3 – języki programowania Część trzecia normy IEC 61131-3 dotyczy języków programowania i stanowi jej najważniejszą część. Przede wszystkim dzięki niej ujednolicono koncepcję programowania PLC tak, aby w oparciu o wprowadzone zasady, użytkownik był w stanie programować bez większych trudności różne systemy PLC (CoDeSys software). IEC 61131-3 definiuje pojęcia podstawowe, zasady ogólne, model programowy i model komunikacyjny (wymiana danych między elementami oprogramowania) oraz podstawowe typy struktury danych. Określono w niej dwie grup języków programowania: Języki tekstowe i graficzne.
Język tekstowy IL (Instruction List) Język listy instrukcji IL (Instruction List), będący odpowiednikiem języka typu asembler, którego zbiór instrukcji obejmuje operacje logiczne, arytmetyczne, operacje relacji, jak również funkcje przerzutników, czasomierzy, liczników itp. Język listy instrukcji jest językiem niskiego poziomu i ma składnię podobną do języków typu asembler. Program w tym przypadku składa się z sekwencji rozkazów, z których każdy kolejny zaczyna się w nowej linii. Każda instrukcja składa się z operatora, który określa działanie do wykonania oraz operandu, czyli stałej lub zmiennej. Przykładami operatorów są: LD, który ładuje operand, JMP, który wykonuje skok do etykiety o nazwie określonej operandem, CAL, który wywołuje blok funkcyjny o nazwie takiej jak operand tej instrukcji oraz RET realizujący powrót z wywołanego wcześniej bloku lub funkcji. Dostępne są też operatory arytmetyczne (ADD, SUB, MUL, DIV), porównania (GT, GE, EQ, NE, LE, LT) oraz logiczne (AND, OR, XOR, NOT). Podstawą działania języka IL jest Akumulator (A) – jest to rejestr w pamięci, który jest wykorzystywany do: wczytywania do niego wartości z komórek pamięci PLC, wykonywania operacji matematycznych, przechowywania tymczasowych wyników, kopiowania stanu akumulatora do wybranych komórek pamięci.
Język tekstowy IL – przykładowy kod
Język IL instrukcje Allen Bradley
Zalety język tekstowego IL instrukcje Duże podobieństwo do języka maszynowego Znajoma forma dla programistów asemblera Duża zwartość programów Kontrola typów wynikająca z konieczności korzystania z akumulatora Łatwa implementacja kompilatora
Wady język tekstowego IL instrukcje Trudna czytelność programu (w stosunku do innych języków) Korzystanie z pośrednictwa akumulatora i stosu akumulatora nie jest intuicyjne Dostosowanie użytkownika do maszyny, a nie maszyny do użytkownika Nauka tego rodzaju programowania jest trudniejsza niż języka drabinkowego
Język tekstowy ST (Structured Text) ST, drugi język typu tekstowego. Jego składnia jest podobna do składni na przykład języków C lub Pascal. Podstawowymi elementami są wyrażenia oraz instrukcje (polecenia), m.in. przypisania (:=), wyboru (IF, CASE), pętle (FOR - gdy liczba powtórzeń jest znana, WHILE oraz REPEAT - gdy liczba iteracji jest nieokreślona). Wyrażenia dostarczają wartości odpowiadające określonemu typowi danych. Składają się one z operatorów i operandów. Operandem może być zmienna, stała, funkcja lub inne wyrażenie. Język strukturalny ST (Structured Text) przeznaczony jest głównie do opisu złożonych wyrażeń, których nie można zrealizować w językach graficznych (lub jest to bardzo utrudnione).
Jezyk ST – przykładowy kod W wypadku języka tekstu strukturalnego w jednej linii można zamieścić kilka instrukcji, a każda z nich powinna być zakończona średnikiem. W języku ST można implementować złożone prawa regulacji, co nie jest możliwe w żadnym innym języku!
Język tekstowy ST - operatory
Język tekstowy ST – typy danych W języku ST można użyć następujących typów danych: BOOL (boolean or discrete) BYTE (8-bit string) INT (16-bit integer) UINT (16-bit unsigned integer) WORD (16-bit string) DINT (32-bit integer) REAL (32-bit floating-point value) DWORD (32-bit string) LREAL (64-bit floating-point value) Również mogą być używane struktury i tablice zmiennych
Jezyk tekstowy - zalety Możliwość implementacji złożonych algorytmów w zasadzie nie możliwych do implementacji w innych językach. Powszechne zrozumienie wśród młodszej kadry inżynieryjnej
Język graficzny LD (Ladder Diagram) Język schematów drabinkowych LD (Ladder Diagram), podobny do stykowych obwodów przekaźnikowych, w którym dopuszcza się użycie także funkcji: arytmetycznych, logicznych, porównań i relacji jak również bloków funkcyjnych: przerzutników, czasomierzy, liczników, regulatora PID czy bloków programowych.
Język graficzny LD – podstawowe symbole Styk przekaźnika normalnie otwarty Styk przekaźnika normalnie zamknięty Przekaźnik normalnie otwarty Przekaźnik normalnie zamkniety
Język graficzny LD – organizacja programu Program wykonywany jest sekwencyjnie od lewej do prawej z góry na dół ( wyjątkiem są instrukcje skoku)
Język graficzny FBD (Functional Block Diagram) Język schematów blokowych FBD (Function Block Diagram), będący odpowiednikiem schematów przepływu sygnału dla obwodów logicznych przedstawionych w formie połączonych bramek logicznych oraz bloków funkcyjnych takich jak w języku LD.
Język graficzny FBD (Functional Block Diagram) FBD (Function Block Diagram) jest językiem graficznym. Realizacja programu w tym języku jest oparta na przepływie sygnału. Wykorzystuje on gotowe bloki funkcyjne lub procedury przygotowane przez producenta w postaci bibliotek. Funkcje widziane są w edytorze programu jako prostokąty z opisanymi zmiennymi wejściowymi i wyjściowymi. Tworzenie aplikacji w tym języku polega na wyborze odpowiedniego bloku funkcyjnego i umieszczeniu w odpowiednim miejscu na schemacie i połączeniu z innymi blokami. Program napisany w FBD może składać się z pojedynczego schematu blokowego lub grupy schematów blokowych wykonywanych zgodnie z określoną sekwencją Bloki mogą być połączone jawnie lub niejawnie (poprzez zmienne), mogą występować pętle.
Język graficzny FBD (Functional Block Diagram)
Język graficzny FBD (Functional Block Diagram)
Język SFC (Sequential Function Chart) Ponadto w normie IEC 1131-3 przedstawiono sposób tworzenia struktury wewnętrznej programu w postaci grafu sekwencji SFC (Sequential Function Chart), który pozwala na opisywanie zadań sterowania sekwencyjnego za pomocą grafów zawierających etapy (kroki) i warunki przejścia (tranzycji) miedzy tymi etapami. Grafy SFC mogą być wykorzystane przy programowaniu sterownika w jednym ze zdefiniowanych w normie języków w celu otrzymania odpowiedniej struktury programu użytkownika.
Język SFC (Sequential Function Chart) SFC (Sequential Function Chart) pozwala na opisywanie zadań sterowania sekwencyjnego za pomocą grafów zawierających etapy (kroki) i warunki przejścia (tranzycji) miedzy tymi etapami. Grafy SFC mogą być wykorzystane przy programowaniu sterownika w jednym ze zdefiniowanych w normie języków w celu otrzymania odpowiedniej struktury programu użytkownika. SFC raczej jest rozumiany nie jako osobny język programowania, a jako sposób organizacji programów, napisanych w innych językach; tak, według sformułowania Polskiego Komitetu Normalizacyjnego, SFC to "zbiór elementów graficznych i równoważnych im elementów tekstowych ... zdefiniowany w celu utworzenia wewnętrznej organizacji programów i bloków funkcyjnych sterownika programowalnego"
Język SFC (Sequential Function Chart) Naturalnym zastosowaniem SFC jest oprogramowanie sekwencji rozruchu lub zatrzymania urządzenia, instalacji. Rozruch instalacji wymaga spełnienia pewnych warunków w określonym czasie, naturalnym jest wykorzystanie sposobu programowania, które pozwala w sposób bezpośredni przenieść wymagania na kod.
Wybór właściwego języka Mając do dyspozycji kilka różnych języków programowania, przed wyborem konkretnego z nich należałoby odpowiedzieć sobie na kilka kluczowych pytań. Oczywiście naszą naturalną tendencją jest pozostawanie przy tym, który znamy. Jednak zawsze warto wziąć pod uwagę umieszczoną poniżej listę cech całej piątki: łatwość nadzoru przez użytkownika końcowego: SFC (Sequential Functional Chart), powszechność i akceptacja języka: LD (Ladder Diagram), znajomość i akceptacja w Europie: LD lub ST (Structured Text), prędkość wykonywania przez PLC: IL lub ST, aplikacje wykorzystujące głównie cyfrowe We/Wy oraz prosta regulacja ciągła: LD lub FBD (Functional Block Diagram), łatwość dokonywania zmian w kodzie: LD, łatwość i umiejętność obsługi przez młodych inżynierów: ST, łatwość w implementacji skomplikowanych operacji matematycznych, pętli: ST, aplikacje, które cechują powtarzające się operacje lub procesy wymagające łączenia i jednoczesności operacji: SFC. Należy tez mieć na uwadze ze poszczególne modele sterowników PLC można programować np tylko niektórymi z podanych języków.