1 · Web viewPrezentacja stanu instalacji jest tworzona on-line w postaci stron internetowych...

162
Instytut Automatyki i Informatyki Stosowanej Politechnika Warszawska ul. Nowowiejska 15/19, 00-665 Warszawa tel.: (+48 22) 825 09 95 tel.: (+48 22) 660 73 97 faks: (+48 22) 825 37 19 System Monitorowania, Analizy i Raportowania Produkcji SMARP SPECYFIKACJA SYSTEMU SMARP (Raport po weryfikacji) Autorzy: prof. dr hab. inż. Krzysztof Sacha mgr inż. Wojciech Pikulski mgr inż. Adam Hurkała Warszawa, 29 listopada 2013 r. 1

Transcript of 1 · Web viewPrezentacja stanu instalacji jest tworzona on-line w postaci stron internetowych...

Instytut Automatyki i Informatyki StosowanejPolitechnika Warszawskaul. Nowowiejska 15/19,00-665 Warszawa

tel.: (+48 22) 825 09 95tel.: (+48 22) 660 73 97

faks: (+48 22) 825 37 19

System Monitorowania, Analizy i Raportowania ProdukcjiSMARP

SPECYFIKACJA SYSTEMU SMARP(Raport po weryfikacji)

Autorzy:prof. dr hab. inż. Krzysztof Sachamgr inż. Wojciech Pikulskimgr inż. Adam Hurkała

Warszawa, 29 listopada 2013 r.

Dokument powstał na zlecenie firmy ILABO Sp z o.o i został opracowany po wspólnych konsultacjach z zespołem firmy ILABO Sp z o.o. oraz wizytach w wybranych zakładach przemysłowych w Polsce i w Europiew ramach projektu” Opracowanie prototypu systemu jako usługi internetowej do monitorowania, analizy i raportowania produkcji przemysłowej, oraz opracowanie standardów wymiany danych i opisu obiektów wykorzystując nowoczesne technologie informatyczne jak XML czy technologię przetwarzania w chmurze

obliczeniowej (ang. Cloud Computing)dofinansowanym ze środków Narodowego Centrum Badań i Rozwoju w programie Innotech/Hi-tech nr.

umowy INNOTECH-K2/HI2/18/184175/NCBR/12

1

System Monitorowania, Analizy i Raportowania Produkcji Zakres dokumentu

Dokument prezentuje wyniki uzyskane podczas realizacji zadań badawczych:

1.1 Opracowanie protokołu zbierania i transmisji danych od lokalnego transpondera do serwera usługi SMARP

1.2 Opracowanie standardu opisywania maszyn i linii produkcyjnych w języku XML

1.3 Opracowanie odwzorowania danych przesyłanych w sieci przemysłowej

1.4 Opracowanie odwzorowania danych przechowywanych w serwerze OPC w dane przekazywane do serwera usługi SMARP.

opisanych w załączniku nr 1 do Umowy nr Z1/09/2011 na zakup usług badawczych w ramach realizacji projektu System Monitorowania, Analizy i Raportowania Produkcji (SMARP), zawartej pomiędzy firmą ILABO Sp. z o.o. a Politechniką Warszawską.

Treść tego dokumentu można opisać następująco:

rozdział 1 przestawia koncepcję systemu;

rozdziały 2 i 3 opisują specyfikację systemu, standard opisywania instalacji produkcyjnej oraz protokoły komunikacji serwera z transponderem i innymi urządzeniami;

rozdziały 4 i 5 przedstawiają schematy tabel i algorytmy przetwarzania danych;

rozdział 6 zawiera przykład (case study) opisujacy specyfikację prototypowego systemu SMARP nadzorującego linię technologiczneą napełniania butelek;

rozdziały 7 i 8 opisują sposób zbierania i odwzorowania danych przesyłanych w sieciach przemysłowych Modbus i Profibus przez transponder systemu SMARP;

rozdział 9 opisuje odwzorowania danych pobieranych z serwera OPC na dane systemu SMARP.

Dodatkami do tego dokumentu są:

definicja specyfikacji XML systemu SMARP oraz komunikatów przekazywanych wewnątrz systemu, zapisana w języku XML Schema Definition w pliku: schema.xsd;

transformata opisu instalacji do stron HTML, zapisana w pliku factory.xsl.

2

System Monitorowania, Analizy i Raportowania Produkcji

Opis zmian

( w stosunku do wersji dokumentu z 15 października 2013)

1. Zmiana architektury serwera (rozdz. 1.4, rys. 1.2)

Przeniesienie obsługi panelu operatora z procesora powiadomień do modułu obsługi komunikacji transpondera. Panel jest sprzętowym elementem transpondera, obsługiwanym logicznie przez serwer poprzez kanał internetowy łączący serwer z transponderem.

2. Korekta specyfikacji typu rekordu (rozdz. 2.1)

Dodany atrybut seq do elementu field w specyfikacji records.

3. Korekta specyfikacji wyrażeń (rozdz. 2.3)

Zmiana nazwy elementu argument na item w sekcji arguments specyfikacji expressions.

Atrybut type w definicji argumentu jest opcjonalny. Jego brak wskazuje, że typem argumentu może być dowolny typ numeryczny.

4. Korekta specyfikacji zmiennych mierzonych (rozdz. 2.4)

Zmiana nazwy elementu variable na item, zmiana elementu panels na panel z atrybutem name, dodany element timers na końcu specyfikacji sensors.

5. Korekta specyfikacji zmiennych obliczanych (rozdz. 2.5)

Zmiana nazwy elementu variable na item, zmiana nazwy elementu argument na item w sekcji arguments specyfikacji derived.

Atrybut order jest opcjonalny. Jego brak lub wartość order = 0 oznacza, że zmienna jest obliczana jako efekt uboczny jakiejś funkcji.

Dodany opcjonalny atrybut trigger elementu arguments w definicji zmiennej obliczanej. Jeśli wystąpi, to wskazuje zmienną wyzwalającą obliczenie.

6. Korekta specyfikacji stałych (rozdz. 2.6)

Zmiana nazwy elementu variable na item w specyfikacji constants.

7. Korekta specyfikacji alarmu (rozdz. 2.7)

Dodanie atrybutu value, identyfikującego incydent: zgłoszenie / odwołanie alarmu, wewnątrz elementów sms, mail, panel.

8. Usunięta specyfikacja liczników czasu (usunięty rozdz. 2.8)

9. Korekta specyfikacji struktury instalacji (obecny rozdz. 2.8)

Zmiana nazwy elementu variable na item w sekcji variables specyfikacji factory.

Dodanie elementu fraction, określającego liczbę cyfr po przecinku wyświetlanej wartości zmiennej, wewnątrz elementu display.

10. Opisanie protokołu komunikacji serwera z transponderem i panelem (rozdz. 3.1)

3

System Monitorowania, Analizy i Raportowania Produkcji Przedstawienie komunikacji serwera z transponderem jako procesu odpytywania serwera, napędzanego strumieniem komunikatów transpondera. Wymieniane komunikaty tworzą dwa logiczne kanały komunikacji serwer – transponder oraz serwer – panel operatora.

11. Korekta formatu komunikatów serwera (rozdz. 3.2)

Usunięty atrybut date z nagłówka komunikatu żądania retransmisji i synchronizacji czasu.

Zmiana nazwy elementu variable na item w komunikacie zbierania trendlogów action.

12. Zmiana komunikatów alarmu i panelu operatora (rozdz. 3.3)

Całkowita zmiana układu i formatu wszystkich komunikatów w kanale serwer - panel.

13. Zmiana komunikatów liczników czasu (rozdz. 3.4)

Radykalna zmiana formatu komunikatów.

14. Odzwierciedlenie zmian specyfikacji w definicjach tabel (rozdz. 4)

Usunięte tabele RecordInit, RecodData (rozdz. 4.4) – wartości zmiennej rekordowej są przechowywane w całości w polu valT zmiennej (w tabelach Variable i Data).

Usunięte tabele ListT i Counter, zmieniona tabela Timer (rozdz. 4.6).

Zmiana nazw kolumn i dostosowany model danych w rozdz. 4.8.

15. Korekta algorytmu tworzenia tabeli ListS (rozdz. 5.1)

16. Dodane case study (rozdz. 6)

Wnioskiem z case study jest koncepcja automatycznego generowania specyfikacji na podstawie formularzy (załączniki 1, 2 raportu).

4

System Monitorowania, Analizy i Raportowania Produkcji Spis treści

1. Koncepcja systemu.............................................................................................................71.1. Architektura systemu SMARP.....................................................................................81.2. Model opisu instalacji..................................................................................................91.3. Model działania transpondera....................................................................................101.4. Model działania serwera.............................................................................................111.5. Scenariusz wdrożenia systemu...................................................................................13

2. Specyfikacja systemu SMARP.........................................................................................142.1. Typy zmiennych i rekordów......................................................................................142.2. Semantyka zmiennych................................................................................................162.3. Wyrażenia...................................................................................................................172.4. Zmienne mierzone......................................................................................................182.5. Zmienne obliczane.....................................................................................................202.6. Stałe............................................................................................................................222.7. Alarmy........................................................................................................................232.8. Struktura instalacji......................................................................................................25

3. Specyfikacja komunikatów...............................................................................................303.1. Protokół komunikacji.................................................................................................303.2. Komunikaty transpondera..........................................................................................313.3. Komunikaty panelu....................................................................................................343.4. Komunikat licznika czasu..........................................................................................35

4. Struktury danych serwera SMARP...................................................................................364.1. Typy zmiennych i rekordów......................................................................................364.2. Semantyka zmiennych................................................................................................374.3. Wyrażenia...................................................................................................................374.4. Zmienne i stałe...........................................................................................................374.5. Alarmy........................................................................................................................404.6. Liczniki czasu.............................................................................................................414.7. Struktura instalacji......................................................................................................424.8. Model danych.............................................................................................................43

5. Algorytmy przetwarzania danych w serwerze..................................................................455.1. Konfiguracja serwera.................................................................................................455.2. Przetwarzanie komunikatów transpondera.................................................................465.3. Obsługa alarmów........................................................................................................475.4. Obsługa liczników czasu............................................................................................485.5. Opis wizualizacji danych procesowych.....................................................................485.6. Wbudowane funkcje serwera.....................................................................................50

6. Prototypowa instalacja systemu SMARP (case study).....................................................526.1. Instalacja produkcyjna................................................................................................526.2. Wymagania użytkownika...........................................................................................536.3. Dane procesowe.........................................................................................................536.4. Przetwarzanie serwera................................................................................................576.5. Raporty.......................................................................................................................596.6. Specyfikacja systemu.................................................................................................626.7. Wnioski – automatyzacja tworzenia specyfikacji systemu........................................83

7. Odbieranie danych z sieci Modbus...................................................................................887.1. Architektura sieci Modbus.........................................................................................887.2. Połączenie z transponderem.......................................................................................897.3. Odwzorowanie typów danych....................................................................................90

5

System Monitorowania, Analizy i Raportowania Produkcji 7.4. Funkcje sieci Modbus.................................................................................................917.5. Format ramki sieci Modbus........................................................................................95

8. Odbieranie danych z sieci Profibus...................................................................................988.1. Architektura sieci Profibus.........................................................................................988.2. Połączenie z transponderem.......................................................................................998.3. Odwzorowanie typów danych....................................................................................99

9. Odwzorowanie danych serwera OPC UA.......................................................................1019.1. Architektura klienta i serwera OPC.........................................................................1019.2. Przestrzeń adresowa serwera....................................................................................1049.3. Implementacja..........................................................................................................1069.4. Odwzorowanie typów danych..................................................................................107

10. Bibliografia..................................................................................................................109

Załącznik 1. Formularz zmiennych mierzonych……………………………………………110Załącznik 2. Formularz struktury..………………………………………………………….111

6

System Monitorowania, Analizy i Raportowania Produkcji 1.Koncepcja systemu

Typowa instalacja produkcyjna (rys. .1) składa się z maszyn i linii technologicznych pracujących pod kontrolą sterowników lokalnych, połączonych z czujnikami i elementami wykonawczymi maszyn. Sterowniki lokalne komunikują się poprzez sieć ze sterownikami nadrzędnymi, które koordynują i nadzorują pracę instalacji. Zadaniem systemu sterowania nadrzędnego (Supervisory Control And Data Acquisition – SCADA) jest zbieranie danych opisujących stan instalacji, wizualizacja tych danych w sposób czytelny dla człowieka, ostrzeganie o stanach alarmowych oraz wykonywanie komend operatorskich. Zakres danych zbieranych przez system sterujący oraz sposób ich prezentacji są dopasowane do potrzeb operatora procesu, który na bieżąco kontroluje pracę instalacji.

Systemy sterujące instalacji mogą być połączone z korporacyjnym systemem zarządzania (Enterprise Resource Planning – ERP), którego zadaniem jest zbieranie danych opisujących ekonomiczne efekty pracy instalacji i obrazowanie przyczyn utraty części potencjalnie możliwych do uzyskania efektów. Zakres danych zbieranych i raportowanych przez system zarządzający oraz sposób ich prezentacji są dopasowane do potrzeb właściciela procesu, który kontroluje ekonomiczne aspekty pracy instalacji.

Mankamentami takiej organizacji są: wysoki koszt zintegrowanego oprogramowania typu SCADA i ERP z pełnym zakresem funkcjonalności, niska elastyczność systemu i brak podatności na zmiany wymuszane przez zmiany zachodzące w przedsiębiorstwie lub jego otoczeniu biznesowym oraz uzależnienie przedsiębiorstwa od dostawcy oprogramowania.

Alternatywnym rozwiązaniem, znacznie tańszym, bardziej elastycznym i podatnym na zmiany, jest system monitorowania, analizy i raportowania produkcji (SMARP) zbudowany w architekturze usługowej (rys. .1). Przeznaczeniem systemu jest dostarczenie właścicielowi przedsiębiorstwa lub dyspozytorom nadzorującym pracę instalacji produkcyjnych, informacji opisujących efekty pracy instalacji, przyczyny spadku efektywności, takie jak awarie i przestoje, oraz przyczyny wystąpienia tych zdarzeń. System SMARP nie zastępuje, lecz wykorzystuje istniejące w zakładzie systemy sterujące, niezbędne dla bezpiecznej pracy maszyn.

7

System Monitorowania, Analizy i Raportowania Produkcji

1.1. Architektura systemu SMARPSystem SMARP składa się z jednego lub kilku transponderów, zainstalowanych lokalnie przy instalacji, oraz serwera lub kilku serwerów, które mogą znajdować się w dowolnych miejscach. Komunikacja transpondera z serwerem odbywa się poprzez dowolne łącze internetowe. Użytkownicy systemu komunikują się z serwerem przez internet, wykorzystując w tym celu dowolne przeglądarki internetowe obsługujące powszechnie przyjęty standard HTML.

Transponder SMARP systematycznie monitoruje stan instalacji i przekazuje dane do serwera SMARP. Typowa konstrukcja transpondera wykorzystuje komputer panelowy o architekturze PC, wyposażony w następujące urządzenia zewnętrzne:

porty szeregowe do komunikacji z czujnikami zainstalowanymi na instalacji;

kartę sieciową do komunikacji z serwerem;

opcjonalnie drugą kartę sieciową do komunikacji z serwerem OPC;

opcjonalnie lokalny sterownik PLC, wykorzystany do zbierania sygnałów procesowych i połączony z komputerem panelowym poprzez port szeregowy;

opcjonalnie karty sieci przemysłowych, np. PROFIBUS lub MODBUS, obsługiwane przez lokalny serwer OPC.

Oprogramowanie transpondera obsługuje komunikację z urządzeniami zewnętrznymi, gromadzi dane procesowe odebrane z czujników w lokalnej pamięci i wysyła komunikaty z  danymi procesowymi do serwera. Podstawowymi zadaniami transpondera są:

cykliczne odpytywanie lokalnych czujników i odczytywanie zmierzonych przez nie wartości danych procesowych;

cykliczne odbieranie danych procesowych z serwera OPC (opcjonalne);

8

Rysunek 1.1. Schemat systemu monitorowania, analizy i raportowania produkcji (SMARP)

Sterownik lokalny

Sterownik lokalny

Sterownik lokalny

SystemSCADA

Serwer OPC

SystemCRM

Internet

Użytkownicy

Maszyny i linie technologiczne

SystemERP

sieć korporacyjna

sieć sterująca

Transponder SMARP

SerwerSMARP

System Monitorowania, Analizy i Raportowania Produkcji cykliczne odczytywanie danych procesowych zbieranych poprzez wejścia lokalnego

sterownika PCL (opcjonalne);

cykliczne odczytywanie danych procesowych zbieranych z sieci przemysłowych za pośrednictwem karty sieciowej obsługiwanej przez lokalny serwer OPC (opcjonalne);

standaryzacja postaci danych procesowych odczytanych ze wszystkich czujników i urządzeń współpracujących oraz gromadzenie ich w lokalnej pamięci;

cykliczne wysyłanie do serwera SMARP wiadomości informujących o wartościach lub zmianach wartości danych procesowych.

Serwer SMARP odbiera przekazywane przez transponder dane procesowe opisujące stan monitorowanej instalacji, gromadzi te dane w lokalnej bazie danych i prezentuje na żądanie użytkownika w wymaganej postaci. Typowa konstrukcja transpondera wykorzystuje komputer o architekturze PC, wyposażony w następujące urządzenia zewnętrzne:

kartę sieciową do internetowej komunikacji z transponderem oraz z użytkownikami;

pamięci zewnętrzne do przechowywana bazy danych procesowych;

ekran do wizualizacji danych procesowych;

opcjonalnie porty szeregowe i USB do komunikacji z panelem operatora.

Oprogramowanie serwera obsługuje komunikację z transponderem i (opcjonalnie) z pulpitem operatora, gromadzi dane procesowe w lokalnej bazie danych oraz generuje strony WWW przekazywane na żądanie użytkownikom. Podstawowymi zadaniami serwera są:

stałe odbieranie wiadomości nadsyłanych przez transponder,

przechowywanie wartości zmiennych mierzonych i obliczanie wartości zmiennych nie mierzalnych bezpośrednio;

sprawdzanie wartości zmiennych i ostrzeganie o szczególnych stanach instalacji;

przechowywanie historii zmian wskazanych zmiennych i alarmów;

komunikacja z operatorami za pomocą lokalnego panelu operatora (opcja);

odbieranie połączeń użytkowników i generowanie stron HTML zawierających dane procesowe w wymaganym formacie;

analizowanie danych, obliczanie wskaźników i generowanie raportów analitycznych obrazujących efektywność pracy maszyn.

Użytkownicy systemu postrzegają serwer SMARP jako serwer WWW udostępniający dane w postaci stron internetowych (stron WWW), pobieranych przez użytkownika za pomocą standardowej przeglądarki. Zakres dostępnych form prezentacji danych obejmuje:

zbiorczą wizualizację stanu instalacji produkcyjnej pokazującą stan linii technologicznych, maszyn i ich podzespołów na graficznych schematach synoptycznych;

animowane wykresy pokazujące przebieg produkcji lub zmiany wartości wybranych parametrów w zadanym przedziale czasu (trendlog);

raporty obrazujące efektywność pracy maszyn i linii technologicznych we wskazanym przedziale czasu (np. jednej zmiany), obejmujące wielkość produkcji, wskaźnik OEE oraz zestawienie przyczyn awarii i przestojów maszyn.

9

System Monitorowania, Analizy i Raportowania Produkcji 1.2. Model opisu instalacjiCałość instalacji produkcyjnej przedsiębiorstwa dzieli się na linie technologiczne, które wytwarzają jednostki produktu z surowców lub półproduktów dostarczanych do tego przedsiębiorstwa. Linie mogą zwykle pracować niezależnie od siebie, a każda pracująca linia wytwarza produkty o określonej wartości handlowej, istotne dla biznesowej oceny przedsiębiorstwa. Wykonanie procesu technologicznego realizowanego przez linię może wymagać dostarczenia pewnych materiałów lub usług realizowanych przez instalacje pomocnicze, obsługujące jedną lub kilka linii. Przykładem linii technologicznej może być linia napełniania i pakowania butelek w rozlewni napojów, a przykładem instalacji pomocniczej – stacja przygotowania piany wykorzystywanej do okresowej dezynfekcji nalewarek na liniach napełniania butelek.

Każda linia technologiczna i każda instalacja pomocnicza składa się z maszyn tworzących wyodrębnione węzły technologiczne wykonujące operacje lub usługi rozpoznawalne w procesie produkcyjnym. Maszyna jest zwykle dostarczona w całości przez tego samego producenta, ma odrębny sterownik i tworzy pewną funkcjonalną i konstrukcyjną całość. Zatrzymanie maszyny zatrzymuje zwykle pracę całej linii, o ile nie jest ona wyposażona w kilka równoległych maszyn wykonujących tę samą operację. Przykładami maszyn mogą być nalewarka, etykieciarka lub pakowaczka w linii napełniania i pakowania butelek w rozlewni napojów.

W większości przypadków maszyna nie jest niepodzielną całością, lecz składa się z zespołów wykonujących funkcje niezbędne dla poprawnego działania maszyny i rozpoznawalne dla operatorów procesu. Zespół może pracować lub ulec awarii, a awaria zespołu zatrzymuje zazwyczaj pracę maszyny, o ile nie jest ona wyposażona w dodatkowe zespoły przejmujące po awarii funkcje zespołu uszkodzonego. Przykładem zespołu może być saturator lub płuczka nalewarki w linii napełniania i pakowania butelek.

Rodzaj linii technologicznej, instalacji pomocniczej, maszyny lub zespołu jest opisany przez zbiór atrybutów, takich jak nazwa, producent, typ urządzenia.

Bieżący stan pracujących linii technologicznych, instalacji pomocniczych, maszyn i zespołów opisują dane procesowe, mierzone przez czujniki zainstalowane w różnych miejscach instalacji. Wartości danych procesowych ulegają zmianie podczas pracy urządzeń. Podstawowym elementem danych procesowych jest zmienna mierzona, charakteryzowana przez rozpoznawalną dla człowieka nazwę, wartość zmierzoną przez czujnik, jednostkę miary i – być może – inne parametry, takie jak np. wartość minimalna lub wartość maksymalna, jaka może wystąpić w poprawnie biegnącym procesie. Przykładem zmiennej mierzonej może być temperatura wody, mierzona przez czujnik temperatury zainstalowany w rurociągu. Innym przykładem jest stan maszyny określony jako: zatrzymana, pracuje lub zepsuta.

Wartości pewnych danych procesowych mogą nie być mierzone bezpośrednio przez czujniki, lecz obliczane na podstawie wartości innych pomiarów. Wyniki obliczeń są przechowywane jako wartości zmiennych obliczanych. Sposób obliczania wartości jest definiowany indywidualnie dla każdej zmiennej, w postaci wyrażenia określającego sposób wykonania obliczeń.

Zarówno zmienne mierzone, jak i obliczane, mogą być zmiennymi prostymi (skalarami), jednowymiarowymi tablicami (wektorami) lub rekordami. Zmienna prosta przyjmuje w każdej chwili jedną wartość. Tablica składa się z wielu wartości tego samego typu. Kolejne wartości są numerowane w ramach tablicy kolejnymi liczbami naturalnymi, począwszy od liczby zero. Rekord posiada wiele pól przyjmujących wartości różnego typu.

10

System Monitorowania, Analizy i Raportowania Produkcji Szczególne stany instalacji, związane z awariami lub nieprawidłowymi wartościami zmiennych, mogą wymagać szczególnych działań systemu, takich jak powiadomienie użytkownika lub uzyskanie dodatkowych danych od operatorów instalacji. Zdefiniowane i wymagające obsługi serwera stany instalacji są nazywane alarmami.

1.3. Model działania transponderaPodstawowym zadaniem transpondera jest pomiar wartości zmiennych mierzonych i przekazywanie tych wartości do serwera. W tym celu, transponder mierzy wartość każdej zmiennej z zadanym okresem powtarzania i raportuje do serwera wszystkie wykryte zmiany wartości. Wartość zmiennej uważa się za zmienioną, jeżeli różni się od wartości poprzedniej co najmniej o pewien zadany kwant (delta). Brak raportu zmiany jest interpretowany przez serwer jako brak zmiany wartości zmiennej.

Rytm pomiaru i raportowania wartości zmiennej mierzonej jest opisany przez dwa parametry czasowe: okres raportowania zmian (cycle) i okres powtarzania pomiarów (sample). Na ogół, oba te parametry są równe i komunikat transpondera zawiera co najwyżej jedną próbkę wartości zmiennej mierzonej. Może się jednak zdarzyć, że w celu zebrania dokładnej historii zmian pewnej zmiennej, okres powtarzania pomiaru wartości tej zmiennej (sample) będzie krótszy od okresu raportowania zmian do serwera (cycle). W takim przypadku transponder gromadzi zmierzone próbki wartości i przekazuje do serwera wiele próbek wartości tej samej zmiennej w jednym komunikacie, wysyłanym po upłynięciu okresu raportowania.

Komunikat transpondera przenosi do serwera wartości zmiennych, które uległy zmianie. Jeżeli przez długi okres czasu żadna zmienna mierzona nie zmieni wartości, to transponder nie będzie w tym czasie wysyłał żadnych komunikatów do serwera. Jeżeli okres braku komunikatów przekroczy zadany przedział czasu (alive), to transponder wysyła specjalny komunikat podtrzymania, informujący serwer o swojej poprawnej pracy.

Wszystkie komunikaty transpondera są numerowane kolejnymi liczbami naturalnymi. Utrata lub zanik komunikatów są wykrywane przez serwer i traktowane jako alarm systemu.

1.4. Model działania serweraPodstawowe zadania serwera obejmują odbieranie i gromadzenie danych procesowych przekazywanych przez transponder, prezentowanie tych danych użytkownikom oraz sporządzanie raportów obrazujących efektywność pracy instalacji w zadanych okresach czasu (rys. .2). Odbieranie i gromadzenie danych procesowych jest realizowane na bieżąco, w rytmie wyznaczanym przez napływające komunikaty transpondera. Bieżące wartości danych są zapisywane jako wartości zmiennych procesowych opisujących aktualny stan instalacji produkcyjnej oraz gromadzone w bazie danych jako opis historii działania instalacji. Prezentacja stanu instalacji jest tworzona on-line w postaci stron internetowych pokazujacych bieżące wartości zmiennych procesowych. Raporty obrazujące efektywność pracy instalacji są tworzone off-line na podstawie danych zgromadzonych w logach historii gromadzonych w bazie danych systemu.

11

System Monitorowania, Analizy i Raportowania Produkcji

Przetwarzanie związane z odbieraniem i gromadzeniem danych procesowych ma charakter reaktywny i jest inicjowane przez komunikaty napływające z urządzeń peryferyjnych:

transpondera, panelu operatora, programowych (wewnętrznych) liczników czasu.

Komunikaty urządzeń mogą pojawiać się asynchronicznie i niezależnie od siebie. Aby zapobiec gubieniu komunikatów w okresach dużego natężenia ich napływu, wszystkie komunikaty są wstępnie zapisywane do wspólnej kolejki wejściowej. Zapisane komunikaty są odczytywane z kolejki i przetwarzane przez serwer w kolejności chronologicznej (FIFO).

Komunikaty transpondera wyznaczają podstawowy rytm przetwarzania serwera. Treścią komunikatu są wartości zmiennych mierzonych. Nowa wartość zmiennej mierzonej może powodować konieczność obliczenia nowych wartości pewnych zmiennych obliczanych, których zmiana może dalej wymuszać obliczenie wartości kolejnych zmiennych itd. Odebranie i przetworzenie komunikatu przez serwer powoduje:

uaktualnienie wartości zmiennych mierzonych; obliczenie wartości zmiennych obliczanych, związanych ze zmiennymi mierzonymi; zapisanie w logu historii wartości zmiennych historycznych; sprawdzenie i wykrycie alarmów (szczególnych stanów instalacji).

Wszystkie komunikaty transpodera są numerowane kolejnymi liczbami naturalnymi. Numer odebranego komunikatu jest traktowany przez serwer jako wartość pewnej zmiennej

12

Rysunek 1.2. Model przetwarzania w serwerze

Serwer SMARP

Obsługaliczników

czasuKolejka wejściowa Obliczanie

zmiennychi alarmów

Zmienne procesowe

Wyświetlanie wiadomości na panelu

Czas

Wysyłanie wiadomości

e-mail

Wysyłanie wiadomości

sms

Tworzenie stron HTML

Kolejka alarmówObsługa alarmów

Alarmy

Procesorpowiadomień

Kolejka poleceńObsługakomunikacji

transpondera

Konfiguracja

PrezentacjaTransponder +panel operatora

Tworzenie raportów(OEE)

Raporty

Logi historii

System Monitorowania, Analizy i Raportowania Produkcji mierzonej. Oprogramowanie obsługujące komunikację z transponderem może kontrolować numery komunikatów w celu wykrycia utraty komunikatu i zażądania jego retransmisji.

Kolejne komunikaty transpodera nadchodzą do serwera w odstępach czasu nie dłuższych od zadanego przedziału podtrzymania (alive). Serwer może wykrywać zanik komunikatów, używając do tego licznika czasu odmierzającego czas podtrzymania i odnawianego po otrzymaniu każdego komunikatu. Jeżeli komunikat nie nadejdzie o czasie, to licznik upłynie i spowoduje sygnalizację alarmu zaniku komunikacji z transponderem.

W normalnym stanie pracy systemu, transponder jest źródłem danych procesowych dla serwera. Protokół komunikacji serwera z transponderem dopuszcza jednak możliwość przekazania danych również w przeciwnym kierunku. Ze względu na sposób działania połączeń internetowych, komunikat serwera jest zawsze odpowiedzią na odebrany komunikat transpondera. Komunikaty serwera są nadawane sporadycznie w celu:

zainicjowania retransmisji utraconych danych; zmiany parametrów pracy transpondera; synchronizacji czasu miedzy serwerem i transponderem.

Komunikaty panelu operatora mogą pojawiać się w systemie jako odpowiedzi na wiadomości wyświetlone na panelu w ramach procedury obsługi alarmu. Komunikaty panelu przynoszą do serwera wartości pewnych zmiennych, wprowadzone przez operatora w okienkach dialogowych wyświetlonych przez serwer na panelu. Serwer traktuje zmienne wprowadzone przez operatora tak samo jak zmienne mierzone przez transponder. Dzięki temu nie ma potrzeby definiowania specjalnego mechanizmu obsługi komunikatów panelu operatora. Każdy odebrany komunikat jest wpisywany do kolejki wejściowej i przetwarzany przez serwer na równi z komunikatami transpondera.

Liczniki czasu wyznaczają czasowy rytm przetwarzania serwera, niezależny od rytmu komunikatów transpondera. Z każdym licznikiem czasu jest związana zmienna binarna, której wartość sygnalizuje fakt odmierzenia zadanego przedziału czasu przez licznik. Odmierzenie tego czasu powoduje zapisanie w kolejce wejściowej komunikatu z nową wartością zmiennej. Serwer traktuje zmienne zwiazane z licznikami podobnie jak zmienne mierzone przez transponder. Dzięki temu nie ma potrzeby definiowania specjalnego mechanizmu obsługi komunikatów generowanych przez liczniki czasu. Każdy odebrany komunikat jest wpisywany do kolejki wejściowej i przetwarzany przez serwer na równi z komunikatami transpondera.

Alarmy są szczególnymi sytuacjami występujacymi w instalacji produkcyjnej, takimi jak awarie lub nieprawidłowe wartości zmiennych procesowych, które wymagają zaplanowanej reakcji serwera. Alarmy są wykrywane przez serwer i obsługiwane na dwóch poziomach:

standardowa reakcja serwera polega na zaznaczeniu alarmu na obrazie synoptycznym instalacji oraz zapisaniu informacji o wystąpieniu alarmu w logu historii;

opcjonalnie, serwer może powiadomić użytkowników za pomocą komunikatów e-mail lub sms, oraz wyświetlić wiadomość na panelu i odebrać odpowiedź operatora.

Reakcja standardowa jest realizowana przez każdą implementację serwera. Reakcja opcjonalna jest realizowana tylko przez serwer wyposażony w opcjonalny moduł procesora powiadomień. Moduł ten odbiera zawiadomienia o wystąpieniu alarmów poprzez kolejkę alarmów oraz realizuje zaplanowane działania komunikacyjne.

1.5. Scenariusz wdrożenia systemuWdrożenie systemu SMARP wymaga stworzenia specyfikacji systemu opisującej strukturę instalacji, zmienne procesowe, sposób pomiaru i przekazywania zmiennych przez transponder

13

System Monitorowania, Analizy i Raportowania Produkcji oraz zakres wymaganego przetwarzanie serwera. Standaryzacja specyfikacji systemu umożliwia automatyczne zbieranie danych przez serwer SMARP, wykonanie niezbędnych obliczeń oraz wygenerowanie obrazów synoptycznych i raportów bez potrzeby indywidualnego programowania każdej instalacji serwera.

Specyfikacja systemu SMARP jest projektowana przez człowieka i zapisywana w postaci szeregu dokumentów XML, opisanych w rozdz. 2. Treść specyfikacji podlega automatycznej kompilacji, której wynikiem jest zespół tabel relacyjnej bazy danych, opisanych w rozdz. 4. Dane zapisane w tabelach sterują działaniem oprogramowania serwera.

Dane opisujące zmienne mierzone określają również parametry działania transpondera. Wartości niektórych parametrów mogą być zmieniane przez użytkownika podczas pracy systemu (moduł Konfiguracja na rys. .2). Specyfikacja komunikatów serwera informujących transponder o zmianie jest opisana w rozdz. 3.1.

14

.........

<alarms>

<derived>

<sensors> ...... ...... ...... ......</sensors>

Specyfikacja SMARP

Zmiennetranspondera

………………………………

Tabeleserwera

Automatyczna kompilacja

Automatyczna kompilacja

Rysunek 1.3. Wdrożenie systemu SMARP

System Monitorowania, Analizy i Raportowania Produkcji 2.Specyfikacja systemu SMARP

Specyfikacja systemu SMARP opisuje strukturę instalacji produkcyjnej, postać danych procesowych oraz wymagany sposób ich pomiaru i przetwarzania. Specyfikacja jest dokumentem tekstowym zapisanym w notacji XML. Składa się z wielu segmentów, z których każdy jest identyfikowany przez odrębny element XML. Lista segmentów specyfikacji systemu SMARP jest zebrana w tab. 2.1.

Tablica 2.1. Specyfikacja systemu SMARP

Lp. Element XML Opis Rozdział1 <types> Specyfikacja typów prostych 2.12 <records> Biblioteka typów rekordów 2.13 <semantics> Biblioteka semantyki zmiennych i stałych 2.2

4 <expressions> Biblioteka wyrażeń określających wartości zmiennych obliczanych 2.2

5 <sensors> Specyfikacja zmiennych mierzonych 2.46 <derived> Specyfikacja zmiennych obliczanych 2.57 <constants> Specyfikacja stałych 2.68 <alarms> Specyfikacja alarmów 2.79 <factory> Specyfikacja struktury instalacji 2.8

2.1. Typy zmiennych i rekordówZmienne w systemie SMARP mogą być zmiennymi prostymi, tablicami jednowymiarowymi lub rekordami złożonymi z pól różnego typu. Każda zmienna prosta, pole tablicy lub pole rekordu może przyjmować wartość jednego z typów prostych. Typy proste używane w systemie SMARP są podzbiorem typów danych zdefiniowanych w języku SQL. Zestawienie typów prostych oraz ich odwzorowanie na typy danych języka C++ jest pokazane w tab. 2.2.

Tablica 2.2. Typy danych używane w specyfikacji systemu SMARP

Lp. SMARP C++ Zastosowanie1 TINYINT char liczba 8-bitowa lub wartość binarna2 SMALLINT short liczba 16-bitowa3 INTEGER long liczba 32-bitowa4 BIGINT long long liczba 64-bitowa5 REAL float liczba rzeczywista 32-bitowa IEE 7546 DOUBLE double liczba rzeczywista 64-bitowa IEE 7547 BINARY ( n ) tablica char sekwencja bitów lub bajtów (n ≤ 8)8 VARBINARY ( n ) tablica char sekwencja bitów lub bajtów (n ≤ 8000)9 VARCHAR ( n ) łańcuch znaków tekst co najwyżej n znaków (n ≤ 8000)10 DATETIME tablica 8 znaków 8 bajtów (brak standardowej postaci C++)11 DATA long 3 bajty (brak standardowej postaci C++)12 TIME long 3 bajty (brak standardowej postaci C++)

15

System Monitorowania, Analizy i Raportowania Produkcji Specyfikacja typów prostych jest słownikiem typów wykorzystywanym we wszystkich projektach wdrożeń systemu SMARP. Specyfikacja jest plikiem XML o następującej postaci.<smarp> <types version = "1.0" > <type name = "TINYINT" length = "1" /> <type name = "SMALLINT" length = "2" /> <type name = "INTEGER" length = "4" /> <type name = "BIGINT" length = "8" /> <type name = "REAL" length = "4" /> <type name = "DOUBLE" length = "8" /> <type name = "VARCHAR" length = "0" /> <type name = "BINARY" length = "8" /> <type name = "VARBINARY" length = "0" /> <type name = "DATATIME" length = "8" /> <type name = "DATA" length = "3" /> <type name = "TIME" length = "3" /> </types></smarp>

Element smarp jest zewnętrznym ogranicznikiem specyfikacji systemu SMARP. Element types otwiera segment specyfikacji opisujący typy proste, a atrybut version podaje numer wersji tego segmentu.

Treść specyfikacji jest listą elementów type, z których każdy opisuje jeden typ prosty. Atrybuty name i length określają nazwę i liczbę bajtów zajmowanych przez wartość tego typu. Wyjątkiem są typy VARCHAR i VARBINARY, których wartości mogą zajmować różną liczbę bajtów i dla których atrybutu length przyjmuje umowna wartość 0.

Specyfikacja typów rekordów tworzy rozszerzalną bibliotekę wykorzystywaną we wszystkich projektach wdrożeń systemu SMARP. Każde nowe wdrożenie może wybrać potrzebne definicje typów z istniejącej biblioteki, a w razie potrzeby może dodać nowe. Biblioteka typów rekordów jest plikiem XML o następującej postaci.<smarp> <records version = "1.0" > nagłówek biblioteki <record name = "boiler" > jednoznaczna nazwa typu rekordu <comment> producent i typ bojlera </comment> <field name = "type" nazwa pierwszego pola rekordu seq = "1" numer pola w definicji rekordu type = "VARCHAR(12)" typ pierwszego pola rekordu size = "2" > rozmiar pierwszego pola rekordu <comment> opis pola </comment> </field> <field name = "pressure" seq = "2" numer pola w definicji rekordu type = "REAL" /> </record> .................... dalsze typy rekordów </records></smarp>

16

System Monitorowania, Analizy i Raportowania Produkcji Element smarp jest zewnętrznym ogranicznikiem specyfikacji systemu SMARP. Element records otwiera segment biblioteki definicji typów rekordów, a atrybut version podaje numer wersji biblioteki. Treść biblioteki składa się z elementów record, z których każdy opisuje jeden typ rekordu. Atrybut name określa nazwę typu rekordu.

Opis typu rekordu jest listą elementów field, z których każdy opisuje jedno pole rekordu. Atrybuty name, seq i type określają nazwę pola, położenie w definicji rekordu oraz typ wartości pola. Opcjonalny element comment zawiera tekstowy opis, czytelny dla człowieka.

Definicja pola rekordu może zawierać atrybut size, który określa rodzaj pola oraz liczbę elementów pola, które jest tablicą:

0 – pole o wartości prostej;1 – rekord;

>1– tablica; wartość atrybutu size jest równa liczbie pól tablicy.

Atrybut size jest opcjonalny. Brak atrybutu w opisie pola oznacza, że przyjmuje on wartość:

size = 0 pole skalarne o wartości prostej.

2.2. Semantyka zmiennychStan instalacji produkcyjnej jest charakteryzowany przez wartości zmiennych procesowych, mierzonych przez czujniki zamontowane w instalacji i przekazywanych przez transponder do serwera lub obliczanych przez serwer na podstawie wartości innych pomiarów. Znaczenie wartości zmiennej przetwarzanej przez serwer jest określone przez rodzaj wielkości fizycznej, np. temperatura lub ciśnienie, oraz jednostkę miary, np. stopień Celsjusza lub paskal.

Opis semantyki wartości zmiennych i stałych tworzy rozszerzalną bibliotekę wykorzystywaną we wszystkich projektach wdrożeń systemu SMARP. Każde nowe wdrożenie może wybrać potrzebne znaczenia z istniejącej biblioteki, a w razie potrzeby może dodać nowe.

Biblioteka znaczeń umożliwia definiowanie semantyki zmiennych prostych i stałych. Znaczenie zmiennej złożonej można zdefiniować tylko za pomocą nieformalnego komentarza. Biblioteka jest ważnym elementem dokumentacji systemu SMARP, który jednak nie ma wpływu na implementację systemu. Biblioteka znaczeń jest plikiem XML o następującej postaci.<smarp> <semantics version = "1.0" > nagłówek biblioteki <sense name = "Temp" jednoznaczna nazwa typu wartości kind = "temperature" wielkość fizyczna, np. temperatura unit = "C" > jednostka miary, np. stopień C <comment> opis znaczenia </comment> </sense> ....................... dalsze definicje znaczeń </semantics></smarp>

Element smarp jest zewnętrznym ogranicznikiem specyfikacji systemu SMARP. Element semantics otwiera segment biblioteki znaczeń zmiennych, a atrybut version podaje numer wersji biblioteki.

Treść biblioteki składa się z elementów sense, z których każdy opisuje pojedyncze znaczenie przypisane jakiejś zmiennej. Atrybuty name, kind i unit określają nazwę identyfikacyjną

17

System Monitorowania, Analizy i Raportowania Produkcji znaczenia, rodzaj wielkości fizycznej i podaje jednostkę miary. Opcjonalny element comment zawiera tekstowy opis znaczenia, czytelny dla człowieka.

2.3. WyrażeniaWyrażenia określają sposób obliczania wartości zmiennych procesowych niemożliwych do bezpośredniego pomiaru, na podstawie wartości innych zmiennych (mierzonych lub obliczanych). Każde wyrażenie ma unikalną nazwę, listę argumentów formalnych oraz treść określoną przez program zapisany w języku XEXPR [3]. Argumentami formalnymi są nazwy zmiennych, interpretowanych przez program jako zmienne proste.

Elementami programu w języku XEXPR mogą być stałe, zmienne proste, operatory arytmetyczne, wyrażenia warunkowe, pętle i wywołania funkcji. Specjalnym rodzajem funkcji są wbudowane funkcje serwera, realizujące typowe działania często spotykane w różnych wdrożeniach systemu SMARP. Funkcje wbudowane mogą wykazywać efekty uboczne, tzn. mogą nie tylko wyznaczać wartości, lecz także mogą realizować pewne działania dodatkowe.

Każda zmienna obliczana systemu SMARP ma przypisane wyrażenie oraz listę argumentów aktualnych, którymi mogą być dowolne zmienne mierzone, zmienne obliczane lub stałe. Obliczenie wartości zmiennej polega na przekazaniu argumentów aktualnych w miejsce argumentów formalnych i obliczeniu wartości wyrażenia.

Argumenty aktualne są przekazywane do programu wyrażenia przez nazwę. Ponieważ język XEXPR rozpoznaje tylko zmienne proste, więc możliwość przekazania argumentów do treści wyrażenia jest też ograniczona do zmiennych prostych. Jeżeli argumentem aktualnym będzie nazwa zmiennej złożonej, to może ona być użyta w wyrażeniu tylko jako argument wbudowanej funkcji serwera. Podobnie, jeżeli zmienna obliczana jest zmienną złożoną, to jej nazwa powinna wystąpić na liście argumentów aktualnych wyrażenia i być użyta jako argument wbudowanej funkcji serwera. Program tej funkcji powinien obliczyć i przypisać wartości wszystkim polom tej zmiennej.

Opisy wyrażeń tworzą rozszerzalną biblioteką wielokrotnego użytku wykorzystywaną we wszystkich projektach wdrożeń systemu SMARP. Każde nowe wdrożenie wybiera potrzebne wyrażenia z istniejącej biblioteki, a w razie potrzeby dodaje nowe.

Specyfikacja wyrażeń jest plikiem XML o następującej postaci.<smarp> <expressions version = "1.2" > <expression name = "exp1" > jednoznaczna nazwa wyrażenia <comment> opis wyrażenia </comment> <arguments> <item name = "x" argument formalny type = "REAL" typ argumentu seq = "1" /> numer argumentu na liście .................. dalsze argumenty formalne </arguments> <expr> <add> treść wyrażenia XEXPR (tu: 2x) <x /> <x /> </add> </expr>

18

System Monitorowania, Analizy i Raportowania Produkcji </expression> ..................... dalsze definicje wyrażeń </expressions></smarp>

Element smarp jest zewnętrznym ogranicznikiem specyfikacji systemu SMARP. Element expressions otwiera segment biblioteki znaczeń zmiennych, a atrybut version podaje numer wersji biblioteki. Treść biblioteki składa się z elementów expression, z których każdy opisuje pojedyncze wyrażenie, identyfikowane przez nazwę określoną przez atrybut name.

Element arguments podaje listę argumentów formalnych użytych w definicji wyrażenia. Element arguments jest opcjonalny, a jego nieobecność oznacza, że w definicji wyrażenia użyte są wprost nazwy zmiennych mierzonych, zmiennych obliczanych lub stałych. Struktura takiego wyrażenia jest stała i nie pozwala na przekazanie żadnych argumentów aktualnych.

Lista argumentów formalnych ma postać listy elementów item, z których każdy opisuje pojedynczy argument. Atrybuty name, type i seq kolejnych argumentów określają nazwę, typ wartości i miejsce danego argumentu na liście argumentów formalnych. Atrybuty type i seq są opcjonalne. Brak atrybutu type wskazuje, że argument może przyjmować dowolne wartości numeryczne. Atrybut seq można pominąć, jeżeli lista argumentów jest jednoelementowa.

Element expr zawiera definicję wyrażenia zapisaną w języku XEXPR. W pokazanym przykładzie element add określa nazwę wyrażenia, a x jest nazwą zmiennej. Opcjonalny element comment zawiera tekstowy opis wyrażenia, czytelny dla człowieka.

2.4. Zmienne mierzoneZmienne mierzone przechowują wartości opisujące przebieg procesu technologicznego, zmierzone przez transponder podczas pracy instalacji produkcyjnej. Specjalnym rodzajem zmiennych mierzonych są też wartości wprowadzone ręcznie za pomocą panelu operatora. Wartości zmiennych mierzonych mogą być wyświetlone dla operatorów, wykorzystane do obliczenia bardziej złożonych wskaźników charakteryzujących przebieg procesu lub porównane ze stałymi ograniczeniami, których przekroczenie sygnalizuje błędną pracę instalacji.

Specyfikacja zmiennych mierzonych opisuje typy i znaczenia zmiennych oraz definiuje wymagania dotyczące rytmu zbierania ich wartości przez transponder i przekazywania tych wartości do serwera. W ten sposób, specyfikacja zmiennych mierzonych określa wymagania zarówno dla transpondera, który musi systematyczne zbierać i przekazywać wartości zmiennych mierzonych do serwera, jak i dla serwera, który musi przechowywać i przetwarzać otrzymane od transpondera wartości zmiennych.

Specyfikacja zmiennych mierzonych jest dokumentem tworzonym podczas projektowania systemu, indywidualnie dla każdego wdrożenia systemu SMARP. Specyfikacja jest plikiem XML o następującej postaci.

<smarp plant = "Cisowianka" > nagłówek specyfikacji systemu <sensors version = "1.0" > rodzaj i wersja specyfikacji <transponder name = "tr_1" nazwa transpondera alive = "25" > przedział podtrzymania <comment> opis transpondera </comment> <item name = "t1" jednoznaczna nazwa zmiennej type = "REAL" nazwa typu wartości zmiennej sense = "Temp" znaczenie wartości

19

System Monitorowania, Analizy i Raportowania Produkcji size = "0" rodzaj zmiennej, rozmiar tablicy mode = "1" tryb przetwarzania zmiennej cycle = "10" okres raportowania zmian sample = "2" okres próbkowania zmiennej delta = "0.1" > próg zmiany wartości <comment> opis zmiennej </comment> <value> 10 </value> </item> ....................... dalsze opisy zmiennych </transponder> ....................... dalsze opisy transponderów <panel name = "p1" > nazwa panelu <comment> opis panelu </comment> <item name = "t1" jednoznaczna nazwa zmiennej type = "INTEGER" nazwa typu wartości zmiennej mode = "2" > tryb przetwarzania zmiennej <comment> opis zmiennej </comment> <value> 1 </value> wartość początkowa zmiennej </item> ....................... dalsze opisy zmiennych </panel> ....................... dalsze opisy paneli <timers> <item name = "tim1" nazwa zmiennej licznika czasu type = "SMALLINT" > nazwa typu wartości zmiennej <comment> opis zmiennej </comment> <item> ....................... dalsze opisy zmiennych liczników </timers> </sensors></smarp>

Element smarp jest zewnętrznym ogranicznikiem specyfikacji konkretnej instalacji produkcyjnej. Nazwę instalacji wskazuje atrybut plant. Element sensors wyznacza segment specyfikacji opisujący zmienne mierzone. Atrybut version podaje numer wersji tego segmentu. Treść segmentu zmiennych mierzonych jest listą elementów transponder oraz panel, zakończoną opcjonalnie jednym elementem timers.

Element transponder opisuje zmienne mierzone, przekazywane przez transponder do serwerem. Atrybuty name i alive elementu określają nazwę transpondera oraz maksymalny okres braku komunikatów, po którym transponder wysyła komunikat podtrzymujący do serwera. Element comment zawiera opis transpondera. Dalsza część opisu transpondera jest podzielona na sekcje item, opisujące poszczególne zmienne mierzone przekazywane przez transponder. Atrybuty name, type i sense podają nazwę, typ wartości i znaczenie zmiennej mierzonej. Jeżeli zmienna jest zmienną prostą lub tablicą, to wartością atrybutu type jest nazwa typu prostego, zdefiniowanego w segmencie specyfikacji types. Jeżeli zmienna jest rekordem, to wartością atrybutu type jest nazwa typu rekordu zdefiniowanego w segmencie specyfikacji records.

Atrybut size określa rodzaj zmiennej oraz liczbę pól zmiennej, która jest tablicą:

20

System Monitorowania, Analizy i Raportowania Produkcji 0 – zmienna prosta;1 – rekord;

>1– tablica; wartość atrybutu size jest równa liczbie pól tablicy.

Atrybut mode opisuje sposób przetwarzania wartości zmiennej przez serwer:

0 – pomijanie zmiennej;1 – przetwarzanie odebranej wartości zmiennej;2– przetwarzanie odebranej wartości zmiennej i zapamiętanie jej w logu historii.

Atrybut cycle określa okres raportowania zmian wartości zmiennej do serwera. Atrybut sample określa wymagany okres powtarzania pomiarów wartości zmiennej. Wartość tego elementu nie może być większa od wartości elementu cycle. Atrybut delta określa minimalną różnicę wartości, po przekroczeniu której transponder uznaje zmierzoną wartość za zmienioną.

Wartości atrybutów alive, cycle, sample i delta określają sposób działania transpondera i nie są używane przez serwer. Transponder może pomijać zmienne, których tryb mode = 0.

Element comment zawiera opis zmiennej (objaśnienie). Element value, który może posiadać opcjonalny atrybut idx lub field, określa początkową wartość zmiennej. Zmienna prosta ma tylko jeden element value, bez żadnego atrybutu. Zmienna złożona, która jest tablicą lub rekordem, ma wiele elementów value, po jednym dla każdego pola. Wartość atrybutu idx określa numer kolejny pola tablicy, a wartość atrybutu field określa nazwę pola rekordu.

Element panel opisuje zmienne proste odczytywane przez serwer z panelu operatora. Atrybut name określa nazwę panelu. Treść opisu jest listą elementów item, których atrybuty name, type i mode podają nazwę, typ wartości i tryb przetwarzania poszczególnych zmiennych. Element value określa początkową wartość zmiennej.

Element timers opisuje zmienne proste, których wartości są ustawiane przez liczniki czasu. Każda zmienna jest związana z licznikiem o tej samej nazwie. Początkowa wartość zmiennej jest równa 0; po odmierzeniu czasu przez licznik zmienna przyjmie wartość 1. Treść opisu jest listą elementów item, których atrybuty name i type podają nazwę i typ wartości kolejnych zmiennych. Sterowanie pracą licznika realizuje funkcja serwera set_timer (rozdz. 5.6), która pozwala włączyć i wyłączyć licznik oraz określić długość odmierzanego przedziału czasu.

Niektóre elementy i atrybuty specyfikacji zmiennych mierzonych są opcjonalne. Jeżeli nie zostaną w specyfikacji wymienione, to przyjmą następujące wartości domyślne:

size = 0 zmienna skalarnasense = "" brak definicji znaczeniamode = 1 przetwarzanie wartości zmiennejsample = cycle okres pomiarów równy okresowi raportowaniadelta = 0.1 próg zmiany wartości równy 0.1value = 0 wartość początkowa równa 0

2.5. Zmienne obliczaneZmienne obliczane przechowują wartości opisujące przebieg procesu technologicznego, które nie są mierzone bezpośrednio, lecz które zostały otrzymane w wyniku przetwarzania wartości innych zmiennych w serwerze. Wartości zmiennych obliczanych mogą być wyświetlone dla operatorów, wykorzystane do obliczenia kolejnych zmiennych lub porównane ze stałymi ograniczeniami, których przekroczenie sygnalizuje błędną pracę instalacji.

21

System Monitorowania, Analizy i Raportowania Produkcji Specyfikacja zmiennych obliczanych opisuje typy i znaczenia zmiennych oraz definiuje wymagania dotyczące sposobu obliczenia ich wartości przez wywołanie wyrażeń z odpowiednimi listami argumentów aktualnych. Specyfikacja zmiennych obliczanych określa wymagania dla serwera, który musi obliczać i przechowywać wartości tych zmiennych.

Specyfikacja zmiennych obliczanych jest dokumentem tworzonym podczas projektowania systemu, indywidualnie dla każdego wdrożenia systemu SMARP. Specyfikacja jest plikiem XML o następującej postaci.

<smarp plant = "Cisowianka" > nagłówek specyfikacji systemu <derived version = "1.0" > rodzaj i wersja specyfikacji <item name = "b1" jednoznaczna nazwa zmiennej type = "boiler" nazwa typu wartości zmiennej sense = "Boiler" znaczenie wartości size = "1" rodzaj zmiennej (rekord) mode = "1" tryb przetwarzania zmiennej order = "120" > numer kolejności obliczeń <comment> opis zmiennej </comment> <value field = "type" > BT-34 </value> <value field = "pressure> 2.00 </value> <expression> exp2 nazwa wyrażenia </expression> <arguments trigger = "op" > <item name = "t1" pierwszy argument aktualny seq = "1" /> <item name = "a" drugi argument aktualny seq = "2" /> .................. dalsze argumenty aktualne </arguments> </item> ....................... dalsze definicje zmiennych </derived></smarp

Element smarp jest zewnętrznym ogranicznikiem specyfikacji konkretnej instalacji produkcyjnej. Nazwę instalacji wskazuje atrybut plant. Element derived wyznacza segment specyfikacji opisujący zmienne obliczane. Atrybut version podaje numer wersji segmentu. Treść opisu zmiennych obliczanych jest podzielona na sekcje item, opisujące poszczególne zmienne.

Atrybuty name, type i sense podają nazwę, typ wartości i znaczenie zmiennej obliczanej. Jeżeli zmienna jest zmienną prostą lub tablicą, to wartością atrybutu type jest nazwa typu prostego, zdefiniowanego w segmencie specyfikacji types. Jeżeli zmienna jest rekordem, to wartością atrybutu type jest nazwa typu rekordu zdefiniowanego w segmencie specyfikacji records (rozdz. 2.1).

Atrybut size określa rodzaj zmiennej oraz liczbę pól, jeżeli zmienna jest tablicą:

0 – zmienna prosta;1 – rekord;

>1– tablica; wartość atrybutu size jest równa liczbie pól tablicy.

22

System Monitorowania, Analizy i Raportowania Produkcji Atrybut mode opisuje sposób przetwarzania wartości zmiennej przez serwer:

0 – pomijanie zmiennej (wartość zmiennej nie jest obliczana);1 – obliczenie wartości zmiennej;2 – obliczenie wartości zmiennej i zapamiętanie jej w logu historii, o ile jest różna od

wartości poprzedniej.

Atrybut order określa kolejność przetwarzania zmiennych obliczanych, po zmienie wartości zmiennych mierzonych w wyniku odebrania komunikatu z kolejki wejściowej.

Element comment zawiera opis zmiennej (objaśnienie). Element value, który może posiadać opcjonalny atrybut idx lub field, określa początkową wartość zmiennej. Zmienna prosta ma tylko jeden element value, bez żadnego atrybutu. Zmienna złożona, która jest tablicą lub rekordem, ma wiele elementów value, po jednym dla każdego pola. Wartość atrybutu idx określa numer kolejny elementu tablicy, a wartość atrybutu field określa nazwę pola rekordu.

Element expression wskazuje wyrażenie używane do obliczenia wartości zmiennej. Element arguments, który może posiadać opcjonalny atrybut trigger, podaje listę argumentów aktualnych wyrażenia. Atrybut trigger określa nazwę argumentu wyzwalającego, którego zmiana inicjuje obliczenie wyrażenia i nadanie wartości zmiennej obliczanej. Jeżeli atrybut trigger jest pominięty, to rolę argumentu wyzwalającego pełni każdy argument aktualny wyrażenia.

Lista argumentów aktualnych ma postać listy elementów item, z których każdy opisuje pojedynczy argument. Atrybuty name i seq kolejnych argumentów określają nazwę i miejsce danego argumentu na liście argumentów aktualnych.

Lista argumentów aktualnych powinna wystąpić w definicji zmiennej obliczanej nawet wtedy, gdy definicja wyrażenia zmiennej nie zawiera argumentów formalnych, ponieważ argumenty aktualne są używane do oceny potrzeby obliczenia wartości zmiennej po odebraniu komunikatu transpondera (rozdz. 5.2).

Szczególnym przypadkiem zmiennych obliczanych są zmienne pomocnicze, których wartości mogą ulec zmianie wyłącznie jako efekt uboczny wykonania funkcji serwera. Specyfikacja takich zmiennych nie zawiera atrybutu order ani elementów expression i arguments.

Niektóre elementy i atrybuty specyfikacji zmiennej są opcjonalne. Jeżeli nie zostaną w specyfikacji wymienione, to przyjmą następujące wartości domyślne:

size = 0 zmienna skalarnasense = "" brak definicji znaczeniamode = 1 obliczenie wartości zmiennejorder = 0 zmienna obliczana jako efekt uboczny funkcjivalue = 0 wartość początkowa równa 0trigger = "" obliczenie inicjowane zmianą wartości argumentów

2.6. StałePrawidłowy sposób działania instalacji produkcyjnej opisują często parametry o stałej wartości, takie jak np. maksymalne lub minimalne wartości pewnych zmiennych, których przekroczenie wskazuje na błędną pracę instalacji. Tego rodzaju stałe wartości mogą pojawić się jako argumenty wyrażeń służących do obliczania wartości zmiennych obliczanych. Serwer SMARP traktuje stałe jako specjalny rodzaj zmiennych, których wartość nie ulega zmianie.

Specyfikacja stałych jest dokumentem tworzonym podczas projektowania systemu SMARP, indywidualnie dla każdego wdrożenia. Specyfikacja jest plikiem XML o następującej postaci.

23

System Monitorowania, Analizy i Raportowania Produkcji <smarp plant = "Cisowianka" > nagłówek specyfikacji systemu <constants version = "1.0" > rodzaj i wersja specyfikacji <item name = "limit_1" jednoznaczna nazwa stałej type = "INTEGER" nazwa typu wartości stałej sense = "Temp" znaczenie wartości size = "0" rozmiar stałej (skalar) mode = "0" > tryb przetwarzania 0 <comment> opis stałej </comment> <value> 70 </value> wartość stałej </item> ....................... dalsze definicje stałych </constants></smarp>

Element smarp jest zewnętrznym ogranicznikiem specyfikacji konkretnej instalacji produkcyjnej. Nazwę tej instalacji wskazuje atrybut plant. Element constants wyznacza segment specyfikacji opisujący stałe. Atrybut version podaje numer wersji segmentu. Treść opisu stałych jest podzielona na sekcje item, opisujące poszczególne stałe.

Atrybuty name, type i sense podają nazwę, typ wartości i znaczenie stałej. Jeżeli stała jest stała prostą lub tablicą, to wartością atrybutu type jest nazwa wbudowanego typu danych. Jeżeli stała jest rekordem, to wartością atrybutu type jest nazwa typu rekordu, zdefiniowanego w segmencie specyfikacji records (rozdz. 2.1).

Atrybut size określa rodzaj zmiennej oraz liczbę pól, jeżeli stała jest tablicą:

0 – wartość prosta;1 – rekord;

>1– tablica; wartość atrybutu size jest równa liczbie pól tablicy.

Atrybut mode określa tryb przetwarzania, który musi mieć wartość 0 (brak zmiany wartości ).

Element comment zawiera opis stałej (objaśnienie). Element value, który może posiadać opcjonalny atrybut idx lub field, określa wartość stałej. Stała prosta ma tylko jeden element value, bez żadnego atrybutu. Stała złożona, która jest tablicą lub rekordem, ma wiele elementów value, po jednym dla każdego pola. Wartość atrybutu idx określa numer kolejny pola tablicy, a wartość atrybutu field określa nazwę pola rekordu.

Niektóre elementy i atrybuty specyfikacji stałej są opcjonalne. Jeżeli nie zostaną w specyfikacji wymienione, to przyjmą następujące wartości domyślne:

size = 0 stała skalarnamode = 0 brak przetwarzania stałej.

2.7. AlarmyAlarmem nazywany każdy nieprawidłowy stan instalacji, który może być wykryty i zasygnalizowany przez serwer SMARP. Wykrycie alarmu polega na sprawdzeniu wartości wskazanych zmiennych prostych, mierzonych lub obliczanych, i stwierdzeniu, czy wartości te spełniają określony warunek (np. temperatura przekracza pewną zadaną wartość).

Sprawdzenie warunku alarmu i zasygnalizowanie jego wystąpienia następuje podczas obliczania wartości zmiennej obliczanej, nazywanej zmienną zgłaszającą alarmu. Zmienna zgłaszająca jest zmienną binarną, które przyjmuje dwie wartości:

0 – stan prawidłowy, brak alarmu,

24

System Monitorowania, Analizy i Raportowania Produkcji 1 – alarm.

Wykryte alarmy mogą być pokazane na obrazie synoptycznym instalacji, a wartości zmiennej zgłaszającej i jej argumentów w chwili wystąpienia alarmu oraz w chwili powrotu do stanu prawidłowego są zapisywane w logu historii. Standardowy sposób obsługi alarmów nie wymaga definiowania żadnego specjalnego mechanizmu obsługi.

Wystąpienie pewnych alarmów może wymagać dodatkowego powiadomienia użytkownika za pomocą komunikatu sms, e-maila lub panelu operatora. Następstwem wyświetlenia komunikatu na panelu może być odpowiedź operatora, przyjmująca postać wartości wprowadzonej przez operatora w okienku wyświetlonym na panelu przez serwer. Wartość ta jest zapisywana jako wartość pewnej zmiennej prostej, nazywanej zmienną odpowiedzi. Powiadomienia mogą być wysyłane do wielu użytkowników lub wyświetlane na wielu panelach.

Specyfikacja alarmu wskazuje zmienną zgłaszającą i opisuje rodzaj powiadomień, jakie mają być wysłane po wystąpieniu alarmu. Specyfikacja alarmów określa wymagania dla serwera, który musi wykrywać alarmy, realizować powiadomienia i kojarzyć odpowiedzi z wiadomościami wyświetlonymi wcześniej na panelu.

Specyfikacja alarmów jest dokumentem tworzonym podczas projektowania systemu, indywidualnie dla każdego wdrożenia systemu SMARP. Specyfikacja jest plikiem XML o następującej postaci.

<smarp plant = "Cisowianka" > nagłówek specyfikacji systemu <alarms version = "1.0" > rodzaj i wersja specyfikacji <alarm name = "A_t1" jednoznaczna nazwa alarmu report = "stan1" > nazwa zmiennej zgłaszającej <comment> opis alarmu opis alarmu (objaśnienie) </comment> <phones> <sms value = "1" > sms przy zgłoszeniu <to> 123456789 numer telefonu </to> <note> wiadomosc_1 treść sms-a </note> </sms> .................... dalsze definicje sms-ów </phones> <mails> <mail value = "0" > mail przy odwołaniu <to> [email protected] adres pocztowy </to> <note> treść wiadomości treść e-maila </note> </mail> .................... dalsze definicje email-i

25

System Monitorowania, Analizy i Raportowania Produkcji </mails> <panels> <panel name = "p1" nazwa panelu reply = "x1" nazwa zmiennej odpowiedzi value = "1" > <note> treść wiadomości treść komunikatu wyświetlanego </note> </panel> .................... dalsze definicje paneli </panels> </alarm> .................... dalsze definicje alarmów </alarms></smarp

Element smarp jest zewnętrznym ogranicznikiem specyfikacji konkretnej instalacji produkcyjnej. Nazwę tej instalacji wskazuje atrybut plant. Element alarms wyznacza segment specyfikacji opisujący alarmy. Atrybut version podaje numer wersji segmentu. Treść opisu alarmów jest podzielona na sekcje alarm, opisujące poszczególne alarmy.

Atrybuty name i report podają nazwę alarmu oraz nazwę zmiennej zgłaszającej. Element comment zawiera opis alarmu. Elementy phones i mails definiują listy adresów i wiadomości sms i e-mail. Atrybut value wskazuje, czy dany mail lub sms ma być wysłany w przypadku zgłoszenia alarmu (value = 1), czy odwołania (value = 0). Element panels definiuje panele operatora i wiadomości wyświetlane na panelach oraz wskazuje zmienne odpowiedzi. Zmienne te muszą być zdefiniowane w specyfikacji zmiennych mierzonych (rozdz. 2.4)

Pominięcie elementu phones, mails lub panels oznacza, że wystąpienie alarmu nie wymaga powiadomienia użytkowników w sposób definiowany przez pominięty element. Brak atrybutu reply oznacza brak odpowiedzi na wiadomość z panelu operatora. Pominięty atrybut value przyjmuje wartość domyślną:

value = 1 ogłoszenie alarmu

2.8. Struktura instalacjiInstalacja produkcyjna przedsiębiorstwa (rys. 2.1) składa się z linii technologicznych i instalacji pomocniczych, które są zbudowane z maszyn, a te z zespołów, które mogą dalej dzielić się na drobniejsze podzespoły. Tak postrzeganą instalację produkcyjną przedsiębiorstwa można opisać w postaci hierarchicznej struktury obiektów (linii, maszyn, zespołów itd.) składających się z innych obiektów. Każdy obiekt jest opisany przez zespół atrybutów, takich jak nazwa, typ itd., każdy ma też przyporządkowany pewien zestaw zmiennych procesowych (mierzonych i obliczanych), których wartości opisują pracę tego obiektu.

26

System Monitorowania, Analizy i Raportowania Produkcji

Poszczególne obiekty instalacji są połączone ze sobą w sposób określony przez wykonywany proces technologiczny. Strukturę tych połączeń można opisać w postaci grafu, którego węzłami są obiekty, a łukami połączenia obiektów, przez które przepływają strumienie półproduktów lub materiałów. Przyjęty sposób opisu instalacji przywiązuje wszelkie wartości liczbowe (zmienne procesowe) do węzłów grafu (obiektów instalacji) i traktuje łuki wyłącznie jako opis relacji zachodzącej między obiektami. Dlatego wszystkie elementy instalacji, z którymi wiążą się jakieś wartości, muszą być przedstawione w postaci obiektów. Dotyczy to w szczególności systemów transportowych łączących maszyny linii produkcyjnej, które mogą być charakteryzowane przez szereg parametrów takich jak np. przepustowość, pojemność wewnętrznych buforów półproduktów, stopień zapełnienia tych buforów, stan pracy itp.

Specyfikacja instalacji produkcyjnej przedsiębiorstwa opisuje obiekty oraz graf połączeń istniejących między maszynami instalacji. Graf połączeń jest zapisany w języku GraphML [4]. Specyfikacja jest dokumentem tworzonym podczas projektowania systemu, indywidualnie dla każdego wdrożenia systemu SMARP. Specyfikacja jest plikiem XML o następującej postaci.

<smarp plant = "Cisowianka" > nagłówek specyfikacji <factory version = "1.0" > rodzaj i wersja specyfikacji <node name = "plant" > nazwa obiektu (tu: instalacja) <variables> lista zmiennych <item name = "state" > <display show = "yes" place = "1" type = "led" /> </item> <item name = "p1" > <display show = "yes" place = "2" type = "box" > <fraction> 2 </fraction> <legend lang = "pl" > moc </legend> <legend lang = "en" > power </legend> </display> </item> ...................... kolejne zmienne obiektu

27

Linia butelkowania L2

Linia butelkowania L1

Instalacja pomocniczaInstalacja pomocnicza

Transporter butelek T1a

Preformy Inspektor nalewu IN1

NalewarkaN1

ButelczarkaB1

Studnia głębinowa

Produkcjawody

Transporter butelekT2a

Preformy Inspektor nalewu IN2

NalewarkaN2

ButelczarkaB2

Stacja CIP

Pełnebutelki

Pełnebutelki

Wodasurowa Woda Piana

Rysunek 2.1. Fragment połączenia maszyn w rozlewni napojów

System Monitorowania, Analizy i Raportowania Produkcji </variables> <parts> <part name = "L1" > część wyświetlana jako pierwsza <display show = "yes" place = "1" /> </part> <part name = "L2" > część wyświetlana jako druga <display show = "yes" place = "2" /> </part> ...................... kolejne obiekty (linie) </parts> <display show = "yes" > sposób wyświetlania obiektu <legend> Cisowianka </legend> </display> </node> <node name = "L1" nazwa obiektu type = "LB-XLS" > typ linii (symbol producenta) <variables> <item name = "st1" /> zmienna nie wyświetlana <item name = "p2" > zmienna nie wyświetlana <display show = "no" place = "1" type = "box" > <legend> ciśnienie pompy </legend> </display> </item> </variables> <parts> <part name = "B1" > część wyświetlana jako pierwsza <display show = "yes" place = "1" /> </part> <part name = "B2" > część wyświetlana jako druga <display show = "yes" place = "2" /> </part> ................. kolejne części (maszyny) </parts> <display show = "yes" > <legend> Linia butelkowania </legend> </display </node> <node name = "B1" nazwa obiektu (maszyny) type = "CMA-2000HLCD" > <variables> <item name = "s1" > <display show = "yes" place = "1" type = "led" /> </item> <item name = "n" > <display show = "yes" place = "2" > type = "box" /> <legend lang = "pl" > sztuk </legend> <legend lang = "en" > units </legend>

28

System Monitorowania, Analizy i Raportowania Produkcji </display> </item> </variables> <parts> <part name = "P1" /> część nie wyświetlana <part name = "P2" /> część nie wyświetlana ................. kolejne obiekty (zespoły) </parts> </node> ...................... kolejne opisy obiektów <edge source="B1" target="T1a"/> połączenie węzła B1 do T1a <edge source="T1a" target="N1"/> połączenie węzła T1a do N1 ...................... kolejne opisy połączeń </factory></smarp>

Element smarp jest zewnętrznym ogranicznikiem specyfikacji konkretnej instalacji produkcyjnej. Nazwę tej instalacji wskazuje atrybut plant. Element factory wyznacza segment specyfikacji opisujący strukturę instalacji produkcyjnej. Atrybut version podaje numer wersji segmentu. Treść opisu instalacji składa się ze złożonych elementów node, opisujących obiekty instalacji (linie, maszyny, zespoły), oraz elementów edge, opisujących połączenia obiektów.

Atrybuty name i type elementu node opisują nazwę obiektu i jego typ (oznaczenie handlowe producenta). Dalsza część opisu obiektu składa się z sekcji variables, opisującej zmienne związane z danym obiektem, sekcji parts, opisującej obiekty składowe, oraz sekcji display, opisującej sposób wyświetlania obiektu na obrazie synoptycznym instalacji.

Sekcja variables zawiera listę elementów item, których atrybuty name wskazują zmienne związane z danym obiektem instalacji. Element display opisuje sposób wyświetlania obrazu zmiennej na ekranie. Atrybut show wskazuje, czy zmienna ma być wyświetlona:

"no" oznacza brak wyświetlania zmiennej, "yes" oznacza wyświetlanie zmiennej wraz z opisem.

Atrybut place określa pozycję zmiennej pośród innych wyświetlanych zmiennych obiektu, a atrybut type wskazuje sposób wyświetlania zmiennej:

"box" oznacza wyświetlenie wartości zmiennej w polu numerycznym,"led" oznacza wyświetlenie wartości zmiennej w postaci ikony diody świecącej, której

kolor opisuje stan obiektu wskazany przez wartość zmiennej:

wartość < 0 – kolor zielony, wartość 0 – kolor szary, wartość > 0 – kolor czerwony.

Element fraction określa liczbę cyfr po przecinku wartości zmiennej wyświetlanej w sposób numeryczny. Element legend podaje podpis obiektu na obrazie. Opcjonalny atrybut lang, którego wartość powinna być zgodna ze specyfikacją [5], określa język podpisu. Jeżeli istnieje konieczność wyświetlania podpisów obiektów w różnych językach, to można zdefiniować wiele elementów legend z różnymi wartościami atrybutu lang. Jeżeli atrybut lang nie zostanie zdefiniowany, to treść podpisu jest we wszystkich językach taka sama.

Sekcja parts wylicza nazwy części obiektu: linii technologicznych instalacji, maszyn należących do linii, zespołów maszyny itd., identyfikowanych przez atrybut name. Element

29

System Monitorowania, Analizy i Raportowania Produkcji display opisuje sposób wyświetlania części na ekranie. Atrybut show wskazuje, czy dana część ma być wyświetlona na ekranie obiektu, atrybut place określa pozycję tej części pośród innych wyświetlanych części obiektu.

Sekcja display określa szczegóły obrazu obiektu na obrazie synoptycznym instalacji. Atrybut show wskazuje, czy obiekt jest wyświetlany (ma swój ekran) na obrazie synoptycznym:

"no" oznacza brak wyświetlania obiektu, "yes" oznacza wyświetlanie obiektu wraz z opisem.

Element legend podaje podpis obiektu na obrazie, być może określony w kilku językach, analogicznie do podpisu zmiennej.

Ostatnim elementem specyfikacji jest lista połączeń obiektów, z których każde wskazuje początkową (source) i końcową (target) maszynę połączenia.

Niektóre elementy i atrybuty specyfikacji instalacji produkcyjnej są opcjonalne. Jeżeli nie zostaną w specyfikacji wymienione, to przyjmą następujące wartości domyślne:

type = "" brak określenia typu obiektushow = "no" element nie jest wyświetlany na obrazie synoptycznymfraction = 0 wyświetlana tylko część całkowita wartościlang = "" brak wskazania języka podpisu obiektu lub zmiennejlegend = "" brak podpisu obiektu lub zmiennej

Brak elementu parts oznacza brak obiektów składowych (obiekt jest postrzegany jako niepodzielna całość). Brak elementu variables oznacza brak zmienne związanych z danym obiektem instalacji.

Specyfikacja instalacji umożliwia automatyczne wygenerowanie standardowego zestawu stron WWW prezentujących synoptykę instalacji dla wszystkich grup użytkowników.

30

System Monitorowania, Analizy i Raportowania Produkcji 3.Specyfikacja komunikatów

Przetwarzanie danych procesowych przez serwer systemu SMARP polega na przetwarzaniu komunikatów napływających do serwera od transpondera, panelu operatora oraz wewnętrz-nych liczników czasu (rys. .2). Wszystkie odebrane komunikaty są początkowo zapisywane do wspólnej kolejki wejściowej, a następnie przetwarzane w tempie wyznaczonym przez rytm pracy serwera. Taka organizacja przetwarzania zapobiega możliwości zgubienia komunikatu w okresie dużego obciążenia serwera oraz niedopuszcza do wystąpienia konfliktu dostępu do zmiennych procesowych.

3.1. Protokół komunikacjiTransponder jest urządzeniem zbierającym dane procesowe z nadzorowanej instalacji produkcyjnej i przekazującym te dane do serwera SMARP poprzez łącze internetowe. Autonomicznym elementem transpondera jest panel, który wyświetla wiadomości i zapytania serwera skierowane do operatora procesu i przekazuje do serwera odpowiedzi operatora. Komunikacja serwera z panelem odbywa się poprzez łącze internetowe transpondera.

Transponder znajduje się wewnątrz sieci korporacyjnej, która jest chroniona przed światem zewnętrznym przez system firewall. Serwer może znajdować się na zewnątrz tej sieci. Obecność systemu firewall powoduje, że transponder może zawsze wysłać komunikat do serwera, natomiast serwer może wysłać komunikat tylko jako odpowiedź na komunikat transpondera.

Działanie transpondera polega na ciągłym wysyłaniu do serwera komunikatów zawierających dane procesowe. Częstotliwość wysyłania komunikatów wynika z wymaganej częstotliwości raportowania zmiennych, określonej w specyfikacji zmiennych mierzonych (element sensors, rodz. 2.4). Jeżeli przez długi czas żadna zmienna nie zmieni swojej wartości, to transponder wysyła specjalny komunikat podtrzymania, sygnalizujący jego poprawny stan pracy. Zanik strumienia komunikatów może wystąpić tylko w razie awarii transpondera lub awarii łącza.

Każdy komunikat transpondera daje serwerowi okazję do wysłania komunikatu odpowiedzi, przy czym treść wysyłanego komunikatu nie musi mieć logicznego związku z ostatnio odebranym komunikatem transpondera. Taka organizacja komunikacji serwera z transponderem jest zgodna z modelem odpytywania, w którym transponder pełniący rolę węzła master wywołuje serwer i przekazuje mu dane, co daje serwerowi pełniącemu rolę węzła slave możliwość zwrotnego wysłania swojego komunikatu.

Protokół odpytywania nie zależy od rytmu przetwarzania serewera. Oprogramowanie komunikacyjne serwera zapisuje każdy odebrany komunikat transpondera do kolejki wejściowej, po czym bezzwłocznie wysyła do transpondera komunikat znajdujący się na czele kolejki poleceń (rys. .2). Jeżeli kolejka poleceń jest pusta, to serwer nie wysyła do transpondera żadnego komunikatu. Przetwarzanie komunikatów zapisanych w kolejce wejściowej oraz przygotowanie komunikatów w kolejce poleceń jest wykonywane przez inne moduły oprogramowania serwera, nie biorące bezpośredniego udziału w obsłudze komunikacji.

Wszystkie komunikaty wysyłane przez transponder do serwera są numerowane kolejnymi liczbami naturalnymi, przekazywanymi w treści komunikatu jako wartość zmiennej całkowitej o nazwie równej nazwie transpondera. Moduł obsługi komunikacji transpondera może kontrolować numery odbieranych komunikatów i w razie stwierdzenia nieciągłości numeracji żądać retransmisji zagubionych danych. Funkcja kontroli numerów komunikatów na poziomie serwera systemu SMARP nie jest niezbędna, ponieważ niezawodnośc

31

System Monitorowania, Analizy i Raportowania Produkcji komunikacji zapewniają niższe warstwy protokołów internetowych, przede wszystkim protokół TCP. Przekazywanie numeru komunikatu jako wartość zmiennej mierzonej serwera, daje dodatkową możliwość kontroli niezawodności transmisji danych procesowych także na poziomie programu aplikacyjnego.

Strumień komunikatów przepływających przez łącze internetowe międy transponderem i serwerem, można logicznie podzielić na dwa odrębne kanały komunikacyjne:

kanał transpondera (rozdz. 3.2) tworzą komunikaty transpondera przenoszące do serwera dane procesowe oraz komunikaty serwera przenoszace do transpondera polecenia wykonania pewnych działań;

kanał panelu (rozdz. 3.3) tworzą komunikaty serwera przenoszące polecenia wyświetlenia na panelu wiadomości dla operatora oraz komunikaty panelu przenoszące do serwera odpowiedzi operatora.

Komunikaty wysyłane w kanale transpondera przez serwer nie są logicznie powiązane z komunikatami wysyłanymi przez transponder. Transponder wysyła komunikaty w rytmie czasowym określonym przez specyfikację zmiennych mierzonych. Komunikaty serwera są wysyłane na ogół na polecenie użytkownika. Strumienie komunikatów przepływające w obu kierunkach można uważać za niezależne.

Komunikacja w kanale panelu jest zorganizowana w odmienny sposób. Serwer wysyła komunikat do panelu po wykryciu alarmu. Wynikiem odebrania komunikatu przez panel jest wyświetlenie wiadomości dla operatora, połączone często z wyświetleniem okienka dialogowego umożliwiającego wprowadzenie odpowiedzi operatora. Panel wysyła komunikat zawierający odpowiedź operatora. Taka organizacja komunikacji serwera z panelem jest zgodna z modelem klient-serwer, w którym serwer pełni rolę klienta wywołującego usługę wyświetl realizowaną przez panel pełniący rolę serwera wyświetania.

Wszystkie komunikaty przekazywane między transponderem a serwerem w obu kanałach logicznych i w obu kierunkach są plikami XML, przesyłanymi przez łącze internetowe bez binarnego kodowania treści. Brak kodowania zwiększa objętość komunikatów, natomiast zdecydowanie przyspiesza przetwarzanie ich treści.

3.2. Komunikaty transponderaPodstawowym celem komunikacji jest systematyczne przekazywanie przez transponder danych procesowych do serwera. Odpowiedzi serwera nie są obowiązkowe, lecz jeśli wystąpią, to mogą być wykorzystane do sterowania pewnymi aspektami pracy transpondera.

Komunikaty transpondera przenoszą do serwera wartości zmiennych mierzonych. Dla zwiększenia efektywności przekazu, komunikat zawiera tylko wartości tych zmiennych, które uległy zmianie od poprzedniego komunikatu. Serwer przetwarza wartości zmiennych zawarte w treści komunikatu i przyjmuje, że wartości pozostałych zmiennych nie uległy zmianie.

Jedną ze zmiennych komunikatu może być zmienna całkowita o nazwie takiej samej, jak nazwa transpondera. Wartością tej zmiennej jest numer kolejny komunikatu, nadawany automatycznie przez transponder. Kontrola ciągłości numerów komunikatów odbieranych przez serwer może być wykorzystana do wykrywania utraty komunikatów. Numery komunikatów są przesyłane przez transponder o ile zmienna o nazwie równej nazwie transpondera jest zadeklarowana w specyfikacji zmiennych mierzonych (element sensors, rozdz. 2.4).

Każdy komunikat ma postać pliku tekstowego, zapisanego w języku XML w następującym formacie.

32

System Monitorowania, Analizy i Raportowania Produkcji <packet plant = "Cisowianka" > nazwa instalacji produkcyjnej from = "tr_1" nazwa transpondera date = "2013-04-15T17:25:02" > data i godzina nadania <item name = "tr_1"> zmienna transpondera <value> 12 </value> id (numer seryjny) komunikatu </item> <item name = "temp_2" nazwa zmiennej date = "2013-04-15T17:22:00" > stempel czasowy <value> 45 </value> wartość zmiennej </item> <item name = "count" date = "2013-04-15T17:20:10" > <value> 88 </value> wartość zmierzona o 17:20:10 </item> <item name = "count" date = "2013-04-15T17:20:40" > <value> 90 </value> wartość zmierzona o 17:20:40 </item> <item name = "temps" nazwa zmiennej tablicowej date = "2013-04-15T17:20:41" > <value idx = "0" > 24 </value> pierwszy element tablicy <value idx = "1" > 28 </value> drugi element tablicy </item> <item name = "params" nazwa zmiennej rekordowej date = "2013-04-15T17:21:12" > <value field = "press"> 1.8 </value> pierwsze pole rekordu <value field = "temp" > 45.1 </value> drugie pole rekordu </item></packet>

Komunikat składa się z nagłówka (element packet) i listy zmiennych mierzonych (elementy item). Nagłówek komunikatu zawiera nazwę instalacji produkcyjnej (plant), nazwę transpondera (from) oraz stempel czasowy komunikatu (date). Wszystkie elementy nagłówka są obowiązkowe i muszą wystąpić w każdym komunikacie transpondera.

Dalszą część komunikatu zajmuje lista zmiennych mierzonych, zawierająca kolejne próbki wartości zmiennych (item). Każda próbka wartości zmiennej zawiera nazwę zmiennej (name) i wartość (value). Dodatkowo, zmienna może posiadać indywidualny stempel czasowy (date), określający czas dokonania pomiaru wartości. Jeżeli atrybut date jest pominięty, to jako wartość stempla czasowego przyjmuje się czas nadania komunikatu (atrybut date w nagłówku).

Jeżeli komunikat zawiera wiele próbek wartości tej samej zmiennej, to próbki te muszą zawierać stemple czasowe różniące się wartościami (próbki zmierzone w różnych chwilach).

Wartości zmiennej złożonej, tzn. tablicy lub rekordu, są przesyłane zawsze w postaci zbioru wartości wszystkich pól. Kolejne pola zmiennej są zapisane wewnątrz kolejnych elementów value. Element value może posiadać opcjonalne atrybuty idx oraz field. Wartość atrybutu idx określa numer kolejny pola tablicy, a wartość atrybutu field określa nazwę pola rekordu.

Komunikat podtrzymania, wysyłany w razie długotrwałego braku zmiany wartości zmiennych mierzonych, składa się tylko z nagłówka i numeru komunikatu.

33

System Monitorowania, Analizy i Raportowania Produkcji Komunikaty serwera przenoszą do transpondera polecenia wykonania pewnych działań sterujących, związanych z następującymi aspektami pracy transpondera.

1. Retransmisja danych utraconych na skutek błędów komunikacji.

2. Zbieranie trendlogów. Użytkownik może wysłać do transpondera polecenie zwiększenia częstotliwości monitorowania zmian wybranej zmiennej mierzonej.

3. Synchronizacja czasu. Serwer może okresowo wysyłać do wszystkich transponderów obowiązującą wartość czasu.

Komunikat serwera dotyczący retransmisji danych przenosi do transpondera polecenie synchronizacji wartości danych utraconych na skutek zagubienia pakietów w komunikacji sieciowej. W normalnym trybie komunikacji, komunikaty transpondera przenoszą do serwera informacje o zmianie wartości zmiennych mierzonych – utrata komunikatu skutkuje więc nieodwracalną utratą informacji o zmianie. Aby temu przeciwdziałać, serwer może kontrolować numery seryjne komunikatów i w razie stwierdzenia utraty komunikatu wysyłać do transpondera żądanie synchronizacji wartości danych. Odpowiedzią transpondera na to żądanie może być retransmisja komunikatów utraconych, lub jeden komunikat zawierający bieżące wartości wszystkich zmiennych mierzonych. Komunikat żądania retransmisji danych ma postać pliku tekstowego zapisanego w języku XML w następującym formacie.

<action plant = "Cisowianka" nazwa instalacji produkcyjnej to = "tr_1" > nazwa transpondera <last> 12 </last> numer ostatniego komunikatu</action>

Komunikat żądania retransmisji składa się z nagłówka (element action) oraz identyfikatora ostatniego komunikatu transpondera prawidłowo odebranego przez serwer. Nagłówek komunikatu zawiera nazwę nadzorowanej instalacji produkcyjnej (plant) i nazwę transpondera (to). Element last podaje numer ostatniego odebranego komunikatu transpondera.

Komunikat serwera dotyczący zbierania trendlogów przenosi do transpondera zmieniony opis zmiennej mierzonej, której wartości są zbierane przez transponder. Komunikat zbierania trendlogów ma postać pliku tekstowego zapisanego w języku XML w następującym formacie.

<action plant = "Cisowianka" nazwa instalacji produkcyjnej to = "tr_1" > nazwa transpondera <item name = "t1" nazwa zmiennej mode = "2" tryb przetwarzania przez serwer sample = "2" /> okres próbkowania zmiennej ....................... dalsze opisy zmiennych</action>

Komunikat składa się z nagłówka (element action) i listy zmiennych mierzonych (elementy item). Nagłówek komunikatu zawiera nazwę instalacji (plant) i nazwę transpondera (to).

Polecenie zbierania trendlogów może dotyczyć tylko zmiennej mierzonej zdefiniowanej w specyfikacji systemu SMARP. Odebranie komunikatu przez transponder powoduje zmianę wartości elementów opisu zmiennej znajdujących się w zakresie elementu item. Ze względów bezpieczeństwa zmianie mogą podlegać tylko atrybuty mode i sample (rozdz. 2.4), przy czym wartość atrybutu mode nie może przyjąć wartości 0.

34

System Monitorowania, Analizy i Raportowania Produkcji Komunikat serwera dotyczący synchronizacji czasu przenosi do transpondera bieżącą wartość zegara serwera. Komunikat serwera ma postać pliku tekstowego zapisanego w języku XML w następującym formacie.

<action plant = "Cisowianka" nazwa instalacji produkcyjnej to = "tr_1" > nazwa transpondera <date> 2013-04-15 17:28:00 </date> wartość czasu serwera</action>

Komunikat składa się z nagłówka (element action) i wartości czasu serwera. Nagłówek komunikatu zawiera nazwę instalacji (plant) i nazwę transpondera (to). Element date podaje wartość czasu obowiązującą w systemie.

3.3. Komunikaty paneluPodstawowym zastosowaniem panelu operatora jest wyświetlanie przez serwer wiadomości o alarmach wykrytych w nadzorowanej instalacji i przesyłaniu przez panel odpowiedzi operatora na wiadomości alarmowe. W każdym przypadku komunikacja ma charakter odpytywania panelu przez serwer – operator może udzielić odpowiedzi tylko poprzez okno dialogowe wyświetlone wsześniej przez serwer.

Obsługę alarmów w serwerze systemu SMARP (rys. .2) realizuje moduł obliczania zmiennych i alarmów oraz procesor powiadomień. Moduł obliczania zmiennych i alarmów wykrywa alarmy, zapisuje informacje o wystąpieniu lub odwołaniu alarmu w tabeli History i przekazuje komunikaty o incydentach do kolejki alarmów. Komunikat alarmu jest plikiem tekstowym zapisanym w języku XML w następującym formacie.

<alarm plant = "Cisowianka"" nazwa instalacji produkcyjnej name = "Al_12" nazwa alarmu date = "17:22:00" czas wystąpienia alarmu value = "1" /> wartość zmiennej zgłaszającej</alarm>

Komunikat składa się z nagłówka (element alarm) oraz wartości zmiennej zgłaszającej. Nagłówek komunikatu zawiera nazwę instalacji (plant) oraz nazwę alarmu (alarm) i czas jego wystąpienia (date), równy stemplowi czasowemu zmiennej zgłaszającej. Element value podaje wartośc zmiennej zgłaszającej, równą 1 w razie zgłoszenia alarmu i równą 0 w przypadku jego odwołania.

Parametry określające rodzaj działań wykonywanych przez procesor powiadomień są określone w specyfikacji alarmu (rozdz. 2.7). Jeżeli specyfikacja alarmu przewiduje wyświetlenie informacji na panelu, to serwer wysyła do panelu komunikat zawierający treść wiadomości oraz informację o wymaganej odpowiedzi operatora. Komunikat wyświetlenia jest plikiem tekstowym zapisanym w języku XML w następującym formacie.

<display plant = "Cisowianka" nazwa instalacji produkcyjnej panel = "p1" > nazwa panelu <alarm name = "A_12" nazwa alarmu date = "17:22:00" czas zgłoszenia incydentu value = "1" wartość zmiennej zgłaszającej reply = "code" /> nazwa zmiennej odpowiedzi <note> tekst do wyświetlenia na panelu treść wiadomości </note>

35

System Monitorowania, Analizy i Raportowania Produkcji </display>

Komunikat składa się z nagłówka (element display) oraz opisu alarmu i treści wiadomości. Nagłówek komunikatu zawiera nazwę instalacji (plant) oraz nazwę panelu (panel). Element alarm podaje nazwę alarmu (name), czas wystąpienia (date), wartość zmiennej zgłaszającej (value) i nazwę zmiennej odpowiedzi (reply). Element note zawiera treść wiadomości.

Komunikat odpowiedzi panelu jest przesyłana do serwera w postaci jest pliku tekstowego zapisanego w języku XML w następującym formacie.

<reply plant = "Cisowianka" nazwa instalacji produkcyjnej panel = "p1" > nazwa panelu operatora <item name = "tr_1"> zmienna transpondera <value> 12 </value> id (numer seryjny) komunikatu </item> <item name = "code" nazwa zmiennej odpowiedzi date = "17:22:00" stempel czasowy wartości alarm = "A1_12" > nazwa alarmu <value> 3 </value> wartość zmiennej odpowiedzi </item></reply>

Komunikat składa się z nagłówka (element reply) oraz listy dwóch zmiennych. Nagłówek komunikatu zawiera nazwę instalacji (plant) oraz nazwę panelu (panel). Pierwszy element item zawiera numer seryjny komunikatu, podany jako wartość zmiennej o nazwie równej nazwie transpondera, do którego jest dołączony panel. Drugi element item podaje nazwę zmiennej odpowiedzi (name) oraz nazwę alarmu (alarm) i czas jego wystąpienia (date). Czas wystąpienia alarmu jest jednocześnie stemplem czasowym wartości zmiennej odpowiedzi. Element (value) podaje wartość zmiennej zgłaszającej.

Format komunikatu odpowiedzi panelu jest zgodny z formatem komunikatu transpondera. Komunikaty panelu są odbierane z kolejki wejściowej i przetwarzane przez serwer tak samo jak komunikaty transpondera. Wartość atrybutu alarm, zawartego w treści komunikatu, jest wykorzystywana podczas zapisywania wartości zmiennej odpowiedzi w tabeli History.

3.4. Komunikat licznika czasuKomunikaty liczników czasu nie przenoszą wartości zmiennych, lecz polecenia obliczenia przez serwer wartości zmiennych obliczanych związanych z danym licznikiem. Treścią komunikatu jest nazwa tego licznika. Komunikat licznika czasu ma postać pliku tekstowego, zapisanego w języku XML w następującym formacie.

<timer plant = "Cisowianka" nazwa instalacji produkcyjnej date = "17:22:00" > moment zakończenia odmierzania <item name = "tim1" > nazwa zmiennej licznika czasu <value> 1 </value> wartość zmiennej </item> .................. kolejne nazwy zmiennych liczników</timer>

Komunikat składa się z nagłówka (element timer) oraz listy zmiennych. Nagłówek komunikatu zawiera nazwę instalacji (plant) i stempel czasowy komunikatu (date). Element item podaje nazwę zmiennej licznika, który zakończył odmierzanie przedziału czasu. Element (value) podaje wartość zmiennej zgłaszającej – będzie to zawsze wartość 1.

36

System Monitorowania, Analizy i Raportowania Produkcji Format komunikatu licznika czasu jest zgodny z formatem komunikatu transpondera. Komunikaty liczników są odbierane z kolejki wejściowej i przetwarzane przez serwer tak samo jak komunikaty transpondera. Po zakończeniu przetwarzania komunikatu (po przetworzeniu zmiennych obliczanych), zmienne mierzone związane z licznikami przyjmują wartość 0.

37

System Monitorowania, Analizy i Raportowania Produkcji 4.Struktury danych serwera SMARP

Specyfikacja systemu SMARP, zdefiniowana w postaci dokumentów tekstowych zapisanych w notacji XML, umożliwia automatyczne wygenerowanie tabel opisujących wymagany sposób przechowywania i przetwarzania danych. Lista elementów specyfikacji systemu SMARP oraz tabel odpowiadających poszczególnym elementom specyfikacji jest zebrana w tab. 4.1.

Tablica 4.1. Tabele systemu SMARP

Lp. Specyfikacja XML Tabele Rozdział1 <types> DataType 4.12 <records> RecordType 4.13 <semantics> Semantics 4.24 <expressions> Expression, ListF 4.35 <sensors> Variable, ListA, ListS, Data, History, 4.46 <derived> Timer 4.67 <constants>8 <alarms> Alarm, Phone, Mail, Panel9 <factory> Node, NodeVar, NodePart, Edge 4.7

4.1. Typy zmiennych i rekordówDefinicje typów prostych są przechowywane w tabeli DataType. Kolumny tabeli oraz znaczenie przechowywanych w nich wartości odpowiadają atrybutom określonym w specyfikacji typów prostych (rozdz. 2.1).CREATE TABLE DataType { name VARCHAR(12) PRIMARY KEY, nazwa typu danych length SMALLINT rozmiar wartości tego typu danych};

Tabela DataType jest słownikiem typów prostych używanych przez system SMARP.

Definicje typów rekordów są przechowywane w tabeli RecordType. Kolumny tabeli odpowiadają elementom i atrybutom określonym w specyfikacji typów rekordów (rozdz. 2.1).CREATE TABLE RecordType { name VARCHAR(12), nazwa typu rekordu field VARCHAR(12), nazwa pola rekordu type VARCHAR(12), typ pola rekordu seq TINYINT, numer pola rekordu size SMALLINT, rozmiar pola rekordu PRIMARY KEY (name, field)};

Odczytanie listy pól rekordu typu T wymaga wyszukania w tabeli RecordType wszystkich wierszy o wartości T w kolumnie name. Pozostałe elementy wiersza wskażą nazwę (field), typ (type) oraz rodzaj i rozmiar pola rekordu (size).

38

System Monitorowania, Analizy i Raportowania Produkcji

4.2. Semantyka zmiennychOpis semantyki zmiennych i stałych jest zapisany w tabeli Semantics, pełniącej rolę słownika znaczeń wartości. Kolumny tabeli odpowiadają elementom i atrybutom określonym w specyfikacji semantyki zmiennych (rozdz. 2.2).CREATE TABLE Semantics { name VARCHAR(12) PRIMARY KEY, jednoznaczna nazwa znaczenia kind VARCHAR(12), nazwa wielkości fizycznej unit VARCHAR(12), nazwa jednostki miary text VARCHAR(80) opis znaczenia (objaśnienie)};

Biblioteka XML semantics i tabela Semantics są ważnymi elementami dokumentacji systemu SMARP, które jednak nie mają wpływu na implementację systemu. Dlatego są one opcjonalnymi składnikami systemu.

4.3. WyrażeniaDefinicje wyrażeń są przechowywane w relacyjnej tabeli Expression, której postać zależy od implementacji i nie jest udokumentowana w tym miejscu. Dla potrzeb dalszego opisu przyjęto jedynie postać klucza głównego oraz postać opisu argumentów wyrażenia. Warto zauważyć, że wyrażenia będą na ogół składały się z prostej sekwencji warunkowych lub bezwarunkowych wywołań funkcji.CREATE TABLE Expression { name VARCHAR(12) PRIMARY KEY, nazwa wyrażenia (klucz główny) ......... opis wyrażenia};

Lista argumentów formalnych wyrażenia jest przechowywana w odrębnej tabeli ListF, zawierającej następujące kolumny.CREATE TABLE ListF { name VARCHAR(12), nazwa wyrażenia type VARCHAR(12), typ wartości argumentu seq TINYINT, numer kolejny argumentu PRIMARY KEY (name, seq), FOREIGN KEY (name) REFERENCES Expression(name)};

Odczytanie listy argumentów formalnych wyrażenia o nazwie EXP wymaga wyszukania wszystkich wierszy tabeli ListF o wartości EXP w kolumnie name. Dwa pozostałe elementy wiersza wskażą numer kolejny na liście argumentów (seq) oraz typ argumentu (type).

4.4. Zmienne i stałeDefinicje zmiennych i stałych są zapisane we wspólnej tabeli Variable. Kolumny tabeli odpowiadają tym elementom i atrybutom określonym w specyfikacji zmiennych i stałych (rozdz. 2.4 - 2.6), które opisują przetwarzanie serwera (a nie transpondera).CREATE TABLE Variable { name VARCHAR(12) PRIMARY KEY, jednoznaczna nazwa zmiennej

39

System Monitorowania, Analizy i Raportowania Produkcji type VARCHAR(12) NOT NULL, typ zmiennej sense VARCHAR(12), znaczenie zmiennej size SMALLINT, rodzaj zmiennej, rozmiar tablicy mode TINYINT, początkowy tryb przetwarzania text VARCHAR(80), opis zmiennej (objaśnienie) val8 BINARY(8) początkowa wartość zmiennej valT VARBINARY(8000), początkowa wartość zmiennej expr VARCHAR(12), nazwa wyrażenia order INTEGER, kolejność przetwarzania FOREIGN KEY (name) REFERENCES Data(name), FOREIGN KEY (type) REFERENCES DataType(name), FOREIGN KEY (type) REFERENCES RecordType(name), FOREIGN KEY (sense) REFERENCES Semantics(name), FOREIGN KEY (expr) REFERENCES Expression(name)};

Kolumna size określa rodzaj zmiennej oraz liczbę pól zmiennej, która jest tablicą:

0 – zmienna prosta;1 – rekord;

>1– tablica; wartość atrybutu size jest równa liczbie pól tablicy.

Kolumny val8 i valT zawierają wartość początkową zmiennej. Wartości zmiennych prostych typu TINYINT, SMALLINT, INTEGER, BIGINT, REAL, DOUBLE, DATATIME, DATA, TIME i BINARY są zapisywane w kolumnie val8. Wartości zmiennych prostych typu VARCHAR i VARBINARY są zapisywane w kolumnie valT.

Zbiór wartości wszystkich pól tablicy jest zapisany w kolumnie valT jako ciąg bajtów, którego długość jest iloczynem liczby pól tablicy (kolumna size) i długości pojedynczego pola (kolumna length tabeli DataTypes). Lokalizację pola w obszarze valT jednoznacznie wskazuje numer pola w tablicy. Zbiór wartości wszystkich pól rekordu jest zapisany w kolumnie valT jako ciąg bajtów, którego długość jest sumą długości pól rekordu. Lokalizacja pola w obszarze valT wynika z długości obszaru zajętego przez poprzedzające pola rekordu (offset pola obliczony na podstawie definicji rekordu zapisanej w tabeli RecordType).

Opisy zmiennych mierzonych mają stałe wartości w kolumnach expr i order, równe zawsze: NULL i 0, odpowiednio.

Opisy stałych wyróżniają się stałą wartością w kolumnie mode, równą zawsze 0 (brak zmiany wartości). Kolumny expr i order zawierają wartości: NULL i 0, odpowiednio.

Opisy zmiennych obliczanych obejmują także listy argumentów aktualnych, niezbędnych do wywołania wyrażeń i obliczenia wartości zmiennych. Argumentem aktualnym może być dowolna zmienna, jednak zmienne złożone mogą być przetwarzane w ramach wyrażeń tylko przez wbudowane funkcje serwera. Listy argumentów aktualnych są zapisane w odrębnej tabeli ListA, zawierającej następujące kolumny.CREATE TABLE ListA { name VARCHAR(12), nazwa zmiennej obliczanej arg VARCHAR(12), nazwa argumentu aktualnego seq TINYINT, numer kolejny argumentu PRIMARY KEY (name, seq), FOREIGN KEY (name) REFERENCES Variable(name), FOREIGN KEY (arg) REFERENCES Variable(name)

40

System Monitorowania, Analizy i Raportowania Produkcji };

Odczytanie listy argumentów aktualnych, potrzebnych do obliczenia wartości zmiennej o nazwie VAR, wymaga wyszukania wszystkich wierszy tabeli ListA o wartości VAR w kolumnie name. Pozostałe elementy wiersza wskażą nazwę zmiennej (arg) pełniące rolę argumentu oraz numer kolejny (seq) na liście argumentów aktualnych.

Wartość zmiennej obliczanej zależy od wartości zmiennych mierzonych wymienionych na liście jej argumentów aktualnych. Odebranie komunikatu transpondera, który przynosi nowe wartości pewnych zmiennych mierzonych, powoduje konieczność obliczenia nowych wartości zmiennych obliczanych, które od tych zmiennych mierzonych zależą. Listy zależności są zapisane w tabeli ListS, zawierającej następujące kolumny.CREATE TABLE ListS { name VARCHAR(12), nazwa zmiennej mierzonej var VARCHAR(12), nazwa zmiennej obliczanej PRIMARY KEY (name, var), FOREIGN KEY (name) REFERENCES Variable(name), FOREIGN KEY (var) REFERENCES Variable(name)};

Odczytanie listy zmiennych obliczanych po zmianie wartości zmiennej mierzonej o nazwie VAR wymaga wyszukania wszystkich wierszy tabeli ListS o wartości VAR w kolumnie name. Pozostałe elementy znalezionych wierszy tworzą szukaną listę zmiennych obliczanych.

Bieżące wartości zmiennych, które podlegają zmianie podczas pracy instalacji, są zapisywane w tabeli Data, która może być zaimplementowana w postaci struktury danych rezydującej w pamięci operacyjnej. Tabela Data przechowuje również wartości stałych, które dzięki temu mogą być używane do obliczeń na równi z wartościami zmiennych.CREATE TABLE Data { name VARCHAR(12) PRIMARY KEY, nazwa zmiennej val8 BINARY(8) wartość zmiennej valT VARBINARY(8000), wartość zmiennej date DATATIME, stempel czasowy mode TINYINT, tryb przetwarzania FOREIGN KEY (name) REFERENCES Variable(name)};

Kolumny val8 i valT zawierają wartość bieżącą zmiennej, zapisaną analogicznie jak wartość początkowa zmiennej w tabeli Variable.

Wartość bieżąca zmiennej oraz stempel czasowy (date) mogą zmieniać się w wyniku przetwarzania komunikatu transpondera lub licznika czasu. Wartość trybu przetwarzania (mode) może się zmienić w razie potrzeby rozpoczęcia zbierania historii wartości zmiennej.

Historyczne wartości zmiennych, zarówno obliczanych jak i mierzonych, są gromadzone w tabeli History. Tabela może przechowywać wartości zmiennych prostych, tabel i rekordów. Zakres gromadzonych danych obejmuje nazwę zmiennej, wartość bieżącą i stempel czasowy. CREATE TABLE History { name VARCHAR(12), nazwa zmiennej val8 BINARY(8) wartość zmiennej valT VARBINARY(8000), wartość zmiennej date DATETIME, stempel czasowy

41

System Monitorowania, Analizy i Raportowania Produkcji alarm VARCHAR(12), nazwa alarmu PRIMARY KEY (name, date), FOREIGN KEY (name) REFERENCES Variable(name)};

Kolumny val8 i valT zawierają wartość bieżącą zmiennej prostej, tablicy lub pola rekordu, zapisaną analogicznie jak wartość początkowa zmiennej w tabeli Variable.

Jeżeli powodem zapisania wartości zmiennej do tabeli History jest wystąpienie alarmu (rozdz. 5.3), to nazwa alarmu jest zapisywana w kolumnie alarm. Wiersze tabeli zapisane bez związku z wystąpieniem alarmu zawierają w tej kolumnie tekst pusty (alarm = "").

4.5. AlarmyAlarmem nazywany każdy nieprawidłowy stan instalacji, który może być wykryty i zasygnalizowany przez serwer SMARP. Wykrycie alarmu polega na sprawdzeniu wartości wskazanych zmiennych – mierzonych lub obliczanych – i stwierdzeniu, czy wartości te spełniają określony warunek (np. temperatura przekracza pewną zadaną wartość).

Sprawdzenie warunku alarmu i zasygnalizowanie jego wystąpienia następuje podczas obliczania wartości zmiennej obliczanej, nazywanej zmienną zgłaszającą alarmu. Zarówno zmienna zgłaszająca, jak i wszystkie jej argumenty są zmiennymi prostymi. Zmienna zgłaszająca jest zmienną binarną, która przyjmuje dwie wartości:

0 – stan prawidłowy, brak alarmu,1 – alarm.

Wykryte alarmy mogą być pokazane na obrazie synoptycznym instalacji, a wartości zmiennej zgłaszającej i jej argumentów w chwili wystąpienia alarmu oraz w chwili powrotu do stanu prawidłowego są zapisywane w logu historii. Standardowy sposób obsługi alarmów nie wymaga definiowania żadnego specjalnego mechanizmu obsługi.

Wystąpienie pewnych alarmów może wymagać dodatkowego powiadomienia użytkownika za pomocą komunikatu sms, e-maila lub panelu operatora. Następstwem wyświetlenia komunikatu na panelu może być odpowiedź operatora, przyjmująca postać wartości wprowadzonej przez operatora w okienku wyświetlonym na panelu przez serwer. Wartość ta jest zapisywana jako wartość pewnej zmiennej prostej, nazywanej zmienną odpowiedzi.

Definicje alarmów są przechowywane w tabeli Alarm. Kolumny tabeli odpowiadają elementom i atrybutom określonym w specyfikacji alarmów (rozdz. 2.7).CREATE TABLE Alarm { name VARCHAR(12) PRIMARY KEY, nazwa alarmu report VARCHAR(12) NOT NULL, nazwa zmiennej zgłaszającej text VARCHAR(80), opis alarmu (objaśnienie) phone TINYINT, liczba numerów sms mail TINYINT, liczba adresów e-mail panel TINYINT, liczba paneli FOREIGN KEY (report) REFERENCES Variable(name),};

Opisy odbiorców komunikatów sms i e-maili są zapisane w odrębnych tabelach Phone i Mail zawierających następujące kolumny.CREATE TABLE Phone { name VARCHAR(12), nazwa alarmu

42

System Monitorowania, Analizy i Raportowania Produkcji value TINYINT, wartość zmiennej zgłaszającej to VARCHAR(12), numer telefonu note VARCHAR(80) NOT NULL, treść wiadomości PRIMARY KEY (name, to), FOREIGN KEY (name) REFERENCES Alarm(name)};

CREATE TABLE Mail { name VARCHAR(12), nazwa alarmu (klucz główny) value TINYINT, wartość zmiennej zgłaszającej to VARCHAR(40), adres e-mail (klucz główny) note VARCHAR(80) NOT NULL, treść wiadomości PRIMARY KEY (name, to), FOREIGN KEY (name) REFERENCES Alarm(name)};

Odczytanie argumentów potrzebnych do wysłania wiadomości o wystąpieniu alarmu o nazwie ALM wymaga wyszukania wszystkich wierszy tabeli Phone (Mail) o wartości ALM w kolumnie name. Pozostałe elementy wiersza wskażą adres i treść wiadomości.

Opisy komunikacji z panelami operatorskimi są zapisane w odrębnej tabeli Panel zawierającej następujące kolumny.CREATE TABLE Panel { name VARCHAR(12), nazwa alarmu value TINYINT, wartość zmiennej zgłaszającej to VARCHAR(12), nazwa panelu note VARCHAR(80) NOT NULL, treść wiadomości reply VARCHAR(12), nazwa zmiennej odpowiedzi PRIMARY KEY (name, to), FOREIGN KEY (name) REFERENCES Alarm(name) FOREIGN KEY (reply) REFERENCES Variable(name)};

Historyczne wartości alarmów są przechowywane w tabeli History stanowiącej dziennik historycznych wartości zmiennych (rozdz. 4.4). Zakres przechowywanych danych obejmuje nazwę i czas wystąpienia lub odwołania alarmu oraz odnotowane w tej chwili wartości: zmiennej zgłaszającej, jej argumentów i zmiennej odpowiedzi.

Wartość zapisywana w kolumnie date określa chwilę wystąpienia zdarzenia i dla wszystkich zapisanych wartości jest taka sama i równa stemplowi czasowemu zmiennej zgłaszającej.

Jeden wiersz tabeli History zawiera wartość jednej zmiennej. Wyszukanie wartości wszystkich zmiennych związanych z danym alarmem wymaga wyszukania wszystkich wierszy tabeli o tej samej zawartości kolumn name i date. Rodzaj zdarzenia (wystąpienie lub odwołanie alarmu) jest określone przez wartość zmiennej zgłaszającej.

4.6. Liczniki czasuBieżące wartości liczników czasu są przechowywane w tabeli Timer, która może być zaimplementowana w postaci struktury danych rezydującej w pamięci operacyjnej serwera. Kolumna name przechowuje nazwę zmiennej, z którą związany jest dany licznik czasu, a zawartością kolumny value jest długość odmierzanego przedziału czasu wyrażona w sekundach (lub innych jednostkach czasu przyjętych w systemie SMARP).

43

System Monitorowania, Analizy i Raportowania Produkcji CREATE TABLE Counter { name VARCHAR(12) PRIMARY KEY, nazwa zmiennej licznika value INTEGER, wartość bieżąca FOREIGN KEY (name) REFERENCES Variable(name)};

Początkowe wartości wszystkich liczników wynoszą value = 0. Jeżeli do licznika zostanie wpisana wartość value > 0, to rozpoczyna się proces odliczania czasu w liczniku. Wartość value jest systematycznie zmniejszana po upłynięciu każdej kolejnej jednostki czasu. Po doliczeniu do zera, moduł obsługi liczników czasu wpisuje do kolejki wejściowej komunikat zawierający nazwę zmiennej i jej wartość równą 1.

4.7. Struktura instalacjiDefinicja instalacji produkcyjnej nadzorowanej przez system SMARP jest zapisana w czterech wzajemnie powiązanych tabelach, opisujących różne aspekty struktury instalacji. Kolumny tabel odpowiadają elementom opisu instalacji w specyfikacji systemu (rozdz. 2.8).

Lista obiektów (instalacja, linie technologiczne, maszyny, zespoły) wchodzących w skład instalacji jest zapisana w tabeli Node.CREATE TABLE Node { name VARCHAR(30) PRIMARY KEY, nazwa obiektu type VARCHAR(30), typ obiektu (oznaczenie handlowe) text VARCHAR(30), podpis obiektu na wizualizacji show TINYINT, znacznik wyświetlania obiektu};

Lista zmiennych opisujących poszczególne obiekty instalacji jest zapisana w tabeli NodeVar.CREATE TABLE NodeVar { name VARCHAR(12) PRIMARY KEY, nazwa zmiennej node VARCHAR(30), nazwa obiektu text VARCHAR(30), podpis zmiennej na wizualizacji show TINYINT, znacznik wyświetlania zmiennej place TINYINT, kolejność wyświetlania zmiennej type TINYINT, miejsce wyświetlania zmiennej fract TINYINT, liczba cyfr po przecinku FOREIGN KEY (name) REFERENCES Variable(name) FOREIGN KEY (node) REFERENCES Node(name)};

Statyczna struktura obiektów instalacji, określona przez relację zawierania całość – część, jest opisana w tabeli Part.CREATE TABLE NodePart { child VARCHAR(30) PRIMARY KEY, nazwa obiektu – części parent VARCHAR(30), nazwa obiektu – całości show TINYINT, znacznik wyświetlania części place TINYINT, kolejność wyświetlania części FOREIGN KEY (child) REFERENCES Node(name), FOREIGN KEY (parent) REFERENCES Node(name)};

44

System Monitorowania, Analizy i Raportowania Produkcji Dynamiczna struktura grafu połączeń maszyn instalacji jest opisana w tabeli Edge, której rekordy odpowiadają skierowanym połączeniom między maszynami.CREATE TABLE Edge { source VARCHAR(30), nazwa obiektu początkowego target VARCHAR(30), nazwa obiektu końcowego PRIMARY KEY (source, target), FOREIGN KEY (source) REFERENCES Node(name), FOREIGN KEY (target) REFERENCES Node(name)};

4.8. Model danychCentralnym elementem modelu danych serwera SMARP jest tabela Variable (rys. 4.1), przechowująca opisy zmiennych oraz stałych. Znaczenie każdej zmiennej i stałej jest zdefiniowane w tabeli Semantics. Definicje typów zmiennych prostych są zebrane w tabeli Type. Definicje typów rekordów są zebrane w tabeli RecordType. Wyrażenia służące do obliczenia wartości zmiennych obliczanych są opisane w tabeli Expression, a listy argumentów formalnych wszystkich wyrażeń są podane w tabeli ListF. Listy argumentów aktualnych, potrzebnych do obliczenia wartości zmiennych obliczanych są podane w tabeli ListA. Listy zmiennych obliczanych po odebraniu nowych wartości zmiennych mierzonych są pamiętane w tabeli ListS. Bieżące wartości zmiennych i stałych są przechowywane w tabeli Data. Historia zmian wartości zmiennych (wszystkich typów) jest zapisywana w tabeli History.

45

System Monitorowania, Analizy i Raportowania Produkcji

Opisy liczników czasu są zapisane w tabeli Timer (rys. 4.2). Listy zmiennych obliczanych po odliczeniu czasu przez liczniki są podane w tabeli ListT. Bieżące wartości liczników są przechowywane i przetwarzane w tabeli Counter.

Opisy alarmów są zapisane w tabeli Alarm (rys. 4.2). Opis alarmu zawiera m.in. nazwę zmiennej zgłaszającej (report), która wiąże tabelę Alarm z tabelą Variable. Opisy wiadomości sms związanych z poszczególnymi alarmami są zapisane w tabeli Phone, a opisy wiadomości e-mail w tabeli Mail. Opisy komunikacji z panelami operatora są zapisane w tabeli Panel, której rekordy wskazują również zmienne odpowiedzi (reply) otrzymywanych od operatorów poszczególnych paneli. Historia alarmów jest zapisywana w tabeli History.

Strukturę nadzorowanej instalacji produkcyjnej opisuje grupa czterech tabel: Node, NodePart, Edge i NodeVar (rys. 4.2). Tabela Node opisuje obiekty instalacji, tabela NodePart zawiera opis hierarchii zagnieżdżania obiektów, a tabela Edge opisuje połączenia obiektów, wynikające z technologii produkcji. Tabela NodeVar przechowuje listy zmiennych opisujących stan obiektów instalacji.

46

Rysunek 4.1. Model danych: zmienne i stałe

Semantics

PK name

kind unit text

Variable

PK,FK4,FK5 name

FK3 typeFK1 sense size mode text val8 valTFK2 expr order

Expression

PK name

......

ListF

PK,FK1 namePK seq

type

History

PK,FK1 namePK date

val8 valT alarm

ListA

PK,FK1 namePK seq

FK2 arg

Data

PK,FK1 name

val8 valT date mode

ListS

PK,FK1 namePK,FK2 var

RecordType

PK namePK field

type seq size

Type

PK name

length

System Monitorowania, Analizy i Raportowania Produkcji

47

Rysunek 4.2. Model danych: liczniki czasu, alarmy i struktura instalacji

Variable

PK name

type size sense mode text val8 valT expr order

Timer

PK,FK1 name

value

Alarm

PK name

FK1 report text phone mail panel

Phone

PK,FK1 namePK to

value note

Mail

PK,FK1 namePK to

value note

Panel

PK,FK2 namePK to

value noteFK1 reply

Node

PK name

type text show

NodeVar

PK,FK1 name

FK2 node text show place type fract

NodePart

PK,FK1 child

FK2 parent show place

Edge

PK,FK1 sourcePK,FK2 target

History

PK,FK1,FK2 namePK date

val8 valT alarm

System Monitorowania, Analizy i Raportowania Produkcji 5.Algorytmy przetwarzania danych w serwerze

Przetwarzanie danych procesowych w serwerze SMARP może obejmować elementy indywidualne, zaprojektowane i zaprogramowane specyficznie dla konkretnego wdrożenia systemu, oraz elementy typowe, realizowane domyślnie przez standardowe oprogramowanie serwera. Treścią tego rozdziału są jedynie typowe elementy przetwarzania. Indywidualne przetwarzanie danych procesowych wykracza poza zakres tego dokumentu.

Typowe elementy przetwarzania, których realizacja nie wymaga indywidualnego programowania serwera, a jedynie opracowania specyfikacji systemu w postaci plików XML obejmują:

obsługę komunikatów transpondera, obliczenie wartości zmiennych obliczanych, odmierzanie czasu i realizację przetwarzania zależnego od czasu, wykrywanie alarmów i obsługę panelu operatora, wizualizację danych procesowych, zapamiętywanie danych historycznych.

5.1. Konfiguracja serweraWdrożenie serwera wymaga kompilacji plików XML zawierających specyfikację systemu SMARP (tab. 2.1) do układu relacyjnych tabel danych (rys. 4.1, 4.2). Kompilacja plików XML jest procesem jednorazowym, który można wykonać w trybie off-line.

Kompilacja plików XML zaczyna się od przetwarzania plików sensor, derived, constants, types i records, których zawartość pozwala określić treść tabeli Variable. Następnie tworzone są tabele Type, RecordType, ListA, ListS, Data, History i Timer.

Najtrudniejszą czynnością tego etapu jest utworzenie tabeli ListS. Algorytm tej czynności może wyglądać następująco.

1. Utworzenie tymczasowej tabeli ListAT, o strukturze identycznej ze strukturą tabeli ListA, pokazującej argumenty wyzwalające wszystkich zmiennych obliczanych (atrybut trigger specyfikacji derived). Dla każdej zmiennej obliczanej x:

znajdź w tabeli ListA wszystkie wiersze z zawartością pola name = x;

jeżeli definicja zmiennej x w specyfikacji derived zawiera atrybut trigger (niech trigger = t), to zapisz w tabeli ListAT wiersz o wartości name = x, arg = t, seq =1;

jeżeli definicja zmiennej x nie zawiera atrybutu trigger, to przepisz z tabeli ListA do tabeli ListAT wszystkie wiersze z wartością pola name = x.

2. Dla każdej zmiennej mierzonej y, utworzenie listy Ly zawierającej zmienne obliczane, które należy obliczyć po zmianie wartości zmiennej y:

znajdź w tabeli ListAT wszystkie wiersze z wartością pola arg = y;

zapisz na liście Ly wszystkie zmienne, których nazwa występuje w polu name wierszy znalezionych w poprzednim punkcie.

3. Dla każdej zmiennej mierzonej y, uzupełnienie listy Ly o dalsze zmienne obliczane, które należy obliczyć po zmianie wartości zmiennej y.

Przeglądaj listę Ly w kolejności rosnących wartości atrybutu order i dla każdej zmiennej z występującej na tej liście:

48

System Monitorowania, Analizy i Raportowania Produkcji znajdź w tabeli ListAT wszystkie wiersze z wartością pola arg = z;

dopisz do listy Ly te zmienne, których nazwa występuje w polu name wierszy znalezionych w poprzednim punkcie i wartość atrybut order jest większa od wartości atrybutu order zmiennej z;

kontynuuj przeglądanie aż do osiągnięcia końca listy Ly.

4. Zapisz utworzone listy w tabeli ListS. Dla każdej zmiennej mierzonej y i każdej zmiennej obliczanej z należącej do listy Ly zapisz wiersz o wartości name = y, var = z.

Po zakończeniu pierwszego etapu, kompilator przeszukuje biblioteki (pliki XML) semantics i expressions znajdując opisy znaczenia danych oraz wyrażenia używane w definicjach zmiennych. Umożliwia to stworzenie tabel Semantics, Expression i ListF.

W kolejnym etapie, kompilacji podlega plik alarms, którego zawartość definiuje treść tabel Alarm, Phone, Mail i Panel.

Kompilacja pliku factory umożliwia automatyczną generację pliku display (rozdz. 5.4), opisującego postać obrazów synoptycznych wyświetlanych dla użytkownika. Plik factory może być też skompilowany i przekształcony do postaci tabel Node, NodeVar, NodePart i Edge, jednak te tabele nie mają wpływu na implementację serwera.

5.2. Przetwarzanie komunikatów transponderaKomunikaty transpondera (oraz odpowiedzi panelu operatora) są odczytywane z kolejki wejściowej (rys. .2) i przetwarzane przez moduł obliczania zmiennych i alarmów w kolejności chronologicznej. Treścią komunikatu jest lista próbek zmiennych, z których każda zawiera wartość zmiennej i stempel czasowy opisujący chwilę pomiaru. Przetwarzanie komunikatu jest realizowane w dwóch fazach.

Przeglądanie komunikatu obejmuje wykonanie następujących działań.

1. Sortowanie próbek zmiennych w kolejności rosnących wartości stempli czasowych.

2. Przetwarzanie kolejnych próbek komunikatu. Dla każdej próbki zmiennej:

(a) jeżeli wartość atrybutu mode = 0, to pomiń próbkę i przejdź do przetwarzania kolejnej;

(b) jeżeli wartość atrybutu mode = 2, to zapisz próbkę zmiennej w tabeli History;

(c) jeżeli jest to pierwsza próbka zmiennej, to zapisz jej wartość w tabeli Data;

(d) jeżeli jest to kolejna próbka tej samej zmiennej, to:

wykonaj przetwarzanie wartości zmiennej już zapisanej w tabeli Data, zapisz wartość próbki zmiennej w tabeli Data;

Po zakończeniu kroku 2, wielokrotne próbki zmiennych są zapisane w tabeli History, a tabela Data zawiera aktualne wartości zmiennych mierzonych zawartych w komunikacie.

3. Wykonaj przetwarzanie wszystkich zmiennych mierzonych w tabeli Data, których wartość uległa zmianie.

Przetwarzanie zmiennych może być wykonane dla jednej zmiennej mierzonej (krok 2d przeglądania) lub dla wielu zmiennych mierzonych (krok 3). Dla jednolitości opisu przyjmiemy, że przedmiotem przetwarzania jest lista zmiennych mierzonych L0 (być może jednoelementowa). Przetwarzanie listy L0 obejmuje wykonanie następujących działań.

49

System Monitorowania, Analizy i Raportowania Produkcji 1. Utworzenie listy L zmiennych obliczanych, których wartość zależy od wartości

zmiennych mierzonych z listy L0. Dla każdej zmiennej z listy L0:

znajdź w tabeli ListS wszystkie zmienne obliczane, których przetwarzanie jest wyzwalane przez tę zmienną;

dopisz znalezione zmienne obliczane, których atrybut mode  0, do listy L.

2. Przetwarzanie zmiennych obliczanych z listy L. Przeglądaj listę L w kolejności rosnących wartości atrybutu order. Dla każdej zmiennej znajdź jej wyrażenie i argumenty w tabelach Variable, Expression, ListF i ListA, podstaw argumenty i oblicz wartość wyrażenia. Jeżeli obliczona wartość jest różna od wartości zmiennej zapisanej w tabeli Data, to:

(a) oblicz stempel czasowy, równy najpóźniejszej wartości stempla argumentów aktualnych, i zapisz obliczoną wartość zmiennej wraz ze stemplem czasowym w tabeli Data;

(b) jeżeli atrybut mode = 2, to zapisz wartość zmiennej i jej stempla w tabeli History;

(c) jeżeli przetwarzana zmienna jest zmienną zgłaszającą, to zapisz w tabeli History wartość tej zmiennej oraz wartości wszystkich jej argumentów wraz z nazwą alarmu i stemplem czasowym równym wartości stempla czasowego zmiennej zgłaszającej;

(d) jeżeli przetwarzana zmienna jest zmienną zgłaszającą i implementacja serwera zawiera procesor powiadomień, to zapisz komunikat do kolejki alarmów (rozdz. 3.3).

5.3. Obsługa alarmówSpecyfikacja systemu SMARP wiąże alarm z dwoma zmiennymi obliczanymi (rozdz. 2.7):

zmienną zgłaszającą, której wyrażenie zawiera definicję warunków alarmu, zmienną odpowiedzi.

Zmienna odpowiedzi powinna być wyspecyfikowana z wartością atrybutu mode = 2.

Przetwarzanie związane z wykrywaniem i obsługą alarmów jest realizowane przez dwa różne moduły oprogramowania serwera (rys. .2).

Moduł obliczania zmiennych i alarmów wykrywa alarmy i zapisuje informacje o ich wystąpieniu lub odwołaniu w tabeli History. Wykrycie alarmu następuje w czasie obliczania wartości zmiennej zgłaszającej. Zapisanie informacji o zdarzeniu w tabeli History jest realizowane w fazie przetwarzania zmiennych (rozdz. 5.2, krok 2c przetwarzania). Zapisaniu podlega nazwa alarmu, czas zdarzenia oraz lista nazw i wartości zmiennej zgłaszającej i wszystkich jej argumentów aktualnych. Stemple czasowe wszystkich zapisanych zmiennych są takie same i  równe wartości stempla czasowego zmiennej zgłaszającej.

Zapisanie w tabeli History wartości zmiennej odpowiedzi następuje po odebraniu komunikatu odpowiedzi panelu operatora i jest realizowane w fazie przeglądania komunikatu jako element obsługi zmiennej mierzonej z wartością atrybutu mode = 2 (rozdz. 5.2, krok 2b przeglądania).

Wykrycie alarmu i zapisanie informacji o jego wystąpieniu w tabeli History mieści się w ramach typowego przetwarzania komunikatów i nie wymaga żadnych dodatkowych działań.

Procesor powiadomień realizuje funkcje powiadomienia użytkownika o wykryciu lub odwołaniu alarmu za pomocą sms-a, e-maila lub komunikatu panelu operatora. Procesor

50

System Monitorowania, Analizy i Raportowania Produkcji zaczyna działać po odczytaniu komunikatu z kolejki alarmów. Przetwarzanie komunikatu obejmuje wykonanie następujących działań.

1. Procesor odczytuje opis alarmu z tabeli Alarm (rozdz. ).

2. Jeżeli wartość atrybutu phone > 0, to procesor znajduje opisy odbiorców sms-ów w tabeli Phone i wysyła im komunikaty określone przez wartość atrybutu note.

3. Jeżeli wartość atrybutu mail > 0, to procesor znajduje opisy odbiorców e-maili w tabeli Mail i wysyła im komunikaty określone przez wartość atrybutu note.

4. Jeżeli wartość atrybutu panel > 0, to procesor znajduje opis panelu w tabeli Mail i wysyła komunikat określony przez wartość atrybutu note. Jeżeli atrybut reply nie jest pusty, to wraz z komunikatem wyświetla na panelu okno dialogowe umożliwiające wprowadzenie odpowiedzi przez operatora. Po wprowadzeniu odpowiedzi operatora panel przysyła komunikat zawierający nazwę zmiennej odpowiedzi, jej wartość i stempel czasowy równy wartości stempla zmiennej zgłaszającej (rozdz. 3.3).

Format komunikatu panelu operatora jest zgodny z formatem komunikatu transpondera. Komunikaty są odbierane z kolejki wejściowej i przetwarzane przez serwer tak samo jak komunikaty transpondera (rozdz. 5.2).

5.4. Obsługa liczników czasuPrzetwarzanie związane z obsługą liczników czasu dzieli się na dwie różne fazy, realizowane przez różne moduły oprogramowania serwera (rys. .2).

Moduł obsługi liczników czasu odmierza przedziały czasu zapisane w licznikach. Długość przedziału czasu jest wyrażona w sekundach, choć rzeczywista rozdzielczość pomiaru czasu zależy od wydajności serwera systemu SMARP. Zakończenie odmierzania zadanego przedziału czasu powoduje zapisanie odpowiedniego komunikatu do kolejki wejściowej serwera.

Po upłynięciu każdej kolejnej jednostki czasu (sekundy), moduł obsługi liczników czasu wykonuje następujące działania.

1. Przegląda wszystkie liczniki czasu w tabeli Timer i dla każdego licznika:

(a) Jeżeli wartość value  0, to pomija licznik i przechodzi do przetwarzania następnego.

(b) Jeżeli wartość value > 0, to zmniejsza tę wartość o 1, po czym:

jeśli value = 0, to umieszcza nazwę zmiennej licznika w treści komunikatu. jeśli value  0, to kończy obsługę licznika i przechodzi do następnego,

2. Wpisuje komunikat zawierający listę nazw zmiennych liczników (rozdz. 3.4) do kolejki wejściowej serwera (rys. .2).

Moduł obliczania zmiennych i alarmów odbiera komunikaty liczników z kolejki wejściowej i przetwarza je tak samo, jak komunikaty transpondera (rozdz. 5.2). Wynikiem przetwarzania jest przypisanie wszystkim zmiennym związanym z licznikami, które odmierzyły zadany przedział czasu, wartości równej 1 i przetworzenie zmiennych obliczanych wyzwalanych przez te zmienne. Po zakończeniu przetwarzania komunikatu moduł przypisuje wszystkim zmiennym wymienionym w treści komunikatu wartość równą 0. W ten sposób, informacja o odmierzeniu przedziału czasu przez licznik jest wykorzystana tylko raz, podczas przetwarzania komunikatu licznika.

51

System Monitorowania, Analizy i Raportowania Produkcji 5.5. Opis wizualizacji danych procesowychSerwer SMARP prezentuje dane procesowe na obrazach synoptycznych, pokazujących linie technologiczne, instalacje pomocnicze, maszyny i ich podzespoły. Standardowa prezentacja jest zorganizowana hierarchicznie. Obraz na każdym poziomie hierarchii obejmuje wybrany obiekt i jego bezpośrednie obiekty składowe. Pierwszy obraz, najwyższy w hierarchii, pokazuje całość instalacji produkcyjnych przedsiębiorstwa z podziałem na linie technologiczne i instalacje pomocnicze (rys. 5.1). Zarówno cała instalacja, jak i każda linia oraz maszyna posiadają wskaźnik stanu, wyświetlany w postaci ikony diody świecącej, przyjmującej kolor zielony gdy instalacja pracuje, szary gdy jest zatrzymana oraz czerwony w stanie awarii. Animacją koloru wskaźnika stanu steruje wartość zmiennej stanu obiektu. Dalszymi elementami obrazu są: klawisze nawigacji, zmieniające prezentację na obraz pokazujący szczegóły wybranego obiektu oraz wyświetlacze pokazujące wartości wybranych zmiennych procesu.

Kliknięcie klawisza jednego z wyświetlonych obiektów przenosi prezentację do obrazu tego obiektu. Na przykład, kliknięcie klawisza linii L1 na rys. 5.1 spowoduje wyświetlenie następnego obrazu, pokazującego maszyny wchodzące w skład wybranej linii (rys. 5.2). Postać prezentacji jest analogiczna do poprzedniego obrazu. Kliknięcie klawisza obiektu nadrzędnego (np. linii butelkowania L1 na rys. 5.2) przenosi prezentację do obrazu nadrzędnego.

52

Cisowianka 200 000wielkość produkcji

Linia butelkowania L1 85%wydajność

Linia butelkowania L2 0%wydajność

Instalacja pianowania P1

.............. inne linie technologiczne i instalacje pomocnicze ..............

Rysunek 5.1. Obraz synoptyczny całej instalacji produkcyjnej przedsiębiorstwa

Rysunek 5.2. Obraz synoptyczny linii technologicznej

Linia butelkowania L1 200 000wielkość produkcji

Butelczarka B1 90%wydajność

Transporter butelek T1a 95%wydajność

Nalewarka NP1

.............. inne maszyny wyświetlanej linii technologicznej ..............

92%wydajność

System Monitorowania, Analizy i Raportowania Produkcji Wybranie maszyny powoduje wyświetlenie jej zespołów składowych itd. aż do poziomu, na którym są wyświetlane wartości zmiennych procesowych opisujących pracę obiektu.

Wszystkie obrazy (strony HTML) są tworzone automatycznie na podstawie pliku XML zawierającego specyfikację struktury instalacji (rozdz. 2.8). Z treści specyfikacji są wybierane te obiekty i zmienne, dla których istnieje element display z wartością atrybutu show = "yes". Dalsze atrybuty elementu display pokazują sposób wyświetlania zmiennych. Jeżeli atrybut type = "led", to zmienna jest wyświetlana w postaci ikony diody świecącej (np. zmienna stanu), zgodnie z następującą konwencją:

wartość < 0 – dioda zielona (stan pracy), wartość 0 – dioda szara (stan zatrzymania), wartość > 0 – dioda czerwona (stan awarii).

Jeżeli atrybut type = "box", to zmienna jest wyświetlana w postaci okienka wartości. Liczbę cyfr po przecinku, wyświetlanych w okienku, określa element fraction (rozdz. 2.8).

5.6. Wbudowane funkcje serweraPrzetwarzanie zmiennych procesowych jest opisane przez wyrażenia, w których mogą wystąpić wbudowane funkcje serwera realizujące typowe fragmenty obliczeń. Zestaw wbudowanych funkcji serwera tworzy bibliotekę wykorzystywaną we wszystkich projektach wdrożeń systemu SMARP. Każde nowe wdrożenie wybiera potrzebne funkcje z istniejącej biblioteki, a w razie potrzeby może dodać nowe.

Przykładami mogą być następujące funkcje wbudowane, wykorzystane w prototypowej instalacji systemu SMARP, pokazanej w rozdz. 6.

Funkcje dotyczące czasu i liczników czasu

get_time – odczytanie bieżącej wartości czasu

Argumenty: brak.Zwraca: bieżąca wartość czasu odczytana z zegara systemu operacyjnego.

set_timer – włączenie licznika

Argumenty: nazwa zmiennej licznika, odmierzany okres czasu.Zwraca: bieżąca wartość licznika.

Drugim argumentem funkcji może być nazwa zmiennej, nazwa stałej lub konkretna wartość, która określa odmierzany przedział czasu wyrażony w sekundach. Wartość ta jest wpisywana do kolumny value tabeli Timer, co rozpoczyna odliczanie czasu przez licznik.

Ponowne wywołanie funkcji podczas działania licznika nie zatrzymuje procesu odliczania czasu, lecz powoduje zmianę długości odmierzanego przedziału. Wywołanie funkcji z zerową długością przedziału czasu zatrzymuje działanie licznika (wyłącza licznik).

Funkcje analizy stanu i produkcji maszyn

Funkcje opisane w tym punkcie przetwarzają i sprowadzają do znormalizowanej postaci informacje specyficzne dla różnych typów maszyn. Funkcje te mogą mieć wiele realizacji, z których każda jest opracowana indywidualnie dla określonego typu maszyny lub linii.

get_state – obliczenie stanu maszyny

Argumenty: kod stanu odczytany ze sterownika maszyny.Zwraca: wartość opisująca stan maszyny zgodnie z następującą konwencją:

stan < 0 – stan pracy,

53

System Monitorowania, Analizy i Raportowania Produkcji stan 0 – stan zatrzymania (wyłączenia), stan > 0 – stan awarii.

Obliczona wartość standardowej reprezentacji stanu jest zgodna z formatem przyjętym dla potrzeb wyświetlania stanu maszyny, linii produkcyjnej lub całej instalacji za pomocą ikony diody świecącej na obrazie synoptycznym (rozdz. 5.5). Argumentami funkcji są informacje o stanie maszyny, odczytane przez transponder ze sterownika i przekazane do serwera.

Przykładowymi realizacjami funkcji get_state są wymienione w rozdz. 6.6 funkcje oblicza-jące stan maszyn wchodzących w skład linii butelkowania: get_state_L4B, get_state_L4S, get_state_L4N, get_state_L4E, get_state_L4Z, get_state_L4R, get_state_L4P, get_state_L4O.

get_value_BCD8  – konwersja wartości licznika

Argumenty: wartość licznika odczytanego w formacie BCD.Zwraca: wartość całkowita typu DOUBLE.

Czujniki zliczające (liczniki), np. czujniki zużycia gazu, podają często wartość nie w postaci liczby typu INTEGER, lecz w postaci ciągu cyfr BCD. Funkcja get_value_BCD8 przekształca upakowaną 8-cyfrową wartość BCD w wartość całkowitą typu DOUBLE.

Liczniki, które przekazują wartości w innym formacie, wymagają opracowania innych, specyficznych realizacji funkcji get_value_xxx.

is_stoppage – wykrycie mikroprzestoju (kontrola przyrostu produkcji)

Argumenty: stan maszyny (state), zmienna licznika czasu (tim), przedział czasu (delay).Zwraca: wartość 1, jeśli brak zmiany produkcji (przestój), albo 0 jeśli zmiana wystąpi.

Funkcja kontroluje licznik czasu (tim) odmierzający przedział czasu (delay) w którym powinna nastąpić zmiana wielkości produkcji maszyny. Licznik działa tylko w okresie, w którym maszyna znajduje się w stanie praca. Każda zmiana wielkości produkcji całkowitej powinna powodować odnowienie odmierzanego przedziału czasu. W tym celu, argumentem aktualnym wyrażenia korzystającego z funkcji is_stoppage powinna być również zmienna produkcji całkowitej (total), której zmiana wymusi obliczenie wyrażenia.

Szkic programu funkcji można zapisać następująco:

if ( tim == 1 ) return 1; // alarm, nie było zmianyif ( state < 0 ) set_timer(tim,delay); // jest zmiana i stan pracyelse set_timer(tim,0); // inny stan, wyłączenie licznikareturn 0; // brak alarmu, była zmiana

Funkcja is_stoppage wchodzi w skład wyrażenia obliczającego wartość zmiennej zgłaszającej alarm mikroprzestoju maszyny. Zmienna jest obliczana po każdej zmianie stanu, zmianie wielkości produkcji oraz po odmierzeniu czasu przez licznik.

Funkcje dotyczące alarmów

com_fail – kontrola zaniku komunikacji

Argumenty: numer komunikatu (cid), zmienna licznika czasu (tim), przedział czasu (delay).Zwraca: wartość 0, jeśli komunikacja jest prawidłowa, lub 1 w razie zaniku komunikacji.

Funkcja wykrywa brak zmiany numeru komunikatu transpondera w zadanym przedziale czasu. Długość tego przedziału powinna być większa od długości przedziału podtrzymania transpondera (np. 2  alive). Każda zmiana numeru komunikatu transpondera powoduje odnowienie przedziału czasu odmierzanego przez licznik.

Szkic programu funkcji można zapisać następująco:

54

System Monitorowania, Analizy i Raportowania Produkcji if ( tim == 1 ) return 1; // alarm, nie było komunikatuset_timer(tim,delay); // komunikat, odnowienie licznikareturn 0; // brak alarmu, był komunikat

Funkcja com_fail wchodzi w skład wyrażenia obliczającego wartość zmiennej zgłaszającej alarm zaniku komunikacji z transponderem. Zmienna jest obliczana po odebraniu komunikatu transpondera (po zmianie numeru komunikatu) oraz po odmierzeniu czasu przez licznik.

55

System Monitorowania, Analizy i Raportowania Produkcji 6.Prototypowa instalacja systemu SMARP (case study)

Opisana instalacja systemu SMARP dotyczy linii butelkowania L4 w rozlewni wody mineralnej Cisowianka. Opis instalacji został opracowany na podstawie dokumentacji systemu Ames, obejmującej wykazy urządzeń linii, zmiennych nadzorowanych i procedur raportowych.

6.1. Instalacja produkcyjnaInstalacja produkcyjna rozlewni wody mineralnej „Cisowianka” składa się z sześciu zautomatyzowanych linii produkcyjnych i instalacji pomocniczych, wykonujących wszystkie etapy produkcji od czerpania wody ze studni głębinowych, poprzez procesy uzdatniania i saturacji wody, napełniania butelek, aż do pakowania palet i ekspedycji wody do odbiorców. Główne linie technologiczne i instalacje pomocnicze przedsiębiorstwa są wyliczone w tab. 6.1.

Tablica 6.1. Główne instalacje zakładu

Nazwa instalacji Liczba1 Linie butelkowania (każda trochę inna, różne maszyny, różne sterowniki) 62 Studnie głębinowe (rozrzucone w terenie, dwie podłączone do automatyki) 53 Stacje przygotowania gazu (każda obsługuje trzy linie) 24 Stacje przygotowania wody (filtry itp., też wspólne dla kilku linii) 35 Stacje przygotowania piany (dezynfekcja zewnętrzna linii) 26 Stacja ozonowania i stacja CIP (przygotowanie płukania wewnętrznego linii) 17 Sprężarki powietrza (trzy odrębne obiegi) 38 Transformatorownia 19 Klimatyzacja 1

Ręczna stanowiska ważenia odpadów (preformy, folia, zmarnowane etykiety)

Linie technologiczne i instalacje pomocnicze składają się z maszyn połączonych systemami transportowymi. Poszczególne linie, instalacje i maszyny pracują pod kontrolą lokalnych sterowników, wyposażonych w panele operatorskie umożliwiające nastawianie i eksploatowanie urządzeń przez operatorów. Struktura linii butelkowania L4 jest opisana w tab. 6.2.

Tablica 6.2. Struktura linii butelkowania L4

Nazwa maszyny Uwagi1 Butelczarka B12 Butelczarka B23 Saturator4 Nalewarka z dwoma transporterami butelek

oraz inspektorem nalewuPrzyjęto, że transporter 1 dostarcza puste butelki, a transporter 2 odbiera pełne.

5 Etykieciarka butelek6 Pakowaczka Pakuje zgrzewki po 6 szt.7 Rączkarka Dokleja uchwyt zgrzewki

56

System Monitorowania, Analizy i Raportowania Produkcji 8 Paletyzer Układa zgrzewki na palecie9 Owijarka Owija palety w folię

6.2. Wymagania użytkownikaLokalne sterowniki maszyn umożliwiają nastawianie i eksploatowanie wszystkich urządzeń przez operatorów. Nie ma potrzeby dalszego rozwijania tych funkcji.

Podstawowym wymaganiem, jakie musi spełnić system SMARP, jest zbieranie i gromadzenie danych opisujących pracę instalacji w takim zakresie, który umożliwi tworzenie zbiorczych raportów prezentujących wydajność instalacji i efektywność wykorzystania jej maszyn. Lista najważniejszych raportów jest przedstawiona w tab. 6.3. System SMARP zapisuje historię zmian wartości wybranych zmiennych procesowych w bazie danych (tabel History) i udostępnia te dane do sporządzania raportów obrazujących stan i wydajność maszyn w wybranych okresach czasu. Obliczenia związane ze stworzeniem raportów są wykonywane off-line na danych zgromadzonych w bazie danych systemu.

Tablica 6.3. Wykaz raportów (plik „Wykaz procedur raportowych SQL.doc”)

Lp. Nazwa raportu Opis raportu1 ConStates Lista przestojów maszyn danej linii w okresie od ... do2 RaportCountersGas Raport zużycia gazu na danej linii w okresie od ... do3 RaportCounterMonth Produkcja ze wskaźnikami OEE dla danej grupy maszyn

(podawanych po przecinku) za dany miesiąc4 RaportOEEChart OEE godzinowo dla danej maszyny/linii za określony dzień5 RaportOEEChartMonth OEE dzienny dla danej maszyny/linii za określony miesiąc6 RaportStatesCIP Raport procedur CIP za dany miesiąc dla danej linii7 RaportStatesLine Informacje o przestojach maszyn linii w okresie od ... do8 RaportStatesLineSum 1 – czasy przebywania maszyn danej linii w poszczególnych

stanach w okresie od ... do 2 – współczynniki OEE dla maszyn linii w okresie od ... do

9 RaportStatesMonth Czas przebywania w każdym stanie (1,2,3..) maszyn podanej linii wraz ze wskaźnikami OEE

10 RCountersTotalAdd Podlicza współczynniki OEE dla poszczególnych zmian za wskazany okres od ... do

11 ShiftGet Lista zmian wraz z godzinami ich rozpoczęcia

Oprócz zbierania danych do raportów, system SMARP wyświetla na bieżąco synoptyke instalacji. Przyjmiemy, że dla każdej maszyny jest wyświetlany stan (praca, awaria, zatrzymanie) oraz produkcja maszyny osiągnięta od początku zmiany.

6.3. Dane procesoweLista zmiennych mieronych i udostępnianych przez sterowniki maszyn linii 4, jest podana w pliku "Lista zmiennych wonderware.xls" wchodzącym w skład dokumentacji systemu Ames. Prezentacja stanu linii na obrazach synoptycznych oraz zgromadzenie danych potrzebnych do stworzenia raportów opisanych w tab. 6.3 nie wymaga znajomości wszystkich tych zmiennych. Lista zmiennych mierzonych zbieranych przez transponder systemu SMARP i przekazywanych do serwera jest przedstawiona w tabeli 6.4.

57

System Monitorowania, Analizy i Raportowania Produkcji Zawartość kolumny ‘Nazwa’ jest złożeniem nazwy obiektu i nazwy zmiennej, używanych w systemie Ames (plik "Lista zmiennych wonderware.xls"). Kolumna ‘Opis zmiennej’ wyjaśnia znaczenie wartości zmiennej, a kolumna ‘Typ’ podaje typ zmiennej w systemie SMARP.

Zmienne typu BINARY są traktowane przez transponder jako ciągi bitów, które nie są przez transponder interpretowane. Interpretacja wartości tych zmiennych i – być może – konwersja do odpowiedniego typu wartości jest dokonywana w serwerze.

Tablica 6.4 zawiera również zmienne mierzone, które nie występują w systemie Ames. Są to zmienne obliczane przez transponder w wyniku zliczania krótko trwajacych sygnałów:

L4N1_Licznik_Braków (nalewarka) – transponder zlicza sygnały L4N1_Błąd_Nalewu i przekazuje do serwera stan licznika,

L4P1_Licznik_Palet (paletyzer) – transponder zlicza sygnały L4O1P1_ENB i prze-kazuje do serwera stan licznika,

L4O1_Licznik_Palet (owijarka) – transponder zlicza sygnały z dodatkowego czytnika kodów kreskowych etykiet palet i przekazuje do serwera stan licznika.

Tablica 6.4. Lista zmiennych mierzonych linii L4 przesyłanych przez transponder

Nazwa Opis zmiennej TypButelczarka B1

L4B1_Meld Kod stanu maszyny BINARY(2)L4B1_Licznik_Butelek_Total Licznik butelek na wyjściu (format LBCD) BINARY(4)

Butelczarka B2L4B2_Meld Kod stanu maszyny BINARY(2)L4B2_Licznik_Butelek_Total Licznik butelek na wyjściu (format LBCD) BINARY(4)

Saturator S1SB4AV1_I0004 Saturator zakłócenie SMALLINTSB4AV1_I0005 Saturator praca SMALLINT

Nalewarka N1L4N1_Maszyna_Awaria1 Kod awarii maszyny SMALLINTL4N1_Maszyna_Awaria2 Kod awarii maszyny SMALLINTL4N1_Maszyna_Produkcja Maszyna pracuje SMALLINTL4N1_Maszyna_Stop Maszyna zatrzymana SMALLINTL4N1_Maszyna_Wlaczona Maszyna włączona SMALLINTL4N1_Mixer_Gotowy Gotowość miksera nalewarki SMALLINTL4N1_Mixer_Pusty Brak gotowości miksera SMALLINTL4N1_Otwarte drzwi Otwarcie drzwi SMALLINTL4N1_Stoper_Otwarty Zatrzymanie awaryjne SMALLINTL4N1_CIP Płukanie instalacji SMALLINTL4N1_Licznik_Butelek Licznik butelek na wyjściu INTEGERL4N1_Licznik_Braków Programowy licznik sygnałów

‘L4N1_Blad_Nalewu’ w transponderzeINTEGER

Etykieciarka E1SB4AV1_I0006 Etykieciarka praca SMALLINTSB4AV1_I0007 Etykieciarka odbiór SMALLINTSB4AV1_I0008 Etykieciarka brak powietrza SMALLINTSB4AV1_I0009 Etykieciarka zaczopowanie SMALLINTSB4AV1_I0011 Etykieciarka przeciążenie silnika SMALLINT

58

System Monitorowania, Analizy i Raportowania Produkcji Pakowaczka Z1

SB4AV1_I0013 Pakowaczka niebieskie światło / żądanie zadziałania

SMALLINT

SB4AV1_I0014 Pakowaczka białe światło / pauza SMALLINTSB4AV1_I0015 Pakowaczka zielone światło / praca SMALLINTSB4AV1_I0016 Pakowaczka żółte światło / alarm SMALLINTSB4AV1_I0017 Pakowaczka czerwone światło / stan zagrożenia SMALLINTL4Z1_R0029 Licznik paczek niekasowalny (format LBCD) BINARY(4)

Rączkarka R1SB4AV1_I0019 Rączkarka pomarańczowe światło /

przygotowanieSMALLINT

SB4AV1_I0020 Rączkarka czerwone światło / awaria SMALLINTSB4AV1_I0021 Rączkarka zielone światło / praca SMALLINT

Paletyzer P1SB4AV1_I0022 Paletyzer praca SMALLINTSB4AV1_I0023 Paletyzer zakłócenie SMALLINTL4P1_Licznik_Palet Programowy licznik sygnałów ‘L4O1P1_ENB’

w transponderzeINTEGER

Owijarka O1SB4AV1_I0025 Owijarka praca SMALLINTSB4AV1_I0026 Owijarka przekaźnik bezpieczeństwa SMALLINTSB4AV1_I0027 Owijarka tryb automatyczny SMALLINTL4O1_Licznik_Palet Programowy licznik sygnałów zbieranych

z czytnika kodów kreskowych w transponderzeINTEGER

InneMASS_R43001 Licznik objętości gazu (format LBCD) BINARY(4)MASS_R43003 Licznik masy gazu (format LBCD) BINARY(4)

Specjalnym rodzajem zmiennych mierzonych są zmienne, których wartościami są odpowiedzi operatora przekazywane za pomocą panelu. W prototypowej instalacji systemu SMARP występują trzy grupy takich zmiennych:

L4_Operator – nazwa operatora zmiany (nazwa pusta "" oznacza koniec pracy linii),

L4O1_micro_code – kod określający przyczynę mikroprzestoju owijarki L4O1,

XXXX_stop_code – kod określający przyczynę zatrzymania maszyny XXXX, gdzie XXXX może przyjmować wartość L4B1, L4B2, L4S1 itd.

Wartość zmiennej XXXX_stop_code określa przyczynę zatrzymania maszyny zgodnie z następującą konwencją:

XXXX_stop_code = 0 postój planowy.XXXX_stop_code > 0 zatrzymanie nieplanowy (wartość zmiennej określa przyczynę).

Lista zmiennych mierzonych przekazywana do serwera przez panel operatora jest przedstawiona w tab. 6.5.

Tablica 6.5. Lista zmiennych mierzonych linii L4 przesyłanych przez panel operatora

Nazwa Opis zmiennej TypL4_operator Nazwa operatora odbywającego zmianę VARCHAR(15)L4B1_stop_code Kod przyczyny zatrzymania butelczarki B1 SMALLINTL4B2_stop_code Kod przyczyny zatrzymania butelczarki B2 SMALLINTL4S1_stop_code Kod przyczyny zatrzymania saturatora S1 SMALLINT

59

System Monitorowania, Analizy i Raportowania Produkcji L4N1_stop_code Kod przyczyny zatrzymania nalewarki N1 SMALLINTL4E1_stop_code Kod przyczyny zatrzymania etykieciarki E1 SMALLINTL4P1_stop_code Kod przyczyny zatrzymania pakowaczki Z1 SMALLINTL4R1_stop_code Kod przyczyny zatrzymania rączkarki R1 SMALLINTL4P1_stop_code Kod przyczyny zatrzymania paletyzera P1 SMALLINTL4O1_stop_code Kod przyczyny zatrzymania owijarki O1 SMALLINTL4O1_micro_code Kod przyczyny mikroprzestoju owijarki O1 SMALLINT

Lista zmiennych obliczanych przez serwer SMARP, które są niezbędne do stworzenia raportów, jest przedstawiona w tabeli 6.6. Nazwy wszystkich zmiennych obliczanych zaczynają się od identyfikatora maszyny, której dana zmienna dotyczy. Stan poszczególnych maszyn opisują z wymaganą dokładnością zmienne XXXX_state i XXXX_stop. Wielkość produkcji całkowitej określają zmienne XXXX_total.

Tabela zawiera też dodatkowe zmienne XXXX_shift obrazujące wielkość produkcji maszyn podczas bieżącej zmiany oraz zmienne pomocnicze XXXX_total_0 potrzebne do obliczenia produkcji zmiany. Wielkość produkcji linii jest prezentowana na obrazach synoptycznych. Dodana została również zmienna zmienna L4O1_micro sygnalizująca mikroprzestój owijarki.

Tablica 6.6. Lista zmiennych obliczanych linii L4

Nazwa Opis zmiennej TypButelczarka B1

L4B1_state Standardowy kod stanu butelczarki B1 INTEGERL4B1_stop Zatrzymanie – zmienna zgłaszająca SMALLINTL4B1_total Liczba butelek wytworzonych przez maszynę DOUBLEL4B1_shift Liczba butelek wytworzonych podczas zmiany DOUBLEL4B1_total_0 Liczba butelek na początku zmiany DOUBLE

Butelczarka B2L4B2_state Standardowy kod stanu butelczarki B2 INTEGERL4B2_stop Zatrzymanie – zmienna zgłaszająca SMALLINTL4B2_total Liczba butelek wytworzonych przez maszynę DOUBLEL4B2_shift Liczba butelek wytworzonych podczas zmiany DOUBLEL4B2_total_0 Liczba butelek na początku zmiany DOUBLE

Saturator S1L4S1_state Standardowy kod stanu saturatora INTEGERL4S1_stop Zatrzymanie – zmienna zgłaszająca SMALLINT

Nalewarka N1L4N1_state Standardowy kod stanu nalewarki INTEGERL4N1_stop Zatrzymanie – zmienna zgłaszająca SMALLINTL4N1_total Liczba butelek napełnionych przez maszynę DOUBLEL4N1_shift Liczba butelek napełnionych podczas zmiany DOUBLEL4N1_total_0 Liczba butelek na początku zmiany DOUBLE

Etykieciarka E1L4E1_state Standardowy kod stanu etykieciarki INTEGERL4E1_stop Zatrzymanie – zmienna zgłaszająca SMALLINT

Pakowaczka Z1L4Z1_state Standardowy kod stanu pakowaczki INTEGERL4Z1_stop Zatrzymanie – zmienna zgłaszająca SMALLINTL4Z1_total Liczba paczek zestawionych przez maszynę DOUBLEL4Z1_shift Liczba paczek zestawionych podczas zmiany DOUBLEL4Z1_total_0 Liczba paczek na początku zmiany DOUBLE

Rączkarka R1

60

System Monitorowania, Analizy i Raportowania Produkcji L4R1_state Standardowy kod stanu rączkarki INTEGERL4R1_stop Zatrzymanie – zmienna zgłaszająca SMALLINT

Paletyzer P1L4P1_state Standardowy kod stanu paletyzera INTEGERL4P1_stop Zatrzymanie – zmienna zgłaszająca SMALLINTL4P1_total Liczba palet zestawionych przez maszynę DOUBLEL4P1_shift Liczba palet zestawionych podczas zmiany DOUBLEL4P1_total_0 Liczba palet na początku zmiany DOUBLE

Owijarka O1L4O1_state Standardowy kod stanu owijarki INTEGERL4O1_stop Zatrzymanie – zmienna zgłaszająca SMALLINTL4O1_micro Mikroprzestój – zmienna zgłaszająca SMALLINTL4O1_total Liczba palet owiniętych przez maszynę DOUBLEL4O1_shift Liczba palet owiniętych podczas zmiany DOUBLEL4O1_total_0 Liczba palet na początku zmiany DOUBLE

InneL4_gas Licznik zużycia gazu DOUBLETr4_fail Alarm zaniku komunikacji – zmienna zgłaszająca

Obliczenie współczynników OEE wymaga znajomości nominalnej wydajności poszczególnych maszyn. Wartości te są zapisane w postaci stałych wymienionych w tab. 6.7. Tablica zawiera też stałą Tr4_delay, określającą czas braku komunikatów transpondera, po którym ogłaszany jest alarm zaniku komunikacji.

Tablica 6.7. Lista stałych linii L4

Nazwa Opis zmiennej TypTr4_delay Czas oczekiwania na komunikat transpondera INTEGERL4O1_delay Czas oczekiwania na zmianę produkcji O1 INTEGERL4B1_nominal Wydajność butelczarki B1 [butelki na minutę] DOUBLEL4B2_nominal Wydajność butelczarki B2 [butelki na minutę] DOUBLEL4N1_nominal Wydajność nalewarki N1 [butelki na minutę] DOUBLEL4Z1_nominal Wydajność pakowaczki Z1 [paczki na minutę] DOUBLEL4P1_nominal Wydajność paletyzera P1 [palety na minutę] DOUBLEL4O1_nominal Wydajność owijarki [palety na minutę] DOUBLE

6.4. Przetwarzanie serweraPrzetwarzanie wykonywane przez serwer system SMARP polega na odbieraniu komunikatów transpondera, obliczaniu wartości zmiennych obliczanych i przetwarzaniu alarmów.

Przetwarzanie zmiennych obliczanych zaczyna się po odebraniu komunikatu transpondera lub komunikatu panelu operatora. Obliczeniu podlegają wartości tych zmiennych, które zależą od zmiennych mierzonych zawartych w odebranym komunikacie (rozdz. 4.4, tabela ListS).

Dalsza część tego punktu opisuje przetwarzanie kolejnych zmiennych obliczanych. Symbol XXXX oznacza nazwę maszyny, która może przyjmować wartość L4B1, L4B2, L4S1 itd.

XXXX_state

61

System Monitorowania, Analizy i Raportowania Produkcji Kod stanu maszyny. Serwer interpretuje kody stanu maszyn odczytane ze sterowników i oblicza znormalizowany opis stanu, przedstawiony w postaci zmiennej XXXX_state typu INTEGER. Wartość zmiennej sygnalizuje stan maszyny w standardowy sposób:

XXXX_state < 0 maszyna pracuje,XXXX_state = 0 maszyna zatrzymana,XXXX_state > 0 awaria maszyny (wartość zmiennej określa przyczynę awarii).

Przetwarzanie realizuje funkcja get_state_XXXX, specyficzna dla każdego typu maszyny.

XXXX_stop

Zmienna zgłaszająca alarm "zatrzymanie maszyny". Serwer wykrywa alarm po obliczeniu wartości zmiennej stanu XXXX_state = 0. Przetwarzanie realizuje standardowe wyrażenie serwera state_stop.

XXXX_total

Całkowita produkcja maszyny. Serwer interpretuje wartości zmiennych mierzonych odczytanych z liczników całkowitej produkcji maszyn:

L4B1_Licznik_Butelek_Total dla butelczarki B1,L4B2_Licznik_Butelek_Total dla butelczarki B2,L4N1_Licznik_Butelek dla nalewarki N1,L4Z1_R0029 dla pakowaczki Z1,L4P1_Licznik_Palet dla paletyzera P1,L4O1_Licznik_Palet dla owijarki O1

i przedstawia wielkość całkowitej produkcji maszyny w znormalizowanej postaci zmiennej XXXX_total typu DOUBLE. Jeżeli zmienna mierzona jest przekazywana w postaci 8 upakowanych cyfr BCD (butelczarki B1, B2, pakowaczka Z1), to normalizację wartości BCD realizuje standardowa funkcja serwera get_value_BCD8 (rozdz. 5.6). Jeżeli typem zmiennej mierzonej jest jeden z typów liczbowych systemu SMARP (nalewaczka N1, paletyzer P1, owijarka O1), to normalizacja wartości jest niepotrzebna. Przeliczenie wartości wskazywanej przez licznik produkcji na jednostki fizyczne realizuje standardowe wyrażenie serwera get_value.

XXXX_shift

Bieżąca produkcja maszyny wytworzona w ciągu zmiany. Serwer zapamiętuje wartość licznika produkcji maszyny w chwili zmiany nazwy operatora i oblicza produkcję podczas zmiany odejmując zapamietaną wartość XXXX_total_0 od całkowitej produkcji maszyny XXXX_total. Przetwarzanie realizuje standardowe wyrażenie serwera shift_output.

L4O1_micro

Zmienna zgłaszająca alarm "mikroprzestój owijarki". Serwer wykrywa alarm po odmierzeniu przez licznik zadanego przedziału czasu, w którym podczas pracy maszyny nie nastąpiła zmiana wielkości produkcji całkowitej L4O1_total. Przetwarzanie realizuje standardowa funkcja serwera is_stoppage (rozdz. 5.6).

L4_gas

Całkowite zużycie gazu podczas pracy linii L4. Serwer interpretuje wartości zmiennych mierzonych MASS_R43001 i MASS_R43003 odczytane z liczników zużyciagazu i przedstawia je w postaci zmiennej L4_gas typu DOUBLE. Zakładając, że zmienna mierzona jest przekazywana w postaci 8 upakowanych cyfr BCD, przetwarzanie realizuje standardowa funkcja serwera get_value_BCD8.

62

System Monitorowania, Analizy i Raportowania Produkcji Przetwarzanie alarmu zaczyna się w chwili, w której zmienna zgłaszająca XXXX_stop lub L4O1_micro przyjmie wartość 1. Obsługa alarmu polega na wyświetleniu na panelu operatora zapytania o klasyfikację przyczyny zatrzymania lub mikroprzestoju. Serwer otrzymuje odpowiedź operatora w postaci wartości zmiennej odpowiedzi XXXX_stop_code zakodowanej zgodnie z następujacą konwencją:

XXXX_stop_code = 0 postój planowy.XXXX_stop_code < 0 zatrzymanie nieplanowy (wartość może określać przyczynę),

lub wartości zmiennej L4O1_micro określającej przyczynę mikroprzestoju owijarki.

6.5. RaportyGłównym zadaniem systemu SMARP jest gromadzenie danych do raportów wymaganych przez użytkowników (rozdz. 6.2, tab. 6.3). Raporty te dotyczą:

stanów wszystkich maszyn (awarie i przestoje), efektywności wykorzystania wybranych maszyn (wskaźniki OEE), zasobów, takich jak zużycie gazu, procedury CIP, zmiany operatorskie.

Podstawą do sporządzenia raportów są historyczne wartości zmiennych, zgromadzone w tabeli History serwera SMARP. Lista zmiennych, których wartości oraz stemple czasowe są gromadzone w tabeli History (rozdz. 4.4) obejmuje:

zmienne obliczane XXXX_state wszystkich maszyn, zmienne mierzone XXXX_stop_code wszystkich maszyn, zmienne obliczane XXXX_total, zmienne opisujące zasoby L4_gas, L4N1_CIP, L4_operator.

Stworzenie raportu za określony okres czasu wymaga odczytania wartości potrzebnych zmiennych, zanotowane w tym okresie w tabeli History, a następnie obliczeniu potrzebnych danych i zestawieniu ich w raporcie.

ConStates

Raport: lista przestojów maszyn w okresie raportowania od ... do.Zmienne: XXXX_state, XXXX_stop_code.

Obliczenie polega na wyodrębnieniu tych przedziałów czasu, w okresie raportowania od ... do, w których zmienna XXXX_state przyjmowała jedną z wartości:

XXXX_state = 0 – maszyna wyłączona,XXXX_state < 0 – awaria maszyny.

RaportCountersGas

Raport: zużycie gazu na linii w okresie raportowania od ... do.Zmienne: L4_gas.

Obliczenie polega na wyznaczeniu różnicy stanu licznika zużycia gazu na początku i końcu okresu raportowania od ... do:

zużycie_gazu = L4_gas (do) – L4_gas(od).

Jeżeli raport tego wymaga, to możliwe jest rozbicie okresu raportowania na mniejsze przedziały czasu (np. dni lub godziny) i obliczenie zużycia gazu w poszczególnych przedziałach.

RaportCounterMonth

Raport: produkcja ze wskaźnikami OEE maszyn za dany miesiąc.

63

System Monitorowania, Analizy i Raportowania Produkcji Zmienne: XXXX_total, XXXX_nominal, XXXX_state, XXXX_stop_code.

Raport obejmuje maszyny wyposażone w liczniki produktu: butelczarki B1 i B2, nalewarkę N1, pakowaczkę Z1, paletyzer P1 oraz owijarkę O1. Obliczenie przebiega w pięciu krokach.

1. Obliczenie produkcji maszyny XXXX w okresie raportowania (miesiaca). Produkcja maszyny jest równa różnicy stanu licznika produktów na początku i końcu okresu raportowania od ... do:

XXXX_ produkcja = XXXX_total (do) – XXXX_total (od)

2. Obliczenie dostępności maszyny XXXX w okresie raportowania (miesiaca). Wymaga wyodrębnienie tych przedziałów czasu w okresie raportowania, w których maszyna XXXX była w stanie:

praca (XXXX_state < 0), awaria (XXXX_state > 0), zatrzymanie planowe (XXXX_state = 0 & XXXX_stop_code = 0), zatrzymanie nieplanowe (XXXX_state = 0 & XXXX_stop_code < 0).

i obliczenia dostępności maszyny w następujący sposób:

XXXX_planowy czas pracy = okres raportowania – przedział zatrzymania planowegoXXXX_rzeczywisty czas pracy = przedział pracy

XXXX_dostępność = XXXX_rzeczywisty czas pracy / XXXX_planowy czas pracy

3. Obliczenie wydajności maszyny XXXX w okresie raportowania (miesiaca). Wymaga znajommości nominalnej wydajności maszyny XXXX_nominal i obliczenia:

XXXX_wydajność = XXXX_ produkcja / XXXX_nominal / XXXX_rzeczywisty czas pracy

4. Obliczenie współczynnika jakości jest możliwe tylko dla nalewarki, która jest wyposażona w blok inspektora nalewu kontrolujacy jakoś produktów nalewarki. Obliczenie przebiega w następujący sposób:

L4N1_braki = L4N1_Licznik_Braków (do) – L4N1_Licznik_Braków (od)

L4N1_jakość = (L4N1_produkcja – L4N1_braki) / L4N1_produkcja

Współczynnik jakości pozostałych maszyn przyjmuje wartość XXXX_jakość = 1.

5. Obliczenie współczynnika OEE maszyny XXXX w okresie raportowania (miesiaca):

XXXX_OEE = XXXX_dostępność XXXX_wydajność XXXX_jakość

RaportOEEChart

Raport: OEE godzinowo dla danej maszyny/linii za określony dzień.Zmienne: XXXX_total, XXXX_nominal, XXXX_state, XXXX_stop_code.

Raport obejmuje maszyny wyposażone w liczniki produktu: butelczarki B1 i B2, nalewarkę N1, pakowaczkę Z1, paletyzer P1 oraz owijarkę O1.

Obliczenie jest wykonywane dla każdej godziny oddzielnie, w sposób analogiczny do obliczeń raportu RaportCounterMonth, przyjmując okres raportowania równy jednej godzinie.

RaportOEEChartMonth

Raport: OEE dzienny dla danej maszyny/linii za określony miesiąc.Zmienne: XXXX_total, XXXX_nominal, XXXX_state, XXXX_stop_code.

64

System Monitorowania, Analizy i Raportowania Produkcji Raport obejmuje maszyny wyposażone w liczniki produktu: butelczarki B1 i B2, nalewarkę N1, pakowaczkę Z1, paletyzer P1 oraz owijarkę O1.

Obliczenie jest wykonywane dla każdego dnia oddzielnie, w sposób analogiczny do obliczeń raportu RaportCounterMonth, przyjmując okres raportowania równy jeden dzień.

RaportStatesCIP

Raport: wykaz procedur CIP za dany miesiąc dla danej linii.Zmienne: L4N1_CIP.

Raport procedur CIP dotyczy tylko nalewarki N1.

Obliczenie wymaga wyodrębnienie tych przedziałów czasu w okresie raportowania, w których wartość zmiennej L4N1_CIP sygnalizuje wykonywanie przez nalewarke procedury CIP.

RaportStatesLine

Raport: informacje o przestojach maszyn linii w okresie od ... do.Zmienne: XXXX_state, XXXX_stop_code.

Dane zawarte w tym raporcie uszczegóławiają treść raportu ConStates, podając przyczynę przestoju. Obliczenie polega na wyodrębnieniu tych przedziałów czasu, w okresie raportowania od ... do, w których zmienna XXXX_state przyjmowała jedną z wartości:

XXXX_state = 0 – maszyna wyłączona,XXXX_state < 0 – awaria maszyny,

a następnie sklasyfikowaniu przyczyn awarii na podstawie wartośi zmiennej XXXX_state oraz przyczyn zatrzymania maszyny na podstawie wartości zmiennej XXXX_stop_code.

RaportStatesLineSum

Raport: informacja o: (1) łącznym czasie przebywania maszyn linii w poszczególnych stanach, (2) wartościach współczynników OEE maszyn w okresie od ... do.

Zmienne: XXXX_total, XXXX_nominal, XXXX_state, XXXX_stop_code.

(1) Obliczenie pierwszej części raportu wymaga podzielenia okresu raportowania na przedziały, w których zmienna XXXX_state przyjmowała różne wartości. Przedział, w którym wartość XXXX_state = 0, dzieli się dalej na przedziały odpowiadające różnym wartościom zmiennej XXXX_stop_code. Następnie oblicza się (na podstawie stempli czasowych próbek obu zmiennych) długości wszystkich przedziałów i sumuje długości przedziałów odpowiadających tej samej wartości zmiennych.

(2) Obliczenie drugiej części raportu wymaga policzenia wartości współczynników OEE maszyn w sposób analogiczny do obliczeń raportu RaportCounterMonth.

RaportStatesMonth

Raport: czas przebywania w każdym stanie maszyn linii wraz ze wskaźnikami OEE.Zmienne: XXXX_total, XXXX_nominal, XXXX_state, XXXX_stop_code.

Obliczenie analogiczne do obliczenia obu części raportu RaportStatesLineSum w okresie raportowania jednego miesiąca.

RCountersTotalAdd

Raport: współczynniki OEE dla poszczególnych zmian za wskazany okres od ... do.Zmienne: XXXX_total, XXXX_nominal, XXXX_state, XXXX_stop_code, L4_operator.

65

System Monitorowania, Analizy i Raportowania Produkcji Obliczenie wymaga wyodrębnienia przedziałów czasu odpowiadających poszczególnym wartościom zmiennej mierzonej L4_operator, a następnie obliczenia współczynników OEE maszyn w każdym przedziale, w sposób analogiczny do obliczeń raportu RaportCounterMonth.ShiftGet

Raport: lista zmian wraz z godzinami ich rozpoczęcia.Zmienne: L4_operator.

Obliczenie wymaga wyodrębnienia przedziałów czasu odpowiadających poszczególnym wartościom zmiennej mierzonej L4_operator w okresie raportowania. Godziny rozpoczęcia zmian są zapisane jako wartości stempli czasowych próbek tej zmiennej.

6.6. Specyfikacja systemuSpecyfikacja prototypowej instalacji systemu SMARP obejmuje wszystkie elementy opisane w rozdz. 2, z wyjątkiem definicji typów danych (types i records) oraz definicji semantyki zmiennych (semantics). Pominięte elementy nie występują w specyfikacji linii butelkowania, w której wszystkie zmienne są zmiennymi prostymi, a większość zmiennych przyjmuje wartości wyliczeniowe lub całkowite.

Specyfikacja wyrażeń

Prototypowa instalacja systemu SMARP wykorzystuje funkcje serwera opisane w rozdz. 5.6, w tym funkcje specyficzne dla poszczególnych maszyn instalacji.

Obliczenie stanu maszyny realizują specyficzne dla nich wyrażenia o nazwie state_XXX, gdzie XXX jest nazwą maszyny. Treścią wyrażenia jest wywołanie funkcji serwera o nazwie get_state_XXX. Funkcje obliczające stan maszyn (poza butelczarką), tzn. funkcje:

get_state_L4S – oblicz stan saturatora, get_state_L4N – oblicz stan nalewarki, get_state_L4E – oblicz stan etykieciarki, get_state_L4Z – oblicz stan pakowaczki, get_state_L4R – oblicz stan rączkarki, get_state_L4P – oblicz stan paletyzera, get_state_L4O – oblicz stan owijarki,

działają wprost na wartościach zmiennych mierzonych, w związku z czym definicje wyrażeń zawierających te funkcje nie mają argumentów formalnych. Specyfikacje zmiennych obliczanych korzystające z tych wyrazeń będą jednak miały argumenty aktualne, które pozwalą ustalić czy obliczać daną zmienną po odebraniu komunikatu transpondera, czy nie.

Obliczenie wielkości produkcji tych maszyn, których liczniki produktu działają w kodzie BCD, realizuje wyrażenie get_counter_BC8. Wyrażenie przekształca kod BCD na wartość całkowitą typu DOUBLE, korzystając z funkcji serwera get_value_BCD8. Podobnie działa wyrażenie get_gas_meter, które dodatkowo oblicza zużycie gazu jako liczbę rzeczywistą, przy założeniu że wskazanie licznika obejmuje trzy cyfry po przecinku.

Alarm zatrzymania maszyny wykrywa wyrażenie state_stop, które przyrównuje kod stanu maszyny do zera. Alarm mikroprzestoju owijarki wykrywa wyrażenie stoppage zawierające funkcję serwera is_stoppage. Argumentami wyrażenia (i funkcji) są: zmienna stanu maszyny, zmienna licznika czasu i stała wskazująca przedział czasu odmierzany przez licznik.

Alarm zaniku komunikacji transpondera wykrywa wyrażenie Tr_com_fail zawierające funkcję serwera com_fail. Argumentami wyrażenia (i funkcji) są: zmienna numeru

66

System Monitorowania, Analizy i Raportowania Produkcji komunikatu, zmienna licznika czasu i stała wskazująca przedział czasu odmierzany przez licznik.<?xml version="1.0" encoding="UTF-8"?><s:smarp xmlns:s="http://ilabo.com.pl/smarp/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ilabo.com.pl/smarp/schema schema.xsd"> <expressions version="1.0"> <expression name="state_L4B"> <comment>Normalizacja stanu butelczarki</comment> <arguments> <item name="x" type="BINARY(2)" /> </arguments> <expr> <get_state_L4B> <x /> </get_state_L4B> </expr> </expression> <expression name="state_L4S"> <comment>Normalizacja stanu saturatora</comment> <expr> <get_state_L4S /> </expr> </expression> <expression name="state_L4N"> <comment>Normalizacja stanu nalewarki</comment> <expr> <get_state_L4N /> </expr> </expression> <expression name="state_L4E"> <comment>Normalizacja stanu etykieciarki</comment> <expr> <get_state_L4E /> </expr> </expression> <expression name="state_L4Z"> <comment>Normalizacja stanu pakowaczki</comment> <expr> <get_state_L4Z /> </expr> </expression> <expression name="state_L4R"> <comment>Normalizacja stanu rączkarki</comment> <expr> <get_state_L4R /> </expr> </expression> <expression name="state_L4P">

67

System Monitorowania, Analizy i Raportowania Produkcji <comment>Normalizacja stanu paletyzera</comment> <expr> <get_state_L4P /> </expr> </expression> <expression name="state_L4O"> <comment>Normalizacja stanu owijarki</comment> <expr> <get_state_L4O /> </expr> </expression> <expression name="get_counter_BCD8"> <comment>Wartość 8-cyfrowego licznika BCD</comment> <arguments> <item name="count" type="BINARY(4)" /> </arguments> <expr> <get_value_BCD8> <count /> </get_value_BCD8> </expr> </expression> <expression name="get_gas_meter"> <comment>Licznik BCD8, tysięczne części</comment> <arguments> <item name="count" type="BINARY(4)" /> </arguments> <expr> <divide> <get_value_BCD8> <count /> </get_value_BCD8> 1000 </divide> </expr> </expression> <expression name="get_value"> <comment>Przepisanie wartości liczbowej</comment> <arguments> <item name="x" /> </arguments> <expr> <x /> </expr> </expression> <expression name="shift_output"> <comment>Obliczenie produkcji zmiany</comment> <arguments> <item name="t" type="DOUBLE" seq="1" /> <item name="t0" type="DOUBLE" seq="2" /> </arguments>

68

System Monitorowania, Analizy i Raportowania Produkcji <expr> <subtract> <t /> <t0 /> </subtract> </expr> </expression> <expression name="state_stop"> <comment>Sprawdzenie, czy stan = stop</comment> <arguments> <item name="state" type="INTEGER" /> </arguments> <expr> <eq> <state /> 0 </eq> </expr> </expression> <expression name="stoppage"> <comment>Mikroprzestój L4O1</comment> <arguments> <item name="state" type="INTEGER" seq="1" /> <item name="tim" type="SMALLINT" seq="2" /> <item name="del" type="INTEGER" seq="3" /> </arguments> <expr> <is_stoppage> <state /> <tim /> <del /> </is_stoppage> </expr> </expression> <expression name="Tr_com_fail"> <comment>Zanik komunikatów transpondera</comment> <arguments> <item name="cid" type="INTEGER" seq="1" /> <item name="tim" type="SMALLINT" seq="2" /> <item name="del" type="INTEGER" seq="3" /> </arguments> <expr> <com_fail> <cid /> <tim /> <del /> </com_fail> </expr> </expression> </expressions></s:smarp>

69

System Monitorowania, Analizy i Raportowania Produkcji Specyfikacja zmiennych mierzonych

Specyfikacja zmiennych mierzonych zawiera definicje zmiennych opisanych w tab. 6.4 i 6.5. Elementy i atrybuty pominięte w treści specyfikacji, przyjmują wartości domyślne:

size = 0 zmienna prosta,mode = 1 przetwarzanie każdej odebranej wartości zmiennej,value = 0 wartość poczatkowa 0,sample = cycle okres próbkowania równy okresowi raportowania.

<?xml version="1.0" encoding="UTF-8"?><s:smarp xmlns:s="http://ilabo.com.pl/smarp/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ilabo.com.pl/smarp/schema schema.xsd" plant="Cisowianka">

<sensors version="1.0"> <transponder name="Tr4" alive="20"> <item name="Tr4" type="INTEGER"> <comment>Numer komunikatu transpondera</comment> </item> <item name="L4B1_Meld" type="BINARY(2)" cycle="5"> <comment>Kod stanu butelczarki B1</comment> </item> <item name="L4B1_Licznik_Butelek_Total" type="BINARY(4)" cycle="5"> <comment>Licznik produkcji butelczarki</comment> </item> <item name="L4B2_Meld" type="BINARY(2)" cycle="5"> <comment>Kod stanu butelczarki B2</comment> </item> <item name="L4B2_Licznik_Butelek_Total" type="BINARY(4)" cycle="5"> <comment>Licznik produkcji butelczarki</comment> </item> <item name="SB4AV1_I0004" type="SMALLINT" cycle="10"> <comment>Zakłócenie saturatora</comment> </item> <item name="SB4AV1_I0005" type="SMALLINT" cycle="10"> <comment>Praca saturatora</comment> </item> <item name="L4N1_Maszyna_Awaria1" type="SMALLINT" cycle="5"> <comment>Kod awarii 1 nalewarki</comment> </item> <item name="L4N1_Maszyna_Awaria2" type="SMALLINT" cycle="5"> <comment>Kod awarii 2 nalewarki</comment> </item>

70

System Monitorowania, Analizy i Raportowania Produkcji <item name="L4N1_Maszyna_Produkcja" type="SMALLINT" cycle="5"> <comment>Praca nalewarki</comment> </item> <item name="L4N1_Maszyna_Stop" type="SMALLINT" cycle="5"> <comment>Zatrzymanie nalewarki</comment> </item> <item name="L4N1_Maszyna_Wlaczona" type="SMALLINT" cycle="5"> <comment>Włączenie nalewarki</comment> </item> <item name="L4N1_Mixer_Gotowy" type="SMALLINT" cycle="5"> <comment>Gotowość miksera nalewarki</comment> </item> <item name="L4N1_Mixer_Pusty" type="SMALLINT" cycle="5"> <comment>Opróżnienie miksera nalewarki</comment> </item> <item name="L4N1PB_Otwarte_Drzwi" type="SMALLINT" cycle="5"> <comment>Otwarte drzwi nalewarki</comment> </item> <item name="L4N1_Stoper_Otwarty" type="SMALLINT" cycle="5"> <comment>Zatrzymanie awaryjne</comment> </item> <item name="L4N1_CIP" type="SMALLINT" cycle="10"> <comment>Płukanie nalewarki</comment> </item> <item name="L4N1_Licznik_Butelek" type="INTEGER" cycle="5"> <comment>Licznik napełnionych butelek</comment> </item> <item name="L4N1_Licznik_Brakow" type="INTEGER" cycle="5"> <comment>Licznik odrzuconych butelek</comment> </item> <item name="SB4AV1_I0006" type="SMALLINT" cycle="5"> <comment>Praca etykieciarki</comment> </item> <item name="SB4AV1_I0007" type="SMALLINT" cycle="5"> <comment>Kod stanu etykieciarki</comment> </item> <item name="SB4AV1_I0008" type="SMALLINT" cycle="5"> <comment>Brak powietrza w etykieciarce</comment> </item> <item name="SB4AV1_I0009" type="SMALLINT" cycle="5"> <comment>Zaczopowanie etykieciarki</comment> </item>

71

System Monitorowania, Analizy i Raportowania Produkcji <item name="SB4AV1_I0011" type="SMALLINT" cycle="5"> <comment>Przeciążenie etykieciarki</comment> </item> <item name="SB4AV1_I0013" type="SMALLINT" cycle="5"> <comment>Wezwanie operatora pakowaczki</comment> </item> <item name="SB4AV1_I0014" type="SMALLINT" cycle="5"> <comment>Przestój pakowaczki</comment> </item> <item name="SB4AV1_I0015" type="SMALLINT" cycle="5"> <comment>Praca pakowaczki</comment> </item> <item name="SB4AV1_I0016" type="SMALLINT" cycle="5"> <comment>Alarm pakowaczki</comment> </item> <item name="SB4AV1_I0017" type="SMALLINT" cycle="5"> <comment>Stan zagrożenia pakowaczki</comment> </item> <item name="L4Z1_R0029" type="BINARY(4)" cycle="5"> <comment>Licznik zawiniętych paczek</comment> </item> <item name="SB4AV1_I0019" type="SMALLINT" cycle="5"> <comment>Przygotowanie rączkarki</comment> </item> <item name="SB4AV1_I0020" type="SMALLINT" cycle="5"> <comment>Awaria rączkarki</comment> </item> <item name="SB4AV1_I0021" type="SMALLINT" cycle="5"> <comment>Praca rączkarki</comment> </item> <item name="SB4AV1_I0022" type="SMALLINT" cycle="5"> <comment>Praca paletyzera</comment> </item> <item name="SB4AV1_I0023" type="SMALLINT" cycle="5"> <comment>Zakłócenie paletyzera</comment> </item> <item name="L4P1_Licznik_Palet" type="INTEGER" cycle="5"> <comment>Licznik przygotowanych palet</comment> </item> <item name="SB4AV1_I0025" type="SMALLINT" cycle="5"> <comment>Praca owijarki</comment> </item> <item name="SB4AV1_I0026" type="SMALLINT" cycle="5"> <comment>Awaria owijarki</comment> </item> <item name="SB4AV1_I0027" type="SMALLINT" cycle="5"> <comment>Tryb automatyczny owijarki</comment> </item> <item name="L4O1_Licznik_Palet" type="INTEGER" cycle="5">

72

System Monitorowania, Analizy i Raportowania Produkcji <comment>Licznik owiniętych palet</comment> </item> <item name="MASS_R43001" type="BINARY(4)" cycle="5"> <comment>Licznik objetości gazu</comment> </item> <item name="MASS_R43003" type="BINARY(4)" cycle="5"> <comment>Licznik masy gazu</comment> </item> </transponder> <panel name="P4"> <item name="L4_operator" type="VARCHAR(15)" mode="2"> <comment>Nazwa operatora na zmianie</comment> </item> <item name="L4B1_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania B1 z panelu</comment> </item> <item name="L4B2_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania B2 z panelu</comment> </item> <item name="L4N1_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania N1 z panelu</comment> </item> <item name="L4E1_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania E1 z panelu</comment> </item> <item name="L4Z1_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania Z1 z panelu</comment> </item> <item name="L4R1_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania R1 z panelu</comment> </item> <item name="L4P1_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania P1 z panelu</comment> </item> <item name="L4O1_stop_code" type="SMALLINT" mode="2"> <comment>Kod zatrzymania O1 z panelu</comment> </item> <item name="L4O1_micro_code" type="SMALLINT" mode="2"> <comment>Kod mikroprzestoju O1</comment> </item> </panel> <timers> <item name="Tr4_timer" type="SMALLINT"> <comment>licznik zaniku komunikacji</comment> </item> <item name="L4O1_timer" type="SMALLINT"> <comment>licznik mikroprzestoju O1</comment> </item> </timers> </sensors>

73

System Monitorowania, Analizy i Raportowania Produkcji </s:smarp>

Specyfikacja stałych

Segment specyfikacji stałych zawiera definicje stałych opisanych w tab 6.7. Stała Tr4_delay określa czas oczekiwania na komunikat transpondera przed zgłoszeniem alarmu, a stałe XXXX_nominal definiują nominalną produkcję maszyn. Atrybuty pominięte w specyfikacji przyjmują wartości domyślne:

size = "0" wartość prostamode = "0" brak przetwarzania stałej.

<?xml version="1.0" encoding="UTF-8"?><s:smarp xmlns:s="http://ilabo.com.pl/smarp/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ilabo.com.pl/smarp/schema schema.xsd" plant="Cisowianka">

<constants version="1.0"> <item name="Tr4_delay" type="INTEGER"> <comment>Max czas między komunikatami</comment> <value>30</value> </item> <item name="L4O1_delay" type="INTEGER"> <comment>Przedział przyrostu produkcji O1</comment> <value>120</value> </item> <item name="LB1_nominal" type="DOUBLE"> <value>???</value> wartość stałej </item> <item name="LB2_nominal" type="DOUBLE"> <value>???</value> wartość stałej </item> <item name="LN1_nominal" type="DOUBLE"> <value>???</value> wartość stałej </item> <item name="LZ1_nominal" type="DOUBLE"> <value>???</value> wartość stałej </item> <item name="LP1_nominal" type="DOUBLE"> <value>???</value> wartość stałej </item> <item name="LO1_nominal"

74

System Monitorowania, Analizy i Raportowania Produkcji type="DOUBLE"> <value>???</value> wartość stałej </item> </constants></s:smarp>

Specyfikacja zmiennych obliczanych

Specyfikacja zmiennych obliczanych zawiera definicje zmiennych opisanych w tab. 6.6. Elementy i atrybuty pominięte w treści specyfikacji, przyjmują wartości domyślne:

size = "0" zmienna prosta,mode = "2" obliczenie wartości zmiennej i zapamiętanie jej w logu historii, o ile jest

różna od wartości poprzedniej,order = "0" zmienna obliczana jako efekt uboczny funkcji,value = 0 wartość poczatkowa 0.

<?xml version="1.0" encoding="UTF-8"?><s:smarp xmlns:s="http://ilabo.com.pl/smarp/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ilabo.com.pl/smarp/schema schema.xsd" plant="Cisowianka">

<derived version="1.0"> <item name="L4B1_state" type="INTEGER" order="10"> <comment>Stan butelczarki B1</comment> <expression>state_L4B</expression> <arguments> <item name="L4B1_Meld" /> </arguments> </item> <item name="L4B1_stop" type="SMALLINT" order="20"> <comment>Zgłoszenie zatrzymania B1</comment> <expression>state_stop</expression> <arguments> <item name="L4B1_state" /> </arguments> </item> <item name="L4B1_total" type="DOUBLE" order="30"> <comment>Licznik wytworzonych butelek</comment> <expression>get_counter_BCD8</expression> <arguments> <item name="L4B1_Licznik_Butelek_Total" /> </arguments> </item> <item name="L4B1_total_0" type="DOUBLE" order="40"> <comment>Produkcja na początku zmiany</comment> <expression>get_value</expression> <arguments trigger="L4_operator"> <item name="L4B1_total" />

75

System Monitorowania, Analizy i Raportowania Produkcji </arguments> </item> <item name="L4B1_shift" type="DOUBLE" order="50"> <comment>Bieżąca produkcja zmiany</comment> <expression>shift_output</expression> <arguments> <item name="L4B1_total" seq="1" /> <item name="L4B1_total_0" seq="2" /> </arguments> </item> <item name="L4B2_state" type="INTEGER" order="60"> <comment>Stan butelczarki B2</comment> <expression>state_L4B</expression> <arguments> <item name="L4B2_Meld" /> </arguments> </item> <item name="L4B2_stop" type="SMALLINT" order="70"> <comment>Zgłoszenie zatrzymania B2</comment> <expression>state_stop</expression> <arguments> <item name="L4B2_state" /> </arguments> </item> <item name="L4B2_total" type="INTEGER" order="80"> <comment>Licznik wytworzonych butelek</comment> <expression>get_counter_BCD8</expression> <arguments> <item name="L4B2_Licznik_Butelek_Total" /> </arguments> </item> <item name="L4B2_total_0" type="DOUBLE" order="90"> <comment>Produkcja na początku zmiany</comment> <expression>get_value</expression> <arguments trigger="L4_operator"> <item name="L4B2_total" /> </arguments> </item> <item name="L4B2_shift" type="DOUBLE" order="100"> <comment>Bieżąca produkcja zmiany</comment> <expression>shift_output</expression> <arguments> <item name="L4B2_total" seq="1" /> <item name="L4B2_total_0" seq="2" /> </arguments> </item> <item name="L4S1_state" type="INTEGER" order="110"> <comment>Stan saturatora S1</comment> <expression>state_L4S</expression> <arguments> <item name="SB4AV1_I0004" />

76

System Monitorowania, Analizy i Raportowania Produkcji <item name="SB4AV1_I0005" /> </arguments> </item> <item name="L4S1_stop" type="SMALLINT" order="120"> <comment>Zgłoszenie zatrzymania S1</comment> <expression>state_stop</expression> <arguments> <item name="L4S1_state" /> </arguments> </item> <item name="L4N1_state" type="INTEGER" order="130"> <comment>Stan nalewarki N1</comment> <expression>state_L4N</expression> <arguments> <item name="L4N1_Maszyna_Awaria1" /> <item name="L4N1_Maszyna_Awaria2" /> <item name="L4N1_Maszyna_Produkcja" /> <item name="L4N1_Maszyna_Stop" /> <item name="L4N1_Maszyna_Wlaczona" /> <item name="L4N1_Mixer_Gotowy" /> <item name="L4N1_Mixer_Pusty" /> <item name="L4N1_Otwarte_Drzwi" /> <item name="L4N1_Stoper_Otwarty" /> <item name="L4N1_CIP" /> </arguments> </item> <item name="L4N1_stop" type="SMALLINT" order="140"> <comment>Zgłoszenie zatrzymania N1</comment> <expression>state_stop</expression> <arguments> <item name="L4N1_state" /> </arguments> </item> <item name="L4N1_total" type="INTEGER" order="150"> <comment>Licznik wytworzonych butelek</comment> <expression>get_value</expression> <arguments> <item name="L4N1_Licznik_Butelek" /> </arguments> </item> <item name="L4N1_total_0" type="DOUBLE" order="160"> <comment>Produkcja na początku zmiany</comment> <expression>get_value</expression> <arguments trigger="L4_operator"> <item name="L4N1_total" /> </arguments> </item> <item name="L4N1_shift" type="DOUBLE" order="170"> <comment>Bieżąca produkcja zmiany</comment> <expression>shift_output</expression> <arguments>

77

System Monitorowania, Analizy i Raportowania Produkcji <item name="L4N1_total" seq="1" /> <item name="L4N1_total_0" seq="2" /> </arguments> </item> <item name="L4E1_state" type="INTEGER" order="180"> <comment>Stan etykieciarki E1</comment> <expression>state_L4E</expression> <arguments> <item name="SB4AV1_I0006" /> <item name="SB4AV1_I0007" /> <item name="SB4AV1_I0008" /> <item name="SB4AV1_I0009" /> <item name="SB4AV1_I0011" /> </arguments> </item> <item name="L4E1_stop" type="SMALLINT" order="190"> <comment>Zgłoszenie zatrzymania E1</comment> <expression>state_stop</expression> <arguments> <item name="L4E1_state" /> </arguments> </item> <item name="L4Z1_state" type="INTEGER" order="200"> <comment>Stan pakowaczki Z1</comment> <expression>state_L4Z</expression> <arguments> <item name="SB4AV1_I0013" /> <item name="SB4AV1_I0014" /> <item name="SB4AV1_I0015" /> <item name="SB4AV1_I0016" /> <item name="SB4AV1_I0017" /> </arguments> </item> <item name="L4Z1_stop" type="SMALLINT" order="210"> <comment>Zatrzymanie pakowaczki Z1</comment> <expression>state_stop</expression> <arguments> <item name="L4Z1_state" /> </arguments> </item> <item name="L4Z1_total" type="INTEGER" order="220"> <comment>Licznik wytworzonych butelek</comment> <expression>get_counter_BCD8</expression> <arguments> <item name="L4Z1_R0029" /> </arguments> </item> <item name="L4Z1_total_0" type="DOUBLE" order="230"> <comment>Produkcja na początku zmiany</comment> <expression>get_value</expression> <arguments trigger="L4_operator">

78

System Monitorowania, Analizy i Raportowania Produkcji <item name="L4Z1_total" /> </arguments> </item> <item name="L4Z1_shift" type="DOUBLE" order="240"> <comment>Bieżąca produkcja zmiany</comment> <expression>shift_output</expression> <arguments> <item name="L4Z1_total" seq="1" /> <item name="L4Z1_total_0" seq="2" /> </arguments> </item> <item name="L4R1_state" type="INTEGER" order="250"> <comment>Stan rączkarki R1</comment> <expression>state_L4R</expression> <arguments> <item name="SB4AV1_I0019" /> <item name="SB4AV1_I0020" /> <item name="SB4AV1_I0021" /> </arguments> </item> <item name="L4R1_stop" type="SMALLINT" order="260"> <comment>Zatrzymanie rączkarki R1</comment> <expression>state_stop</expression> <arguments> <item name="L4R1_state" /> </arguments> </item> <item name="L4P1_state" type="INTEGER" order="270"> <comment>Stan paletyzera P1</comment> <expression>state_L4P</expression> <arguments> <item name="SB4AV1_I0022" /> <item name="SB4AV1_I0023" /> </arguments> </item> <item name="L4P1_stop" type="SMALLINT" order="280"> <comment>Zatrzymanie paletyzera P1</comment> <expression>state_stop</expression> <arguments> <item name="L4P1_state" /> </arguments> </item> <item name="L4P1_total" type="INTEGER" order="290"> <comment>Licznik przygotowanych palet</comment> <expression>get_value</expression> <arguments> <item name="L4P1_Licznik_Palet" /> </arguments> </item> <item name="L4P1_total_0" type="DOUBLE" order="300"> <comment>Produkcja na początku zmiany</comment>

79

System Monitorowania, Analizy i Raportowania Produkcji <expression>get_value</expression> <arguments trigger="L4_operator"> <item name="L4P1_total" /> </arguments> </item> <item name="L4P1_shift" type="DOUBLE" order="310"> <comment>Bieżąca produkcja zmiany</comment> <expression>shift_output</expression> <arguments> <item name="L4P1_total" seq="1" /> <item name="L4P1_total_0" seq="2" /> </arguments> </item> <item name="L4O1_state" type="INTEGER" order="320"> <comment>Stan owijarki O1</comment> <expression>state_L4O</expression> <arguments> <item name="SB4AV1_I0025" /> <item name="SB4AV1_I0026" /> <item name="SB4AV1_I0027" /> </arguments> </item> <item name="L4O1_stop" type="SMALLINT" order="330"> <comment>Zatrzymanie owijarki O1</comment> <expression>state_stop</expression> <arguments> <item name="L4O1_state" /> </arguments> </item> <item name="L4O1_total" type="INTEGER" order="340"> <comment>Licznik owiniętych palet</comment> <expression>get_value</expression> <arguments> <item name="L4O1_Licznik_Palet" /> </arguments> </item> <item name="L4O1_total_0" type="DOUBLE" order="350"> <comment>Produkcja na początku zmiany</comment> <expression>get_value</expression> <arguments trigger="L4_operator"> <item name="L4O1_total" /> </arguments> </item> <item name="L4O1_shift" type="DOUBLE" order="360"> <comment>Bieżąca produkcja zmiany</comment> <expression>shift_output</expression> <arguments> <item name="L4O1_total" seq="1" /> <item name="L4O1_total_0" seq="2" /> </arguments> </item>

80

System Monitorowania, Analizy i Raportowania Produkcji <item name="L4O1_micro" type="SMALLINT" order="370"> <comment>Mikroprzestój owijarki O1</comment> <expression>stoppage</expression> <arguments> <item name="L4O1_state" seq="1" /> <item name="L4O1_timer" seq="2" /> <item name="L4O1_delay" seq="3" /> <item name="L4O1_total" seq="4" /> </arguments> </item> <item name="Tr4_fail" type="SMALLINT" order="5"> <comment>Zgłoszenie zaniku komunikatów</comment> <expression>com_fail_4</expression> <arguments> <item name="Tr4" seq="1" /> <item name="Tr4_timer" seq="2" /> <item name="Tr4_delay" seq="3" /> </arguments> </item> <item name="L4_gas" type="INTEGER" order="380"> <comment>Licznik zużycia gazu</comment> <expression>get_gas_meter</expression> <arguments> <item name="MASS_R43001" /> </arguments> </item> </derived></s:smarp>

Specyfikacja alarmów

Serwer systemu SMARP wykrywa alarm zaniku komunikatów transpondera Tr4. Reakcją jest wysłanie e-maila do administratora systemu. Awaria może być też pokazana na obrazach synoptycznych, np. przez związanie ikony diody świecacej ze zmienna zgłaszającą – zmiana wartości zmiennej na dodatnią spowoduje zmianę koloru diody z szarego na czerwony.

Serwer wykrywa też i zgłasza alarm zatrzymania dowolnej maszyny linii L4 (zmienna zgłaszajaca XXXX_stop) oraz mikroprzestoju owijarki O1 (zmienna zgłaszajaca L4O1_micro). Reakcją na alarm jest wyświetlenie na panelu operatora zapytania o przyczynę zatrzymania lub mikroprzestoju. Odpowiedź operatora jest przesyłana do serwera jako wartośc zmiennej mierzonej XXXX_stop_code lub L4O1_micro_code.<?xml version="1.0" encoding="UTF-8"?><s:smarp xmlns:s="http://ilabo.com.pl/smarp/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ilabo.com.pl/smarp/schema schema.xsd" plant="Cisowianka">

<alarms version="1.0"> <alarm name="Tr4_alm" report="Tr4_fail"> <comment>Alarm zaniku komunikacji Tr4</comment>

81

System Monitorowania, Analizy i Raportowania Produkcji <mails> <mail value="1"> <to>[email protected]</to> <note>Zanik komunikacji</note> </mail> </mails> </alarm> <alarm name="L4B1_stop_alm" report="L4B1_stop"> <comment>Zatrzymanie butelczarki B1</comment> <panels> <panel name="p1" reply="L4B1_stop_code"> <note>Podaj kod zatrzymania B1</note> </panel> </panels> </alarm> <alarm name="L4B2_stop_alm" report="L4B2_stop"> <comment>Zatrzymanie butelczarki B2</comment> <panels> <panel name="p1" reply="L4B2_stop_code"> <note>Podaj kod zatrzymania B2</note> </panel> </panels> </alarm> <alarm name="L4S1_stop_alm" report="L4S1_stop"> <comment>Zatrzymanie saturatora S1</comment> <panels> <panel name="p1" reply="L4S1_stop_code"> <note>Podaj kod zatrzymania S1</note> </panel> </panels> </alarm> <alarm name="L4N1_stop_alm" report="L4N1_stop"> <comment>Zatrzymanie nalewarki N1</comment> <panels> <panel name="p1" reply="L4N1_stop_code"> <note>Podaj kod zatrzymania N1</note> </panel> </panels> </alarm> <alarm name="L4E1_stop_alm" report="L4E1_stop"> <comment>Zatrzymanie etykieciarki E1</comment> <panels> <panel name="p1" reply="L4E1_stop_code"> <note>Podaj kod zatrzymania E1</note> </panel> </panels> </alarm> <alarm name="L4Z1_stop_alm" report="L4Z1_stop"> <comment>Zatrzymanie pakowaczki Z1</comment> <panels> <panel name="p1" reply="L4Z1_stop_code">

82

System Monitorowania, Analizy i Raportowania Produkcji <note>Podaj kod zatrzymania Z1</note> </panel> </panels> </alarm> <alarm name="L4P1_stop_alm" report="L4P1_stop"> <comment>Zatrzymanie paletyzera P1</comment> <panels> <panel name="p1" reply="L4P1_stop_code"> <note>Podaj kod zatrzymania P1</note> </panel> </panels> </alarm> <alarm name="L4O1_stop_alm" report="L4O1_stop"> <comment>Zatrzymanie owijarki O1</comment> <panels> <panel name="p1" reply="L4O1_stop_code"> <note>Podaj kod zatrzymania O1</note> </panel> </panels> </alarm> <alarm name="L4O1_micro_alm" report="L4O1_micro"> <comment>Mikroprzestój owijarki O1</comment> <panels> <panel name="p1" reply="L4O1_micro_code"> <note>Podaj kod mikroprzestoju O1</note> </panel> </panels> </alarm> </alarms></s:smarp>

Specyfikacja struktury instalacji

Rolę instalacji produkcyjnej w pilotażowym wdrożeniu systemu SMARP pełni linia produkcyjna L4. Linia ta podzielona jest na maszyny wymienione w tab. 6.2.<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="factory.xsl"?><s:smarp xmlns:s="http://ilabo.com.pl/smarp/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ilabo.com.pl/smarp/schema schema.xsd" plant="Linia L4"> <factory version="1.0"> <node name="plant"> <variables> <item name="Tr4_fail"> <display show="led" /> </item> <item name="L4_gas"> <display show="yes">

83

System Monitorowania, Analizy i Raportowania Produkcji <legend>zużycie gazu</legend> <fraction>2</fraction> </display> </item> </variables> <parts> <part name="L4B1" /> <part name="L4B2" /> <part name="L4S1" /> <part name="L4N1" /> <part name="L4E1" /> <part name="L4Z2" /> <part name="L4R1" /> <part name="L4P1" /> <part name="L4O1" /> </parts> <display show="yes"> <legend>Linia L4</legend> </display> </node> <node name="L4B1"> <variables> <item name="L4B1_state"> <display show="led" /> </item> <item name="L4B1_stop" /> <item name="L4B1_total" /> <item name="L4B1_shift"> <display show="yes"> <legend>produkcja zmiany</legend> </display> </item> <item name="L4B1_total_0" /> </variables> <display show="yes"> <legend>Butelczarka B1</legend> </display> </node> <node name="L4B2"> <variables> <item name="L4B2_state"> <display show="led" /> </item> <item name="L4B2_stop" /> <item name="L4B2_total" /> <item name="L4B2_shift"> <display show="yes"> <legend>produkcja zmiany</legend> </display> </item> <item name="L4B2_total_0" />

84

System Monitorowania, Analizy i Raportowania Produkcji </variables> <display show="yes"> <legend>Butelczarka B2</legend> </display> </node> <node name="L4S1"> <variables> <item name="L4S1_state"> <display show="led" /> </item> <item name="L4S1_stop" /> </variables> <display show="no"> <legend>Saturator S1</legend> </display> </node> <node name="L4N1"> <variables> <item name="L4N1_state"> <display show="led" /> </item> <item name="L4N1_stop" /> <item name="L4N1_total" /> <item name="L4N1_shift"> <display show="yes"> <legend>produkcja zmiany</legend> </display> </item> <item name="L4N1_total_0" /> </variables> <display show="yes"> <legend>Nalewarka N1</legend> </display> </node> <node name="L4E1"> <variables> <item name="L4E1_state"> <display show="led" /> </item> <item name="L4E1_stop" /> </variables> <display show="no"> <legend>Etykieciarka E1</legend> </display> </node> <node name="L4Z1"> <variables> <item name="L4Z1_state"> <display show="led" /> </item> <item name="L4Z1_stop" />

85

System Monitorowania, Analizy i Raportowania Produkcji <item name="L4Z1_total" /> <item name="L4Z1_shift"> <display show="yes"> <legend>produkcja zmiany</legend> </display> </item> <item name="L4Z1_total_0" /> </variables> <display show="yes"> <legend>Pakowaczka Z1</legend> </display> </node> <node name="L4R1"> <variables> <item name="L4R1_state"> <display show="led" /> </item> <item name="L4R1_stop" /> </variables> <display show="no"> <legend>Etykieciarka R1</legend> </display> </node> <node name="L4P1"> <variables> <item name="L4P1_state"> <display show="led" /> </item> <item name="L4P1_stop" /> <item name="L4P1_total" /> <item name="L4P1_shift"> <display show="yes"> <legend>produkcja zmiany</legend> </display> </item> <item name="L4P1_total_0" /> </variables> <display show="yes"> <legend>Paletyzer P1</legend> </display> </node> <node name="L4O1"> <variables> <item name="L4O1_state"> <display show="led" /> </item> <item name="L4O1_stop" /> <item name="L4O1_total" /> <item name="L4O1_shift"> <display show="yes"> <legend>produkcja zmiany</legend>

86

System Monitorowania, Analizy i Raportowania Produkcji </display> </item> <item name="L4O1_total_0" /> </variables> <display show="yes"> <legend>Owijarka O1</legend> </display> </node> <edge source="B1" target="N1" /> <edge source="B2" target="N1" /> <edge source="S1" target="N1" /> <edge source="N1" target="E1" /> <edge source="E1" target="Z1" /> <edge source="Z1" target="R1" /> <edge source="R1" target="P1" /> <edge source="P1" target="O1" /> </factory></s:smarp>

6.7. Wnioski – automatyzacja tworzenia specyfikacji systemuDługość specyfikacji opisujacej prototypową instalację systemu SMARP (rozdz. 6.6) pokazuje, że jej ręczne przygotowanie jest dośc trudne – choć nie niemożliwe. Możliwości częściowej automatyzacji tego procesu sa różne dla różnych segmentów specyfikacji.

Specyfikacja zmiennych mierzonych

Treść specyfikacji zmiennych mierzonych (element <sensors>) prototypowej instalacji systemu SMARP jest zbliżona do treści tab. 6.4 zawierajacej tekstową dokumentację punktów pomiarowych instalacji. Tabelaryczny opis pomiarów jest powszechnie stosowany w praktyce przemysłowej, czego świadectwem jest plik "Lista zmiennych wonderware.xls" wchodzący w skład dokumentacji systemu Ames pracujacego w wytwórni wody mineralnej Cisowianka. Uzupełnienie tab. 6.4 o kolumny cycle i mode umożliwi automatyczną generację specyfikacji zmiennych mierzonych bezpośrednio z treści tej tabeli.

Specyfikacja stałych

Treść specyfikacji stałych (element <constants>) zawiera dane zawarte w tab. 6.5, uzupełnione o wartość stałej. Uzupełnienie wierszy opisujących stałe w tab. 6.5 o kolumnę value umożliwi automatyczną generację specyfikacji stałych bezpośrednio z treści tej tabeli.

Specyfikacja zmiennych obliczanych

Lista zmiennych mierzonych odzwierciedla istniejące oprzyrządowanie instalacji. Stworzenie specyfikacji zmiennych mierzonych wymaga wybrania i opisania zmiennych nadzorowanych przez system SMARP, spośród pomiarów udostępnianych przez sterowniki instalacji.

Lista zmiennych obliczanych ma inny charakter, ponieważ jej zawartość trzeba zaprojektować (wymyślić) stosownie do wymagań użytkownika. Pierwszym krokiem projektu może być identyfikacja maszyn opisywanych przez zmienne mierzone i opracowanie sposobu opisania stanu tych maszyn z dokładnością wystarczajacą do spełnienia wymagań użytkownika. Wyniki wykonania tego kroku dla prototypowej instalacji systemu SMARP są przedstawione w tab. 6.5 zawierającej tekstową dokumentację opisu maszyn. Treść specyfikacji zmiennych obliczanych (element <derived>) odzwierciedla dane zapisane w tej tablicy.

87

System Monitorowania, Analizy i Raportowania Produkcji Analiza treści tab. 6.5 pokazuje dużą powtarzalność opisu maszyn, który zawsze zawiera kod stanu, alarm zatrzymania używany do ustalenia przyczyny przestoju, a w przypadku maszyn o mierzonej produkcji także całkowitą wielkość produkcji osiagniętą w ciagu życia maszyny. Znajomość całkowitej produkcji maszyny umożliwia obliczenie produkcji osiągniętej podczas bieżącej zmiany. Wydaje się, że przedstawiony schemat opisu można zastosować do wszystkich maszyn, których produkcję można mierzyć. Schemat ten abstrahuje od parametrów technicznych charakteryzujących pracę maszyn, takich jak np. temperatura lub ciśnienie wewnątrz instalacji, i przedstawia tylko parametry charakteryzujące efektywność wykorzystania maszyn. Dane uwzględnione w proponowanym schemacie opisu, zarchiwizowane w bazie danych systemu, wystarczają również do sporządzenia raportów obrazujących rzeczywisty czas pracy maszyn, okresy i przyczyny awarii i przestojów oraz współczynniki OEE.

Schemat opisu maszyn obejmuje następujące zmienne (XX oznacza nazwę maszyny):

XX_state znormalizowany stan maszyny (INTEGER),XX_total produkcja całkowita maszyny (DOUBLE),XX_stop zmienna zgłaszająca alarm zatrzymania maszyny (SMALLINT),XX_stop_code kod przyczyny zatrzymania podany przez operatora z panelu,XX_shift produkcja maszyny w ciągu zmiany (DOUBLE),XX_total_0 produkcja całkowita na początku zmiany (zmienna pomocnicza).

Celowe wydaje się rozszerzenie tego zestawu o dwie dodatkowe zmienne:

XX_micro zmienna zgłaszająca alarm mikroprzestoju (SMALLINT),XX_micro_code kod przyczyny mikroprzestoju podany przez operatora z panelu.

Wykrycie mikroprzestoju (pokazane w tym przykładzie dla owijarki O1) można zrealizować korzystając z funkcji is_stoppage opisanej w rozdz. 5.6. Alarm mikroprzestoju jest obsługiwany podobnie do alarmu zatrzymania maszyny – powoduje wyświetlenie komunikatu na panelu operatora i odebraniu odpowiedzi określającej przyczynę incydentu.

Przedstawiony schemat opisu umożliwia opisywanie maszyn na kilku poziomach:

1. Opis każdej maszyny zawiera zmienną XX_state.

2. Jeżeli maszyna jest maszyną produkcyjną (jej produkcja jest mierzona) to opis takiej maszyny zawiera też zmienną XX_total.

3. Jeżeli system posiada panel operatora, to opis maszyny zawiera zmienną XX_stop, rejestrującą okresy zatrzymania, oraz XX_stop_code, określającą przyczynę postoju.

4. Jeżeli system posiada panel operatora, to opis maszyny może też obejmować zmienną XX_micro, rejestrującą mikroprzestoje, oraz XX_micro_code, określającą przyczynę.

5. Jeżeli system rejestruje zmiany robocze operatorów, to opis maszyny, zawiera zmienne XX_shift rejestrującą bieżącą produkcję zmiany.

Przyjęcie standardowego schematu opisu maszyny może pozwolić na częściową automatyzację procesu tworzenia specyfikacji systemu SMARP. Narzędziem automatyzacji mogą być formularze dokumentacyjne, analogiczne do tab. 6. 4 i 6.5.

Automatyzacja tworzenia specyfikacji

Pierwszym krokiem projektu systemu SMARP jest identyfikacja maszyn i linii produkcyjnych, wybór zmiennych mierzonych istotnych z punktu widzenia celów systemu oraz przypisanie wybranych zmiennych do maszyn. Określona w ten sposób struktura instalacji produkcyjnej powinna odzwierciedlać sposób percepcji instalacji przez

88

System Monitorowania, Analizy i Raportowania Produkcji użytkownika, a nazwy jej elementów powinny być zgodne z nazewnictwem stosowanym w dokumentacji systemu. Opis zmiennych mierzonych należy zapisać w tabelarycznym formularzu zmiennych mierzonych.

Drugim krokiem projektu jest opisanie struktury instalacji, która dzieli się na linie produkcyjne zbudowane z maszyn wykonujących określone zadania technologiczne. Maszyny mogą dalej dzielić się na zespoły, te na podzespoły itd. Opis instalacji należy zapisać w tabelarycznych formularzach struktury instalacji.

Wypełnione formularze umożliwiają automatyczne wygenerowanie kompletnych specyfikacji sensors i derived oraz szkieletów specyfikacji expressions i factory. Nazwy zmiennych mierzonych oraz nazwy elementów instalacji (linii, maszyn itd.) wymienione w specyfikacjach sensors i factory będą identyczne z nazwami używanymi w formularzach. Nazwy zmiennych obliczanych opisujących stan i produkcję maszyn zostaną określone automatycznie.

Formularz zmiennych mierzonych (załącznik 1, na końcu raportu)

Projektant systemu SMARP wypełnia oddzielny formularz dla każdego transpondera systemu. Formularz jest podzielony na wiersze odpowiadające zmiennym mierzonym, odczytywanym z instalacji i dostarczanym przez transponder do serwera, oraz kolumny odpowiadające atrybutom zmiennych. Pierwszy wiersz formularza, bez nazwy maszyny i z nazwą zmiennej default, określa domyślne wartości atrybutów. Wszystkie niewypełnione pola formularza przyjmują wartości domyślne. Drugi wiersz formularza, również bez nazwy maszyny, opisuje zmienną transpondera (numerator komunikatów), podając nazwę zmiennej (równą nazwie transpondera) w kolumnie Name i przedział podtrzymania transpondera (alive) w kolumnie Cycle. Kolejne wiersze opisują kolejne zmienne mierzone. Kolumny tabeli:

1. nazwa maszyny (M),2. nazwa zmiennej (Name),3. typ wartości zmiennej (Type) w systemie SMARP,4. rozmiar zmiennej (Size)5. tryb przetwarzania zmiennej (Mode),6. okres raportowania zmiennej (Cycle),7. okres próbkowania zmiennej (Sample),8. próg zmiany wartości (Delta),9. wartość początkowa zmiennej (Value),10. opis zmiennej (Comment),11. zmienna potrzebna do obliczenia stanu (S),12. zmienna potrzebna do obliczenia wielkości produkcji całkowitej (T).

Opis zmiennej złożonej (tablica lub rekord) jest taki sam jak opis zmiennej prostej i zajmuje jeden wiersz tabeli. Jeżeli zmienna złożona przyjmuje niezerowe wartości początkowe, to wartości te muszą być udokumentowane osobno.

Dane zapisane w kolumnach 2-10 formularza zmiennych mierzonych umożliwiają automatyczne wygenerowanie kompletnej specyfikacji wszystkich zmiennych mierzonych instalacji (specyfikacja sensors). Dane zapisane w kolumnach 1 (M), 11 (S) i 12 (T) są wykorzystywane podczas tworzenia list argumentów aktualnych zmiennych obliczanych.

89

System Monitorowania, Analizy i Raportowania Produkcji Porównując treść formularza zmiennych mierzonych z treścią dokumentacji zmiennych systemu Ames (plik "Lista zmiennych wonderware.xls") można zauważyć, jak niewiele te dokumenty różnią się od siebie. Ta niewielka różnica ilustruje niewielki rozmiar pracy ludzkiej, niezbędnej do przygotowania specyfikacji zmiennych mierzonych systemu SMARP.

Formularz struktury (załącznik 2, na końcu raportu)

Projektant systemu SMARP tworzy oddzielny formularz struktury dla każdego złożonego elementu instalacji produkcyjnej – całej instalacji, linii produkcyjnej itd. Konstrukcja formularza struktury jest dla wszystkich elementów taka sama. Przykładem może być formularz struktury linii butelkowania pokazany w załączniku 2.

Formularz struktury linii butelkowania jest podzielony na wiersze odpowiadające maszynom i kolumny odpowiadające atrybutom maszyn. Pierwszy wiersz formularza, z nazwą linii produkcyjnej w kolumnie Name, określa atrybuty linii. Kolejne wiersze opisują atrybuty kolejnych maszyn. Kolumny tabeli:

1. nazwa maszyny (Name),2. nazwa wyrażenia obliczającego stan maszyny (State),3. nazwa wyrażenia obliczającego wielkość produkcji całkowitej maszyny (Total),4. nazwa zmiennej, której wartością jest identyfikator operatora zmiany (OpId),5. znacznik rejestracji przyczyn zatrzymania maszyny (Stop),6. znacznik rejestracji przyczyn mikroprzestoju maszyny (Micro),7. opis maszyny (Comment),8. znacznik wskazujący, czy stan maszyny wpływa na stan linii (S),9. znacznik wskazujący, czy stan produkcja maszyny wpływa na produkcję linii (T).

Nazwy maszyny powinny być zgodne z nazewnictwem stosowanym w dokumentacji systemu. Nazwa maszyny jest oznaczana dalej jako XX.

Kolumna State zawiera nazwę wyrażenia obliczającego stan maszyny. Argumentami aktualnymi wyrażenia są zmienne maszyny, zapisane w formularzu zmiennych mierzonych z wartością znacznika S = yes. Wartością wyrażenia jest kod stanu, zapisany zgodnie z konwencją:

stan < 0 – stan pracy, stan 0 – stan zatrzymania (wyłączenia), stan > 0 – stan awarii.

Zmienna obliczana typu INTEGER przechowująca stan maszyny nosi nazwę XX_state. Pominięcie nazwy wyrażenia w kolumnie State powoduje przyjęcie nazwy domyślnej state_XX.

Jeżeli maszyna jest wyposażona w licznik produkcji, zliczający całkowitą produkcję maszyny od początku jej istnienia, to kolumna Total zawiera nazwę wyrażenia obliczającego wartość odczytaną z tego licznika. Argumentami aktualnymi wyrażenia są zmienne maszyny, zapisane w formularzu zmiennych mierzonych z znacznika T = yes. Zmienna obliczana typu DOUBLE przechowująca wielkość całkowitej produkcji maszyny nosi nazwę XX_total. Pominięcie nazwy wyrażenia w kolumnie Total oznacza, że wielkość całkowitej produkcji maszyny nie jest obliczana.

Dalsze kolumny formularza opisują przetwarzanie wymagające komunikacji z operatorem, realizowanej za pośrednictwem pulpitu.

Kolumna IdOp zawiera nazwę zmiennej mierzonej, której wartością jest identyfikator operatora zmiany. Zmiana wartości tej zmiennej sygnalizuje początek nowej zmiany roboczej

90

System Monitorowania, Analizy i Raportowania Produkcji i powoduje zapamiętanie aktualnej wielkości produkcji całkowitej, jako wartości pomocniczej zmiennej obliczanej o nazwie XX_total_0. Znajomość wielkości produkcji na początku zmiany umożliwia obliczenie bieżącej wielkości produkcji wytworzonej w ciągu zmiany. Obliczenie realizuje standardowe wyrażenie o nazwie shift_output. Argumentami aktualnymi wyrażenia są zmienne obliczane XX_total i XX_total_0. Zmienna obliczana typu DOUBLE przechowująca wielkość produkcji maszyny w ciągu zmiany nosi nazwę XX_shift. Pominięcie nazwy zmiennej w kolumnie IdOp oznacza, że wielkość produkcji maszyny w ciągu zmiany nie jest obliczana.

Kolumna Stop zawiera znacznik włączający alarm zatrzymania maszyny. Zmienną zgłaszającą alarmu jest zmienna o nazwie XX_stop, obliczana przez standardowe wyrażenie o nazwie state_stop. Argumentem aktualnym wyrażenia jest zmienna obliczana XX_state. Obsługa alarmu polega na wyświetleniu na panelu komunikatu o zatrzymaniu maszyny i odebraniu odpowiedzi operatora określającej kod przyczyny zatrzymania. Zmienna obliczana typu SMALLINT przechowująca kod zatrzymania nosi nazwę XX_stop_code. Wartość w kolumnie Stop inna niż 'yes' oznacza brak kontroli alarmu zatrzymania maszyny.

Kolumna Micro zawiera znacznik włączający alarm mikroprzestoju maszyny. Zmienną zgłaszającą alarmu jest zmienna o nazwie XX_micro, obliczana przez standardowe wyrażenie o nazwie micro_stop. Argumentami aktualnymi wyrażenia są zmienne obliczane XX_state i  XX_total, zmienna licznika czasu oraz stała określająca długość przedziału czasu, w którym powinna pojawić się zmiana wielkości produkcji maszyny. Obsługa alarmu polega na wyświetleniu na panelu komunikatu o mikroprzestoju maszyny i odebraniu odpowiedzi operatora określającej kod przyczyny przestoju. Zmienna obliczana typu SMALLINT przechowująca kod zatrzymania nosi nazwę XX_micro_code. Wartość w kolumnie Micro inna niż 'yes' oznacza brak kontroli alarmu mikroprzestoju maszyny.

Dane zapisane w formularzu struktury linii umożliwiają automatyczne wygenerowanie specyfikacji standardowych zmiennych obliczanych opisujących maszyny tej linii (specyfikacja derived) oraz stworzenie części specyfikacji struktury instalacji (specyfikacja factory). Linia butelkowania rozważana w tym przykładzie pełni rolę całej instalacji, dlatego jej opis został umieszczony w pierwszym wierszu formularza. Dane zapisane w tym wierszu oraz w kolumnach 8 (S) i 9 (T) pozostałych wierszy umożliwiają wygenerowanie specyfikacji standardowych zmiennych obliczanych opisujących stan i produkcję linii.

Podział zadań transponder – serwer

Specyfikacja zmiennych mierzonych prototypowej instalacji systemu SMARP zawiera bardzo dużą liczbę zmiennych binarnych, charakteryzujacych stan maszyn (np. zmiene nalewarki). Tak duża liczba zmiennych zwiększa objetość komunikatów transondera i obciąża serwer analizą tych zmiennych, specyficznych dla poszczególnych typów maszyn. Alternatywnym rozwiązaniem mogłoby być przetwarzanie zmiennych specyficznych dla maszyn w transponderze. Transponder przekazywałby do serwera przetworzoną informację o stanie maszyny, zakodowaną zgodnie ze standardową konwencją:

stan < 0 – stan pracy, stan 0 – stan zatrzymania (wyłączenia), stan > 0 – stan awarii.

Zaletą takiego rozwiązania byłoby zmniejszenie objetości komunikatów, uproszczenie specyfikacji systemu i usunięcie z serwera przetwarzania specyficznego dla konkretnego typu maszyny (funkcja state, rozdz. 5.6).

Podobnie, warte rozważenia jest przekazanie transponderowi zadania normalizacji wielkości produkcji maszyny produkcyjnej do wartości typu DOUBLE. Zaletą byłoby uproszczenie

91

System Monitorowania, Analizy i Raportowania Produkcji specyfikacji systemu i usunięcie z serwera przetwarzania specyficznego dla konkretnego typu maszyny.

92

System Monitorowania, Analizy i Raportowania Produkcji 7.Odbieranie danych z sieci Modbus

Transponder systemu SMARP monitoruje stan instalacji produkcyjnej korzystając z danych odczytywanych z własnych czujników, z serwera OPC lub z komunikatów transmitowanych w sieci urządzeń sterujących. W tym ostatnim przypadku transponder musi wydobyć dane procesowe z komunikatów podsłuchiwanych w sieci.

Celem tego rozdziału jest przedstawienie architektury sieci Modbus, opisanie sposobu dołączenia transpondera do sieci oraz przedstawienie koncepcji bezpośredniego podsłuchiwania komunikatów sieciowych przez transponder.

Alternatywnym rozwiązaniem problemu może być wykorzystanie przyłącza sieciowego wraz z oprogramowaniem pełniącym rolę serwera OPC. Zadaniem serwera jest tu odczytywanie danych z komunikatów i udostępnianie tych danych w sposób zgodny ze specyfikacją OPC. Gotowe rozwiązania tego rodzaju oferuje szereg producentów, np. Softing i Matrikon.

7.1. Architektura sieci ModbusModbus jest siecią przemysłową typu master-slave [11], w której urządzenie nadrzędne (master) odpytuje wiele urządzeń podporządkowanych (slave). Każde urządzenie posiada unikalny adres sieciowy. Komunikację inicjuje zawsze urządzenie nadrzędne, które wysyła komunikat zawierający adres urządzenia podporządkowanego, zapytanie o informację i sumę kontrolną. Komunikat jest widoczny dla wszystkich urządzeń w sieci, jednak interpretuje go i odpowiada na niego tylko urządzenie zaadresowane w treści komunikatu. Urządzenie podporządkowane nie może nadać komunikatu z własnej inicjatywy, a jedynie odpowiada na zapytania urządzenia nadrzędnego. Rolę urządzenia nadrzędnego pełni zwykle sterownik PLC, komputer PC lub stacja operatora procesu. Modułami podporządkowanymi mogą być sterowniki PLC, czujniki lub elementy wykonawcze systemu sterującego.

93

Rysunek 7.1. Konfiguracja sieci Modbus (master – kolor zielony, slave – kolor żółty)

System Monitorowania, Analizy i Raportowania Produkcji Transmisja znaków jest realizowana najczęściej w sposób asynchroniczny z wykorzystaniem połączeń RS-232 lub RS-485. Najczęściej spotykanym rodzajem medium transmisyjnego jest skrętka dwuprzewodowa, choć protokół dopuszcza też implementacje światłowodowe i bezprzewodowe. Bajty danych przesyłane w sieci mogą być kodowane na dwa sposoby:

ASCII – bajty kodowane szesnastkowo (dwa znaki ASCII na bajt), RTU – bajty kodowane binarnie.

Istnieją również wersje sieci wykorzystujące do transmisji danych sieć Ethernet. Implementacje oparte na sieci Ethernet dopuszczają zazwyczaj odpytywanie inicjowane przez dowolne urządzenie pracujące w sieci. Przykładowa konfiguracja sieci jest pokazana na rys. 7.1.

7.2. Połączenie z transponderemPodstawowym wymaganiem, jakie musi spełnić przyłącze transpondera do sieci Modbus jest brak ingerencji w pracę sieci, zarówno podczas poprawnej pracy transpondera, jak i podczas jego awarii. Wymaganie to można spełnić stosując bierne przyłącze do podsłuchiwanej sieci (sniffer passive tap). Przyłącze takie ani nie nadaje żadnego sygnału do sieci, ani nie uczestniczy aktywnie w przekazywaniu sygnału między węzłami sieci. Warunki te można spełnić w różny sposób dla różnej konfiguracji sieci.

1. Podsłuchiwanie dwupunktowego połączenia RS-232 między urządzeniem nadrzędnym (master) a urządzeniem podporządkowanym (rys. 7.2)

2. Podsłuchiwanie wielopunktowego połączenia RS-485 łączącego urządzenie nadrzędne (master) z urządzeniami podporządkowanymi (rys. 7.3).

3. Podsłuchiwanie połączenia TCP/IP między wybranymi bramami sieci Modbus.

Pasywne przyłącza do podsłuchiwania sieci RS 232 są oferowane przez różnych producentów, którzy zazwyczaj oferują również oprogramowanie monitorujące sieć RS 232. Od strony komputera podsłuchującego (transponder) przyłącze posiada często interfejs USB. Przykładem szeroko stosowanego biernego przyłącza może być urządzenie EZ-Tap firmy Stratus Engineering [12] dostępne w cenie ok. $160 wraz z oprogramowaniem dla systemów Microsoft Windows. Transponder systemu SMARP musi być wyposażony w oprogramowanie potrafiące analizować ramki sieci Modbus.

Sieć RS 485 jest siecią wielopunktową, do której można dołączyć transponder jako dodatkowy węzeł, korzystając w tym celu ze standardowego przyłącza sieci RS 485. Przyłącza takie są oferowane przez wielu dostawców. Niektórzy z nich, np. wspomniana

94

5 U

Sterownik PLC (slave) HMI (master)

RS 232

Transponder systemu SMARP

Tap

Rysunek 7.2. Podsłuchiwanie sieci Modbus w połączeniu szeregowym RS 232

System Monitorowania, Analizy i Raportowania Produkcji firma Stratus Engineering, oferują również przyłącza pasywne, pozbawione możliwości nadawania, które gwarantują brak ingerencji transpondera w pracę sieci. Podobnie, jak w poprzednim przypadku, transponder systemu SMARP musi być wyposażony w oprogramowanie potrafiące analizować ramki sieci Modbus.

W przypadku podsłuchiwania połączenia TCP/IP między wybranymi sieci bramami Modbus, transponder dołącza się do sieci przez dodatkową kartę Ethernet. Karta musi być ustawiona w tryb nasłuchiwania (Promiscuous mode), w którym przyjmuje wszystkie pakiety sieciowe bez względu na ich adresy docelowe (nie odrzuca pakietów adresowanych do innych kart). W trybie nasłuchiwania karta nie nadaje też żadnych pakietów i tym samym nie ingeruje w prace podsłuchiwanej sieci. Transponder systemu SMARP musi być wyposażony w oprogramowanie typu sniffer potrafiące analizować pakiety TCP/IP oraz w oprogramowanie analizujące ramki sieci Modbus.

7.3. Odwzorowanie typów danychStandard sieci Modbus nie używa pojęcia typu danych. Przedmiotem komunikacji są zmienne 1-bitowe i 16-bitowe, zgrupowane w czterech odrębnych przestrzeniach adresowych:

wejść bitowych (discrete inputs), wyjść bitowych (coils), rejestrów wejściowych (input registers), rejestrów wyjściowych (holding registers).

Sposób interpretacji znaczenia wartości 16-bitowych rejestrów nie jest zdefiniowany i zależy od urządzeń uczestniczących w komunikacji. Wszystkie zmienne są odrębnie adresowane (numerowane) w ramach swojej przestrzeni adresowej. W sieci mogą być też przesyłane identyfikatory urządzeń, zapisane jako ciągi znaków ASCII. Sieć Modbus nie posiada żadnego mechanizmu definiowania i odczytywania typu przekazywanych danych.

Nowsze implementacje sieci Modbus wychodzą często poza standard i dopuszczają również rejestry 8-bitowe i 32-bitowe oraz liczby rzeczywiste.

Sposób odwzorowania poszczególnych rodzajów danych sieci Modbus na typy danych systemu SMARP podaje tab. 7.1.

Przedmiotem komunikacji w sieci mogą być zarówno wartości pojedynczych zmiennych, jak i ciągi wartości wielu kolejnych zmiennych tego samego rodzaju. Jeżeli zmienne wchodzące

95

Rysunek 7.3. Podsłuchiwanie sieci Modbus w połączeniu szeregowym RS 485

5 U

Sterownik PLC (slave)

HMI (master)

RS 485

Transponder systemu SMARP

5 U ... ...

Sterownik PLC (slave)

System Monitorowania, Analizy i Raportowania Produkcji w skład ciągu wartości są logicznie związane i przekazywane zawsze łącznie, to celowe może być odwzorowanie takiego ciągu wartości na tablicę systemu SMARP. W takim przypadku ciąg wartości 1-bitowych może zostać odwzorowany na typ danych VARBINARY, a ciąg wartości 16-bitowych na tablicę zmiennych typu SMALLINT.

Tablica 7.1. Odwzorowanie typów danych Modbus na typy danych systemu SMARP

Modbus SMARP UwagiWartość 1-bitowa TINYINT Modbus: wartość 16-bitowaRejestr 8-bitowy TINYINTRejestr 16-bitowy SMALLINTRejestr 32 -bitowy INTEGERFloating Point REALCiąg wartości 1-bitowych BINARY ( n )Ciąg wartości 16-bitowych tablica SMALLINT

7.4. Funkcje sieci ModbusZmienne rezydujące w różnych przestrzeniach adresowych są udostępniane w sieci Modbus za pomocą różnych funkcji komunikacyjnych. Oprócz funkcji publicznych (standardowych) mogą też istnieć funkcje zdefiniowane przez użytkownika. Każda funkcja jest wywoływana przez urządzenie nadrzędne (master) a wykonywana przez urządzenie podrzędne (slave). Standardowe funkcje protokołu Modbus są zebrane w tab. 7.2.

Tablica 7.2. Zestawienie standardowych funkcji protokołu Modbus

Typ funkcji FunkcjaNazwa Kod Subkod

Dostęp do

danych

Dostęp w trybie bitowym

Wejścia bitowe Read Discrete Inputs 0x02

Wyjścia bitoweRead Coils 0x01Write Single Coil 0x05Write Multiple Coils 0x0F

Dostęp w trybie

słowa 16-bitowego

Rejestry wejściowe Read Input Register 0x04

Rejestry wyjściowe

Read Holding Registers 0x03Write Single Register 0x06Write Multiple Registers 0x10Read/Write Multiple Registers 0x17Mask Write Register 0x16Read FIFO queue 0x18

Dostęp do rekordów plików Read File Record 0x14Write File Record 0x15

Diagnostyka

Read Exception Status 0x07Diagnostic 0x08 00-18, 20Get Com Event Counter 0x0BGet Com Event Log 0xOCReport Server ID 0x11Read Device Identification 0x2B 14

Różne Encapsulated Interface Transport 0x2B 13, 14CanOpen General Reference 0x2B 13

96

System Monitorowania, Analizy i Raportowania Produkcji Szczegółowy opis funkcji standardowych, obejmujący format wywołania, format odpowiedzi oraz sposób sygnalizacji błędu wykonania przez urządzenie podporządkowane jest przedstawiony w tab. 7.3.

Tablica 7.3. Opis standardowych funkcji protokołu Modbus

97

System Monitorowania, Analizy i Raportowania Produkcji Kod Nazwa i opis Format danych0x01 Read Coils

– odczyt grupy wyjść bitowych

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x01Adres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba wyjść (2 bajty) – 1 do 2000Kod funkcji (1 bajt) – 0x01Liczba bajtów (1 bajt) Wartość (n bajtów) – 0=wyłączone / 1=włączoneKod funkcji (1 bajt) – 0x81Kod błędu (1 bajt) – 01, 02, 03, 04

0x02 Read Discrete Inputs – odczyt grupy wejść bitowych

Wywołanie:

Odpowiedź:

Błędy

Kod funkcji (1 bajt) – 0x02Adres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba wejść (2 bajty) 1 to 2000Kod funkcji (1 bajt) – 0x02Liczba bajtów (1 bajt) Stan wejścia (n bajtów) – 0=wyłączone / 1=włączone)Kod funkcji (1 bajt) – 0x82Kod błędu (1 bajt) – 01, 02, 03, 04

0x03 Read Holding Registers – odczyt grupy rejestrów wyjściowych

Wywołanie:

Odpowiedź:

Błędy

Kod funkcji (1 bajt) – 0x03Adres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba rejestrów (2 bajty) – 1 do 125Kod funkcji (1 bajt) – 0x03Liczba bajtów (1 bajt n = 2 liczba rejestrów) Wartość rejestrów (n bajtów)Kod funkcji (1 bajt) – 0x83Kod błędu (1 bajt) – 01, 02, 03, 04

0x04 Read Input Registers – odczyt grupy rejestrów wejściowych

Wywołanie:

Odpowiedź:

Błędy

Kod funkcji (1 bajt) – 0x04Adres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba rejestrów (2 bajty) – 1 do 125Kod funkcji (1 bajt) – 0x04Liczba bajtów (1 bajt n = 2 liczba rejestrów)Wartość rejestrów (n bajtów)Kod funkcji (1 bajt) – 0x84Kod błędu (1 bajt) – 01, 02, 03, 04

0x05 Write Single Coil – zapis wyjścia1-bitowego

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x05Adres zapisu (2 bajty) – 0x0000 do 0xFFFFWartość wyjściowa (2 bajty) – 0x0000=wyłączone / 0xFF00=włączoneKod funkcji (1 bajt) – 0x05Adres wyjściowy (2 bajty) – 0x0000 do 0xFFFFWartość wyjściowa (2 bajty) – 0x0000=wyłączone / 0xFF00=włączoneKod funkcji (1 bajt) – 0x85Kod błędu (1 bajt) – 01, 02, 03, 04

0x06 Write Single Register – zapis rejestru wyjściowego

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x06Adres rejestru (2 bajty) – 0x0000 do 0xFFFFWartość rejestru (2 bajty) – 0x0000 do 0xFFFFKod funkcji (1 bajt) – 0x06Adres rejestru (2 bajty) – 0x0000 do 0xFFFFWartość rejestru (2 bajty) – 0x0000 do 0xFFFFKod funkcji (1 bajt) – 0x86Kod błędu (1 bajt) – 01, 02, 03, 04

0x07 Read Exception Status – odczyt błędu

Wywołanie:Odpowiedź:

Kod funkcji (1 bajt) – 0x07Kod funkcji (1 bajt) – 0x07Wartość wyjściowa (1 bajt) – 0x00 do 0xFF

98

System Monitorowania, Analizy i Raportowania Produkcji (tylko połączenie

szeregowe)

Błędy: Kod funkcji (1 bajt) – 0x87Kod błędu (1 bajt) – 01, 04

0x08 Diagnostics – test diagnostyczny (tylko połączenie

szeregowe)

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x08Subkod funkcji (2 bajty) – 0x0000 do 0xFFFFDane (2 x n bajtów)Kod funkcji (1 bajt) – 0x08Kod sub-funkcji (2 bajty)Dane (2 x n bajtów)Kod funkcji (1 bajt) – 0x88Kod błędu (1 bajt) – 01, 03, 04

0x0B Get Comm Event Counter – odczyt licznika zdarzeń (tylko połączenie szeregowe)

Wywołanie:Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x0BKod funkcji (1 bajt) – 0x0BStatus (2 bajty) – 0x0000 do 0xFFFFLiczba zdarzeń (2 bajty) – 0x0000 do 0xFFFFKod funkcji (1 bajt) – 0x8CKod błędu (1 bajt) – 01, 04

0x0C Get Comm Event Log – pobranie logów zdarzeń (tylko połączenie szeregowe)

Wywołanie:Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x0CKod funkcji (1 bajt) – 0x0CLiczba bajtów (1 bajt = liczba zdarzeń + 6)Status (2 bajty) – 0x0000 do 0xFFFFLiczba zdarzeń (2 bajty) – 0x0000 do 0xFFFFLiczba wiadomości (2 bajty) – 0x0000 do 0xFFFFZdarzenia (n-6 bajtów)Kod funkcji (1 bajt) – 0x8DKod błędu (1 bajt) – 01, 04

0x0F Write Multiple Coils – zapis grupy wyjść bitowych

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x0FAdres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba wyjść (2 bajty) – 0x0001 do 0x07B0Liczba bajtów (1 bajt) Wartość wyjściowa (n bajtów)Kod funkcji (1 bajt) – 0x0FAdres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba wyjść (2 bajty) – 0x0001 do 0x07B0Kod funkcji (1 bajt) – 0x8FKod błędu (1 bajt) – 01, 02, 03, 04

0x10 Write Multiple registers – zapis grupy rejestrów wyjściowych

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x10Adres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba rejestrów (2 bajty) – 0x0001 do 0x007BLiczba bajtów (1 bajt n = 2 liczba rejestrów)Wartość rejestrów (n bajtów)Kod funkcji (1 bajt) – 0x10Adres początkowy (2 bajty) – 0x0000 do 0xFFFFLiczba rejestrów (2 bajty) – 1 do 123Kod funkcji (1 bajt) – 0x90Kod błędu (1 bajt) – 01, 02, 03, 04

0x11 Report Slave ID – identyfikacja urządzenia Slave

Wywołanie:Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x11Kod funkcji (1 bajt) – 0x11Liczba bajtów (1 bajt)Identyfikator urządzenia slaveStatus urządzenia (1 bajt) – 0x00 = wyłączony, 0xFF = włączonyDane dodatkowe (nieokreślone)Kod funkcji (1 bajt) – 0x91Kod błędu (1 bajt) – 01, 04

99

System Monitorowania, Analizy i Raportowania Produkcji 0x14 Read File

Record – odczytanie rekordu pliku

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x14Liczba bajtów (1 bajt) – 0x07 do 0xF5Typ referencji (1 bajt) – 0x06Numer pliku (2 bajty) – 0x0001 do 0xFFFFNumer rekordu (2 bajty) – 0x0000 do 0x270FDługość rekordu (2 bajty) – nKod funkcji (1 bajt) – 0x14Długość odpowiedzi (1 bajt) – 0x07 do 0xF5Długość odpowiedzi pliku (1 bajt) – 0x07 do 0xF5Typ referencji (1 bajt) – 6Rekord danych (2 x n bajtów)Kod funkcji (1 bajt) – 0x94Kod błędu (1 bajt) – 01, 02, 03, 04, 08

0x15 Write File Record – zapis rekordu pliku

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x15Długość żądania (1 bajt) – 0x09 do 0xFBTyp referencji (1 bajt) – 0x06Numer pliku (2 bajty) – 0x0001 do 0xFFFFNumer rekordu (2 bajty) – 0x0000 do 0x270FDługość rekordu (2 bajty) – nDane rekordu (2 x n bajtów)Kod funkcji (1 bajt) – 0x15Długość odpowiedzi (1 bajt) – 0x09 do 0xFBTyp referencji (1 bajt) – 06Numer pliku (2 bajty) – 0x0001 do 0xFFFFNumer rekordu (2 bajty) – 0x0000 do 0x270FDługość rekordu (2 bajty) – nDane rekordu (2 x n bajtów)Kod funkcji (1 bajt) – 0x95Kod błędu (1 bajt) – 01, 02, 03, 04, 08

0x16 Mask Write Register – zapis rejestru wyjściowego jako kombinacji sumy i iloczynu bitowego obecnej i nowej wartości

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x16Adres referencji (2 bajty) – 0x0000 do 0xFFFFMaska AND (2 bajty) – 0x0000 do 0xFFFFMaska OR (2 bajty) – 0x0000 do 0xFFFFKod funkcji (1 bajt) – 0x16Adres referencji (2 bajty) – 0x0000 do 0xFFFFMaska AND (2 bajty) – 0x0000 do 0xFFFFMaska OR (2 bajty) – 0x0000 do 0xFFFFKod funkcji (1 bajt) – 0x96Kod błędu (1 bajt) – 01, 02, 03, 04

0x17 Read/Write Multiple Registers – odczyt i zapis grupy rejestrów wyjściowych w ramach jednej transakcji

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x17Adres początkowy odczytu (2 bajty) – 0x0000 do 0xFFFFLiczba rejestrów do odczytu (2 bajty) – 1 do 125Adres początkowy zapisu (2 bajty) – 0x0000 do 0xFFFFLiczba rejestrów do zapisu (2 bajty) – 1 do 125Liczba bajtów do zapisu (1 bajt n = 2 liczba rejestrów) Zawartość rejestrów do zapisu (n bajtów)Kod funkcji (1 bajt) – 0x17Liczba bajtów (1 bajt m = 2 liczba rejestrów)Zawartość rejestrów do odczytu (m bajtów)Kod funkcji (1 bajt) – 0x97Kod błędu (1 bajt) – 01, 02, 03, 04

0x18 Read FIFO Queue – odczyt kolejki FIFO

Wywołanie:

Odpowiedź:

Kod funkcji (1 bajt) – 0x18Adres kolejki FIFO (2 bajty) – 0x0000 do 0xFFFFKod funkcji (1 bajt) – 0x18Liczba bajtów (2 bajty)

100

System Monitorowania, Analizy i Raportowania Produkcji

Błędy:

Liczba kolejek FIFO (2 bajty) – nWartość rejestrów FIFO (2 n bajtów)Kod funkcji (1 bajt) – 0x98Kod błędu (1 bajt) – 01, 02, 03, 04

0x2b Encapsulated Interface Transport – mechanizm enkapsulacji (tunelowania danych)

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x2bTyp interfejsu MEI (1 bajt) – 0x0D lub 0x0EDane interfejsu MEI (n bajtów)Kod funkcji (1 bajt) – 0x2bTyp interfejsu MEI (1 bajt) – 0x0D lub 0x0EDane interfejsu MEI (n bajtów)Kod funkcji (1 bajt) – 0xABKod błędu (1 bajt) – 01, 02, 03, 04

0x2B, 0x0E

Read Device Identification – odczytanie informacji o urządzeniu

Wywołanie:

Odpowiedź:

Błędy:

Kod funkcji (1 bajt) – 0x2bTyp interfejsu MEI (1 bajt) – 0x0EIdentyfikator urządzenia (1 bajt) – 01 / 02 / 03 / 04Identyfikator obiektu (1 bajt) – 0x00 do 0xFFKod funkcji (1 bajt) – 0x2bTyp interfejsu MEI (1 bajt) – 0x0EIdentyfikator urządzenia (1 bajt) – 01 / 02 / 03 / 04Poziom zgodności (1 bajt) – 0x01, 0x02, 0x03, 0x81, 0x82, 0x83Więcej danych (1 bajt) – 00 (nie) / FF (tak)Identyfikator następnego obiektu (1 bajt)Liczba obiektów (1 bajt)Lista: Identyfikator obiektu (1 bajt) Wielkość obiektu (1 bajt) Wartość obiektu (zależna od obiektu)Kod funkcji (1 bajt) – 0xABKod błędu (1 bajt) – 01, 02, 03, 04

7.5. Format ramki sieci ModbusRamka protokołu Modbus określa format przesyłanych wiadomości i zawiera:

znacznik początku i końca (dla transmisji w trybie znakowym ASCII lub binarnym RTU) lub identyfikator transakcji dla transmisji poprzez TCP/IP;

adres odbiorcy;

kod funkcji określający polecenie do wykonania;

dane (parametry wywoływanej funkcji lub odpowiedź od węzła podrzędnego);

sumę kontrolną – występuje tylko dla transmisji w trybie znakowym ASCII lub binarnym RTU; dla transmisji TCP/IP jest obliczana oddzielnie w warstwie 2 (Ethernet), w warstwie 3 (protokół IP) oraz warstwie 4 (protokół TCP).

Treść pól, która zależy od sposobu transmisji, jest podana w tab. 7.4 - 7.6.

Tablica 7.4. Ramka Modbus w trybie binarnym RTUNazwa pola Długość Opis

Znacznik początku 3.5xTz Odstęp czasowy trwający minimum 3.5 razy czas transmisji pojedynczego znaku

Adres odbiorcy 8 bitów Adres jednostki (węzła)

101

System Monitorowania, Analizy i Raportowania Produkcji Kod funkcji 8 bitów Kod funkcjiDane n x 8 bitów Argumenty funkcji lub odpowiedź od Slave’aSuma CRC 16 bitów Cykliczny kod nadmiarowy używany do wykrywanie błędów

transmisjiZnacznik końca 3.5xTz Odstęp czasowy trwający minimum 3.5 razy czas transmisji

pojedynczego znaku

Cechy transmisji binarnej RTU:

struktura znaku: 1 bit startu, 8 bitów danych (od najmniej znaczącego do najbardziej znaczącego bitu), 1 bit kontroli parzystości (lub bit stopu w przypadku gdy kontrola parzystości nie została zaimplementowana) oraz 1 bit stopu,

odstępy pomiędzy kolejnymi znakami nie przekraczają 1,5 Tz (czas transmisji znaku),

ramka jest poprzedzona i zakończona czasem odstępem T nie krótszym niż 3,5 Tz.

Tablica 7.5. Ramka Modbus w trybie znakowym ASCIINazwa pola Długość Opis

Znacznik początku 1 znak Ramka zaczyna się znakiem dwukropka „:” – 0x3AAdres 2 znaki Adres jednostki (węzła)Funkcja 2 znaki Kod funkcjiDane n znaków Argumenty funkcji lub odpowiedź od Slave’aSuma LRC 2 znaki Kontrola wzdłużna używana do wykrywanie błędów transmisjiZnacznik końca 2 znaki Ramka kończy się znakiem powrotu karetki CR i nowej linii LF

– 0xOD i 0x0A

Cechy transmisji w trybie znakowym ASCII:

bajty są kodowane szesnastkowo (po dwa znaki na 1 bajt) – przykładowo bajt 0x5B jest kodowany jak dwa znaki: 0x35 oraz 0x42,

organizacja jednostki informacyjnej: 1 bit startu, 7 bitów danych (od najmniej znaczącego do najbardziej znaczącego bitu), 1 bit kontroli parzystości (lub bit stopu w przypadku gdy kontrola parzystości nie została zaimplementowana) oraz bit stopu.

Tablica 7.6. Ramka Modbus w trybie transmisji TCP/IPNazwa pola Długość Opis

Identyfikator transakcji 2 bajty Używany do synchronizacji wiadomości między serwerem i klientem

Identyfikator protokołu 2 bajty 0 dla Modbus TCPDługość 2 bajty Liczba bajtów pozostałych w danej ramceIdentyfikator jednostki 1 bajt Adres jednostki (węzła), 255 jeśli nie używanyFunkcja 2 znaki Kod funkcjiDane 2 znaki Argumenty funkcji lub odpowiedź od Slave’a

Cechy transmisji w trybie TCP/IP:

komunikacja w architekturze klient-serwer (węzeł nadrzędny jest klientem, a węzły podporządkowane pełnią rolę serwerów),

transmisja realizowana przy użyciu protokołu TCP/IP poprzez łącza sieci Ethernet,

102

System Monitorowania, Analizy i Raportowania Produkcji duża wydajność,

wysoki współczynnik korekcji błędów,

gwarancja dostarczenia wszystkich pakietów w całości, z zachowaniem kolejności i bez duplikatów,

mały stopień obciążenia danych własnymi strukturami,

niezależność od platformy.

103

System Monitorowania, Analizy i Raportowania Produkcji 8.Odbieranie danych z sieci Profibus

Profibus jest popularną siecią przemysłową, szeroko stosowaną w rozproszonych systemach sterowania i nadzoru zarówno w warstwie połączeń sterowników PLC (Profibus FMS), jak i w warstwie połączeń sterownika z czujnikami i elementami wykonawczymi (Profibus DP). Transponder systemu SMARP może odbierać dane procesowe transmitowane między urządzeniami systemu sterującego podsłuchując komunikaty, bez ingerowania w pracę sieci.

Alternatywnym rozwiązaniem problemu może być wykorzystanie przyłącza sieciowego wraz z oprogramowaniem pełniącym rolę serwera OPC. Zadaniem serwera jest tu odczytywanie danych z komunikatów i udostępnianie tych danych w sposób zgodny ze specyfikacją OPC. Gotowe rozwiązania tego rodzaju oferuje szereg producentów, np. Softing i Matrikon.

8.1. Architektura sieci ProfibusDefinicja sieci obejmuje protokoły warstwy fizycznej, liniowej i aplikacyjnej siedmiowarstwowego modelu ISO. Wszystkie protokoły są zdefiniowane w normie DIN 19245 [13,14], są również częścią późniejszej normy IEC 61158.

Warstwa fizyczna transmituje bity danych z wykorzystaniem łącza RS-485. Najczęściej spotykanym rodzajem medium transmisyjnego jest skrętka dwuprzewodowa, choć protokół dopuszcza też implementacje światłowodowe i bezprzewodowe.

Definicja warstwy liniowej FDL (Fieldbus Data Layer) określa protokół dostępu do kabla, który decyduje o czasowych właściwościach sieci, oraz protokół komunikacyjny, który definiuje strukturę komunikatów. Protokół dostępu dzieli węzły sieci na nadrzędne (master), które mogą nadawać komunikaty z własnej inicjatywy, oraz podporządkowane (slave), które mogą tylko odpowiadać na zapytania węzłów nadrzędnych. Węzły nadrzędne dzielą między siebie czas pracy sieci zgodnie z protokołem przekazywania znacznika. Węzeł, który otrzyma znacznik, może przez pewien czas nadawać komunikaty do innych węzłów nadrzędnych lub odpytywać przypisane do niego węzły podporządkowane.

Protokół komunikacyjny definiuje binarny sposób kodowania znaków transmitowanych w sposób asynchroniczny oraz określa strukturę ramki, która może składać się z co najwyżej 255 znaków. Struktura ramki zależy od jej przeznaczenia. Ramki przenoszące dane podczas odpytywania mają zmienną długość i zawierają następujące pola:

znaczniki początku (łącznie 2 bajty), długość pola danych, powtórzona z zanegowaniem wszystkich bitów (łącznie 2 bajty), adresy odbiorcy i nadawcy (łącznie 2 bajty), kod funkcji (1 bajt), dane (co najwyżej 246 bajtów), suma kontrolna (2 bajty CRC), znacznik końca (1 bajt).

Warstwa liniowa udostępnia bezpołączeniowe usługi przekazywania danych, które mogą być wywoływane przez węzły nadrzędne:

nadanie danych bez potwierdzenia (SDN), nadanie danych z potwierdzeniem, odpytanie (SRD), cykliczne odpytywanie (CSRD),

104

System Monitorowania, Analizy i Raportowania Produkcji Definicja warstwy aplikacyjnej FMS (Fieldbus Message Specification) określa model komunikacji typu klient – serwer, w którym pasywne serwery (węzły typu slave) udostępniają swoje zasoby aktywnym klientom (węzły typu master). Zasobami, które mogą stać się przedmiotem komunikacji są wartości zmiennych, informacje o wystąpieniu alarmów oraz dane zebrane w buforowych obszarach pamięci. Klienci odwołują się do zasobów serwerów za pomocą ustandaryzowanego zestawu usług sieciowych. Protokół FMS jest protokołem połączeniowym, który gwarantuje niezawodne wykonanie wynegocjowanego zestawu usług.

Definicja warstwy aplikacyjnej DP (Decentralized Peripherals) definiuje ograniczoną konfigurację sieci, w której występuje tylko jeden węzeł nadrzędny, odpytujący węzły podporządkowane. Podstawowym trybem pracy sieci jest bardzo szybka, cykliczna wymiana danych między węzłem nadrzędnym, a węzłami podporządkowanymi. Taka konfiguracja sieci odpowiada funkcjonalnie połączeniu jednostki centralnej sterownika z rozproszonymi układami sprzęgu procesowego. Protokół komunikacyjny definiuje zestaw funkcji wywoływanych przez węzeł nadrzędny, które są realizowane przez bezpołączeniowe usługi warstwy liniowej. Podstawowe funkcje umożliwiają odczytanie wejść lub zapisane wyjść węzła podrzędnego.

Protokół sieci Profibus dopuszcza konfigurację, w której logicznie rozłączne sieci współdzielą to samo medium transmisyjne (wykorzystują ten sam kabel). W każdym przypadku, urządzenia korzystające z tego samego medium muszą posiadać unikalny adres sieciowy.

8.2. Połączenie z transponderemWarstwa fizyczna sieci Profibus wykorzystuje wielopunktowy protokół RS 485. Dołączenie transpondera do sieci można więc zrealizować w sposób analogiczny do przedstawionego na rys. 7.3. Podobnie, jak w tamtym przypadku, transponder systemu SMARP musi być wyposażony w oprogramowanie potrafiące analizować ramki sieci Profibus. Pewnym problemem tego wariantu rozwiązania jest fakt, że sposób interpretacji danych przenoszonych w polu danych ramki zależy od poziomu protokołu i jest inny na poziomie warstwy liniowej (Profibus FDL, Profibus DP), a inny na poziomie warstwy aplikacyjnej (Profibus DP).

8.3. Odwzorowanie typów danychStandard Profibus FMS definiuje zestaw 14 typów danych prostych oraz dwóch typów złożonych. Sposób odwzorowania standardowych typów danych sieci Profibus FMS na typy danych systemu SMARP podaje tab. 8.1. Typy złożone są odwzorowane następująco:

tablica danych sieci Profibus jest odwzorowana na tablicę systemu SMARP, rekord danych sieci Profibus jest odwzorowana na rekord systemu SMARP.

Tablica 8.1. Odwzorowanie typów danych Profibus FMS na typy danych systemu SMARP

Profibus SMARP Uwagi1 Boolean TINYINT Profibus: 1 bajt2 Integer8 TINYINT3 Integer16 SMALLINT4 Integer32 INTEGER5 Unsigned8 TINYINT6 Unsigned16 SMALLINT

105

System Monitorowania, Analizy i Raportowania Produkcji 7 Unsigned32 INTEGER8 Floating Point REAL9 Visible String CHAR ( n )10 Octet String BINARY ( n )11 Date DATETIME12 Time of Day TIME13 Time Difference INTEGER liczba sekund14 Bit String BINARY ( n ) bity pakowane po 8

Dane przesyłane w sieci Profibus DP i FDL są ciągami bajtów, których interpretacja zależy od urządzenia. W zastosowaniach, w których węzłami sieci są sterowniki PLC programowane w językach zgodnych z normą IEC 61131-3 [15], strukturę danych określa zestaw typów danych zdefiniowanych w tej normie. Sposób odwzorowania standardowych typów danych zdefiniowanych w normie IEC 61131 na typy danych systemu SMARP jest pokazane w tab. 8.2. Typy złożone są odwzorowane następująco:

jednowymiarowa tablica IEC 61131 jest odwzorowana na tablicę systemu SMARP, struktura danych IEC 61131 jest odwzorowana na rekord systemu SMARP.

Wielowymiarowe tablice IEC 61131 nie są reprezentowane w systemie SMARP; jeśli wystąpi konieczność przekazania takich danych, to zostaną one przekształcone do postaci tablicy jednowymiarowej.

Tablica 8.2. Odwzorowanie typów danych IEC 61131 na typy danych systemu SMARP

IEC 61131 SMARP Uwagi1 BOOL TINYINT2 SINT TINYINT3 INT SMALLINT4 DINT INTEGER5 LINT BIGINT6 USINT TINYINT7 UINT SMALLINT8 UDINT INTEGER9 ULINT BIGINT10 REAL REAL11 LREAL DOUBLE12 TIME INTEGER czas trwania w sekundach13 DATE DATE14 TIME_OF_DAY TIME15 DATE_AND_TIME DATETIME16 STRING VARCHAR ( n )17 BYTE TINYINT18 WORD SMALLINT

19 (6) DWORD INTEGER20 LWORD BIGINT

106

System Monitorowania, Analizy i Raportowania Produkcji 9.Odwzorowanie danych serwera OPC UA

Serwer OPC (rys. .1) pełni rolę bramy pośredniczącej w wymianie danych między urządzeniami systemu sterującego instalacją produkcyjną, a urządzeniami pracującymi w warstwie biznesowej przedsiębiorstwa. Źródłami danych dla serwera OPC mogą być urządzenia procesowe oraz inne obiekty, np. bazy danych itp. Komunikacja urządzeń sieci korporacyjnej z serwerem OPC odbywa się zgodnie z modelem klient-serwer, w którym serwer OPC pełni rolę serwera, a klientami są komputery sieci korporacyjnej.

Sposób realizacji serwera OPC i wykorzystania go przez transponder systemu SMARP może być dwojaki. W pierwszym wariancie realizacji serwer OPC może być odrębnym urządzeniem (komputerem), dołączonym do sieci przemysłowej oraz do sieci Internet przez odpowiednie karty sieciowe. Oprogramowanie serwera odczytuje i magazynuje dane przekazywane w sieci przemysłowej oraz udostępnia je transponderowi za pośrednictwem usług wywoływanych przez łącze internetowe.

Druga możliwość polega na wyposażeniu transpondera SMARP w kartę sieci przemysłowej i oprogramowanie realizujące funkcje serwera OPC1. Sposób wykorzystania tak zrealizowanego serwera OPC przez transponder różni się od poprzedniego wariantu jedynie sposobem wywołania usług serwera. Warto zauważyć, że wykorzystanie tego wariantu usuwa konieczność podsłuchiwania sieci przemysłowej w sposób opisany w rozdz. 6 i 8, i umożliwia połączenie transpondera z dowolna siecią przemysłową za pomocą tego samego mechanizmu programistycznego.

9.1. Architektura klienta i serwera OPCArchitektura serwera OPC [16] jest określona przez standard OPC UA, który definiuje interfejs usług świadczonych przez serwer na rzecz klientów, w sposób niezależny od technologii implementacyjnej. Usługi są wywoływane przez wiadomości kierowane przez klienta do serwera, a rezultaty usług są przekazywane przez wiadomości skierowane od serwera do klienta. Standard definiuje też protokoły transportowe:

OPC UA TCP SOAP/HTTP SOAP/HTTPS

oraz sposoby kodowania danych:

XML/text UA binarny

Klient OPC (Client Application) wykorzystuje interfejs programowy OPC UA Client API do wywoływania usług serwera. Interfejs izoluje kod klienta od oprogramowania komunikacyjnego (OPC UA Communication Stack) pośredniczącego w wywoływaniu usług i odbieraniu odpowiedzi serwera OPC. Zarówno wywołania usług, jak i odpowiedzi serwera są zdefiniowane w sposób abstrakcyjny i ich szczegółowa postać zależy od implementacji. Również sposób implementacji oprogramowania komunikacyjnego zależy od producenta.

Architektura klienta OPC UA oraz miejsce stosu komunikacyjnego w jego strukturze są pokazane na rys. 9.1.

1 Produkty tego rodzaju dla popularnych sieci przemysłowych, takich jak Modbus i Profibus, są oferowane na rynku przez szereg producentów, np. firmy Softing i Matrikon.

107

System Monitorowania, Analizy i Raportowania Produkcji

Serwer OPC (Server Application) wykorzystuje interfejs programowy OPC UA Server API do przyjmowania wywołań usług od klienta. Interfejs ten izoluje kod serwera od oprogramowania komunikacyjnego (OPC UA Communication Stack) przenoszącego wywołania usług od klienta do serwera i odpowiedzi od serwera do klienta. Architektura klienta OPC UA oraz miejsce stosu komunikacyjnego w jego strukturze są pokazane na rys. 9.2.

108

Rysunek 9.1. Architektura klienta OPC [16]

Rysunek 9.2. Architektura serwera OPC [16]

System Monitorowania, Analizy i Raportowania Produkcji

Przestrzeń adresowa serwera (OPC UA Address Space) jest zbiorem wszystkich obiektów udostępnianych klientom za pomocą usług. Podstawowymi rodzajami obiektów, nazywanych węzłami przestrzeni adresowej, są zmienne procesowe oraz typy danych opisujące znaczenie zmiennych. Węzły (node) są powiązanych ze sobą za pomocą referencji. Właściwości węzłów opisują atrybuty, takie jak wartość bieżąca lub stempel czasowy zmiennej. Atrybuty są jedynymi jednostkami przestrzeni adresowej posiadającymi wartość.

Jednostki monitorowane (monitored item) są elementami serwera, tworzonymi przez klienta w celu nadzorowania obiektów (węzłów) i generowania powiadomień (notification) o występujących w nich zdarzeniach i alarmach. Mechanizm powiadamiania jest realizowany przez subskrypcje (subscription) i kontrolowany przez klienta za pomocą usług publikacyjnych.

Interfejs usług serwera (OPC UA Service Interface) definiuje:

usługi żądanie-odpowiedź, wywołujące określoną akcję obiektu serwera,

usługi publikacyjne, wywołujące okresowe wysyłanie do klienta powiadomień o zdarzeniach, alarmach, zmianie wartości danych lub wynikach programu obiektu serwera.

Usługi serwera są zorganizowane w grupy. Zarówno grupy, jak usługi są na ogół opcjonalne. Grupy i usługi implementowane przez serwer są zdefiniowane w jego profilu (profile).

Usługi znajdowania serwerów (Discovery Service Set). Grupa usług umożliwiających znalezienie serwerów istniejących w systemie oraz odczytanie zasad bezpieczeństwa wymaganych do połączenia z serwerem (bezpieczny kanał). Usługa realizowana przez serwery we współpracy z dedykowanymi serwerami tej usługi (Discovery Servers).

Usługi bezpiecznego kanału (Secure Channel). Grupa usług używanych do tworzenia bezpiecznych kanałów komunikacji z serwerem. Mechanizmy bezpieczeństwa są dostarczane nie przez serwer, ale przez wykorzystywany protokół komunikacyjny. Usługi bezpiecznego kanału zapewniają bezpieczne ustalenie kluczy kryptograficznych.

Usługi sesji (Application Session). Grupa usług umożliwiających użytkownikowi nawiązanie połączenia (sesji) z serwerem na poziomie warstwy aplikacyjnej.

Usługi zarządzania (Node Management). Grupa usług umożliwiających klientowi konfigurowanie serwera przez dodawanie, usuwanie i modyfikowanie węzłów.

Usługi widoków (View Service Set). Usługi używane przez klienta do znajdowania węzłów w widoku i nawigowania między nimi wzdłuż hierarchii lub referencji.

Zapytania (Query Service Set). Grupa usług umożliwiająca klientowi wyszukiwanie węzłów bez przeglądania, na podstawie określonych przez klienta warunków.

Usługi dostępu do atrybutów (Attribute Service Set). Grupa usług umożliwiających klientowi odczytywanie i zapisywanie wartości atrybutów węzłów. Atrybuty są zdefiniowane w standardzie OPC. Specjalny Atrybut Value przechowuje wartość zmiennej.

Usługi wywołania metod (Method Service Set). Grupa usług umożliwiających klientowi wywoływanie metod obiektów. Mogą istnieć metody wywoływane sekwencyjnie albo dopuszczające wywołania równoległe.

109

System Monitorowania, Analizy i Raportowania Produkcji Usługi jednostek monitorowanych (Monitored Item Service Set). Grupa usług

umożliwiających klientowi tworzenie jednostek i zarządzanie ich pracą. Jednostka może okresowo kontrolować zmienną, atrybut lub generator zdarzeń i powiadamiać o spełnieniu pewnych warunków. Sprawdzana może być wartość zmiennej, jej status, zmiana wartości lub zdarzenie. Klient może określić okres sprawdzania oraz okres raportowania powiadomień. Jeśli oba okresy są różne, to powiadomienia mogą być kolejkowane lub nie. Istnieje możliwość włączania jednostek monitorowanych przez inną jednostkę.

Usługi subskrypcji (Subscription Service Set). Grupa usług używana do tworzenia subskrypcji i zarządzania ich pracą. Subskrypcja okresowo wysyła powiadomienia przypisanej do niej jednostki. Subskrypcja żyje niezależnie od stanu sesji klienta i może np. wysyłać powiadomienia do innego klienta. Czas życia subskrypcji jest ograniczony i musi być odnawiany przez nasłuchującego klienta. Brak odnowienia powoduje automatyczne usunięcie subskrypcji i wszystkich przypisanych do niej jednostek monitorujących. Protokół komunikacyjny dopuszcza retransmisje powiadomień.

Serwery OPC mogą współpracować ze sobą w różnych konfiguracjach. Komunikacja serwerów odbywa się przez emulowanie interfejsu klienta przez jeden z serwer.

9.2. Przestrzeń adresowa serweraElementami przestrzeni adresowej serwera są węzły, połączone referencjami narzucającymi pewną strukturę i umożliwiającymi nawigację. Podstawowymi rodzajami węzłów są:

obiekty reprezentujące sprzętowe lub programowe komponenty realnego świata, zmienne reprezentujące wartości atrybutów obiektów, referencje łączące węzły w logicznie powiązane struktury.

Pomocniczymi rodzajami węzłów są widoki i foldery grupujące pokrewne lub interesujące z jakiegoś punktu widzenia węzły.

110

Rysunek 9.3. Połączone serwery OPC [16]

System Monitorowania, Analizy i Raportowania Produkcji Klient OPC może tworzyć nowe obiekty w serwerze za pomocą usługi AddNode lub metody Create oraz nowe zmienne za pomocą usługi AddNode. Przestrzeń adresowa serwera może też zawierać obiekty należące do innych serwerów niższego rzędu.

Węzłami przestrzeni adresowej są także opisy typów wszystkich wymienionych rodzajów węzłów. Standard OPC definiuje stały zbiór wbudowanych typów danych, dla których określa sposób kodowania.

Standardowe klasy obiektów przestrzeni adresowej:

Base NodeClass Najwyższa klasa w hierarchii dziedziczenia. Definiuje tylko atrybuty, takie jak id, nazwa, opis, reguły dostępu do atrybutów.

Reference Type NodeClass Klasa pochodna od Base NodeClass definiuje referencje węzłów. Atrybuty określają, czy referencja jest abstrakcyjna i symetryczna. Referencje wskazuję właściwości i podtypy.

View NodeClass Klasa pochodna od Base NodeClass definiuje widoki. Atrybuty określają, czy referencje w widoku zawierają pętle i czy widok może powiadamiać o zdarzeniach. Referencje wskazują właściwości i węzły wchodzące w skład widoku.

Object NodeClass Klasa pochodna od Base NodeClass definiuje obiekty reprezentujące sprzętowe lub programowe komponenty realnego świata. Atrybut określa, czy obiekt może powiadamiać o zdarzeniach. Referencje wskazują definicję typu obiektu, właściwości, obiekty składowe (obiekty, zmienne i metody), źródła zdarzeń i parę innych rzeczy.

Object Type NodeClass Klasa pochodna od Base NodeClass definiuje typy obiektów. Atrybut określa, czy typ jest abstrakcyjny. Referencje wskazują właściwości, obiekty składowe (obiekty, zmienne i metody), podtypy, generowane zdarzenia i być może inne.

Relacja typu obiektu do obiektu jest niejasna. Wydaje się, że typ definiuje składniki statyczne i zgłaszane zdarzenia.

FolderType Standardowy typ obiektu, używany do organizowania hierarchii katalogów w widoku. Zdefiniowany w części 5 standardu OPC.

Variable NodeClass Klasa pochodna od Base NodeClass definiuje zmienne posiadające wartości (dane lub właściwości innych węzłów). Atrybuty określają wartość, typ danych, rodzaj wartości (skalar, tablica n-wymiarowa, dowolny), wektor rozmiarów (jeśli tablica), rodzaj dostępu (odczyt, zapis, historia), okres próbkowania, pamiętanie historii. Referencje wskazują właściwości, zmienne składowe i być może inne.

Variable Type NodeClass Klasa pochodna od Base NodeClass definiuje typy zmiennych. Atrybuty określają wartość domyślną, typ danych i rodzaj (skalar, tablica n-wymiarowa, dowolny), wektor rozmiarów tablicy i czy typ jest abstrakcyjny. Referencje wskazują właściwości, elementy składowe (obiekty, zmienne i metody), podtypy, generowane zdarzenia i być może inne.

Zmienna ma zawsze określony typ. Nie jest jasne, co by się stało, gdyby zmienna i jej typ miały różne wymiarowości.

111

System Monitorowania, Analizy i Raportowania Produkcji Method NodeClass Klasa pochodna od Base NodeClass definiuje funkcje. Atrybuty

określają, czy metoda jest wykonalna. Referencje wskazują właściwości, generowane zdarzenia i być może inne.

Data Type NodeClass Klasa pochodna od Base NodeClass definiuje składnię wartości zmiennej. Atrybut określa, czy typ jest abstrakcyjny. Referencje wskazują właściwości, podtypy oraz sposoby kodowania.

9.3. ImplementacjaStandard OPC opisuje odwzorowanie abstrakcyjnych pojęć standardu na technologie implementacyjne, tworzące trójwarstwowy stos protokołów komunikacyjnych:

Data Encoding – ułożenie danych w wiadomościach (serializacja danych) Security Protocols – zabezpieczenia kryptograficzne Transport Protocols – protokoły komunikacyjne przenoszące wiadomości.

Standard przewiduje dwa rodzaje kodowania danych: binarne i XML, dwa protokoły bezpieczeństwa: WS Secure Conversation i OPC UA Secure Conversation, oraz dwa protokoły komunikacyjne: TCP i HTTP. Konkretna kombinacja protokołów tworzy profil (profile) przeznaczony dla określonej dziedziny aplikacyjnej.

Kodowanie danych

Standard OPC definiuje 25 wbudowanych typów danych: boolowski, całkowite, rzeczywiste, data, czas, łańcuchy znaków, identyfikatory, wariant (unia), wartość danej oraz obiekt rozszerzony. Wartość danej jest złożoną strukturą zawierającą wartość (wariant typów wbudowanych), status i stempel czasu. Obiekt rozszerzony jest uniwersalnym pojemnikiem przenoszącym typ złożony.

Kodowanie binarne określa sposób upakowania każdego typu wbudowanego w ciągu bajtów tworzących wiadomość – od najmniej do najbardziej znaczącego bajtu. Liczby rzeczywiste są

112

Rysunek 9.4. Stos protokołów OPC UA [16]

System Monitorowania, Analizy i Raportowania Produkcji zapisywane w formacie IEEE 754, a znaki w kodzie UTF 8. Zdefiniowane są typy złożone: typ wyliczeniowy, wektor i struktura. Wiadomość jest kodowana jako obiekt rozszerzony.

Kodowanie XML określa sposób upakowania każdego typu wbudowanego w komunikacie XML tworzącym wiadomość – generalnie zgodnie z formatem zdefiniowanym w specyfikacji XML Scheme, część 2. Dla pozostałych podane są definicje w języku XML Scheme. Zdefiniowane jest kodowanie typów złożonych: typ wyliczeniowy, wektor i struktura. Wiadomość ma strukturę xs:complexType.

Protokoły bezpieczeństwa

Standard OPC dopuszcza trzy poziomy bezpieczeństwa: brak zabezpieczeń, podpis oraz podpis z szyfrowaniem. W trybie ‘brak’ nie są podejmowane żadne działania zabezpieczające.

Protokół WS Secure Conversation jest używany do zabezpieczenia wiadomości XML przesyłanych za pomocą protokołu SOAP.

Protokół OPC UA Secure Conversation jest binarną wersją WS Secure Conversation, używaną do zabezpieczenia wiadomości przesyłanych bez użycia XML i protokołu SOAP. Przesyłane wiadomości są dzielone na porcje (chunk) o długości nie przekraczającej 8192 bajtów. Każda porcja jest zabezpieczana indywidualnie. Użyty protokół transportowy powinien gwarantować zachowanie kolejności transmitowanych porcji.

Protokoły transportowe

Standard OPC dopuszcza trzy protokoły transportowe: TCP, SOAP/HTTP i SOAP/HTTPS. Protokół TCP przenosi wiadomości zakodowane binarnie, dwa pozostałe mogą przenosić wiadomości kodowane binarnie lub XML.

9.4. Odwzorowanie typów danychStandard OPC UA definiuje zestaw 25 wbudowanych typów danych, wśród których znajdują się typy określające możliwe wartości zmiennych oraz typy określające postać pewnych parametrów specyficznych dla serwera OPC. Sposób odwzorowania wbudowanych typów danych serwera OPC na typy danych systemu SMARP podaje tab. 9.1.

Standard definiuje też dwa typy złożone, odwzorowywane na złożone typy danych systemu SMARP następująco:

tablica serwera OPC UA jest odwzorowana na tablicę systemu SMARP, struktura serwera OPC UA jest odwzorowana na rekord systemu SMARP.

113

Rysunek 9.5. Porcja wiadomości OPC UA Secure Conversation [16]

System Monitorowania, Analizy i Raportowania Produkcji Tablica 9.1. Odwzorowanie typów danych OPC UA na typy danych systemu SMARP

OPC UA SMARP UwagiBoolean TINYINT OPC: 1 bajt, 0 – false, 0 – trueSByte TINYINT OPC: liczba 8-bitowa ze znakiemInt16 SMALLINT OPC: liczba 16-bitowa ze znakiemInt32 INTEGER OPC: liczba 32-bitowa ze znakiemInt64 BIGINT OPC: liczba 64-bitowa ze znakiemByte TINYINT OPC: liczba 8-bitowa bez znakuUInt16 SMALLINT OPC: liczba 16-bitowa bez znakuUInt32 INTEGER OPC: liczba 32-bitowa ze znakiemUInt64 BIGINT OPC: liczba 64-bitowa bez znakuFloat REAL liczba rzeczywista 32-bitowa IEE 754Double DOUBLE liczba rzeczywista 64-bitowa IEE 754String VARCHAR ( n ) OPC: liczba bajtów + ciąg znaków UTF8ByteString VARBINARY ( n ) OPC: liczba bajtów + ciąg bajtówDateTime DATETIME OPC: Int64 (liczba 100 ns od 1.01.1601)

Guid BINARY ( 16 ) globalny identyfikator (16-bajtów)XmlElement VARCHAR ( n )NodeId VARBINARY ( n ) identyfikator węzła w przestrzeni serveraExpandedNodeId VARBINARY ( n ) identyfikator jako URIStatusCode UInt32 numeryczny id błędu QualifiedName struktura nazwa + przestrzeń nazwLocalizedText struktura czytelny tekst z lokalnym identyfikatoremExtensionObject struktura typ nierozpoznawalny dla odbiorcy DataValue struktura wartość + status code + timestampVariant VARBINARY ( n ) unia (typ "any")DiagnosticInfo struktura struktura

114

System Monitorowania, Analizy i Raportowania Produkcji 10. Bibliografia

1. K. Sacha, A. Hurkała, W. Pikulski, Protokoły specyfikacji i komunikacji systemu SMARP, Instytut Automatyki i Informatyki Stosowanej Politechniki Warszawskiej, Warszawa, 7 sierpnia 2013

2. ISO/IEC 9945-1:2003, Information technology – Portable Operating System Interface (POSIX), ISO/IEC/IEEE 2009

3. G.T. Nicol: XEXPR - A Scripting Language for XML, http://www.w3.org/TR/xexpr/

4. U.Brandes, M.Eiglsperger, J.Lerner: GraphML Primer, http://graphml.graphdrawing.org/

5. A. Phillips, M. Davis (Eds), Tags for Identifying Languages, Request for Comments 5646, Network Working Group, September 2009, http://tools.ietf.org/html/rfc5646

6. Wskaźnik OEE, http://progresja.com.pl/baza-wiedzy/artykuly/wskaznik-oee/231

7. K. Sacha, A. Hurkała, W. Pikulski, Specyfikacja systemu SMARP, Instytut Automatyki i Informatyki Stosowanej Politechniki Warszawskiej, Warszawa, 5 lipiec 2013

8. K. Sacha, A. Hurkała, W. Pikulski, Projekt standardu opisywania maszyn i linii produkcyjnych, Instytut Automatyki i Informatyki Stosowanej Politechniki Warszawskiej, Warszawa, 24 maja 2013

9. K. Sacha, A. Hurkała, W. Pikulski, Koncepcja instalacji prototypowej, Instytut Automatyki i Informatyki Stosowanej Politechniki Warszawskiej, Warszawa, 19 kwietnia 2013

10. K. Sacha, A. Hurkała, W. Pikulski, Założenia i koncepcja projektu, Instytut Automatyki i Informatyki Stosowanej Politechniki Warszawskiej, Warszawa, 12 marca 2013

11. Modbus-IDA, Modbus Application Protocol Specification, V1.1b, December 28, 2006, http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf

12. Stratus Engineering, http://www.stratusengineering.com/EZTap.html

13. DIN 19245, Profibus Standard, Process Field Bus, PNO, 1991.

14. EN 50 170 Volume 2, Profibus Specification, Normative Parts of Profibus –FMS, -DP, -PA according to the European Standard EN 50 170 Volume 2, 1998.

15. IEC 61131-3, Programmable controllers – part 3: Programming languages, IEC, 1993.

16. OPC Foundation, OPC Unified Architecture Specification, Release 1.01, 2009.

115

System Monitorowania, Analizy i Raportowania Produkcji SMARP

Załącznik 1. Formularz zmiennych mierzonych (pierwsze 25 zmiennych mierzonych linii L4 – tab. 6.4, specyfikacja sensors w rozdz. 6.6)

M Name Type Size Mode Cycle Sample Delta Value Comment S Tdefault 0 1 5 5 0,1 0Tr4 INTEGER 20 Numer komunikatu transpondera

L4B1 L4B1_Meld BINARY(2) Kod stanu butelczarki B1 yesL4B1 L4B1_Licznik_Butelek_Total BINARY(4) Licznik produkcji butelczarki B1 yes

L4B2 L4B2_Meld BINARY(2) Kod stanu butelczarki B2 yes

L4B2 L4B2_Licznik_Butelek_Total BINARY(4) Licznik produkcji butelczarki B2 yesL4S1 SB4AV1_I0004 SMALLINT 10 Saturator zakłócenie yes

L4S1 SB4AV1_I0005 SMALLINT 10 Saturator praca yes

L4N1 L4N1_Maszyna_Awaria1 SMALLINT Kod 1 awarii nalewarki N1 yesL4N1 L4N1_Maszyna_Awaria2 SMALLINT Kod 2 awarii nalewarki N1 yesL4N1 L4N1_Maszyna_Produkcja SMALLINT Maszyna pracuje yesL4N1 L4N1_Maszyna_Stop SMALLINT Maszyna zatrzymana yesL4N1 L4N1_Maszyna_Wlaczona SMALLINT Maszyna włączona yesL4N1 L4N1_Mixer_Gotowy SMALLINT Gotowość miksera nalewarki yesL4N1 L4N1_Mixer_Pusty SMALLINT Brak gotowości miksera yesL4N1 L4N1_Otwarte drzwi SMALLINT Otwarcie drzwi yesL4N1 L4N1_Stoper_Otwarty SMALLINT Zatrzymanie awaryjne yesL4N1 L4N1_CIP SMALLINT 10 Płukanie instalacji yesL4N1 L4N1_Licznik_Butelek INTEGER Licznik butelek na wyjściu yesL4N1 L4N1_Licznik_Braków INTEGER Licznik sygnałów ‘L4N1_Blad_Nalewu’ w transponderzeL4E1 SB4AV1_I0006 SMALLINT Etykieciarka praca yesL4E1 SB4AV1_I0007 SMALLINT Etykieciarka odbiór yesL4E1 SB4AV1_I0008 SMALLINT Etykieciarka brak powietrza yesL4E1 SB4AV1_I0009 SMALLINT Etykieciarka zaczopowanie yesL4E1 SB4AV1_I0011 SMALLINT Etykieciarka przeciążenie silnika yes

116

System Monitorowania, Analizy i Raportowania Produkcji SMARP

Załącznik 2. Formularz struktury linii butelkowania L4 (tab. 6.2)

Name State Total OpId Stop Micro Comment S TL4 state_L4 get_total_L4 L4_operator Linia butelkowania L4L4B1 state_ L4B get_counter_BCD8 L4_operator yes Butelczarka B1 yesL4B2 state_ L4B get_counter_BCD8 L4_operator yes Butelczarka B2 yesL4S1 state_ L4S1 L4_operator yes Saturator S1

L4N1 state_ L4N1 get_value L4_operator yes Nalewarka N1 z mikserem i inspektorem nalewu yes

L4E1 state_ L4E1 L4_operator yes Etykieciarka S1 yesL4Z1 state_ L4Z1 get_counter_BCD8 L4_operator yes Pakowaczka P1 yes

L4R1 state_ L4R1 L4_operator yes Rączkarka R1 yes

L4P1 state_ L4P1 get_value L4_operator yes Paletyzer P1 yesL4O1 state_ L4O1 get_value L4_operator yes yes Owijarka O1 z dodatkowym czytnikiem kodów kreskowych yes yes

Kolumny tablicy:

1. Name – nazwa maszyny (oznaczana dalej XX).2. State – nazwa wyrażenia obliczającego stan maszyny; wartość domyślna: state_XX.3. Total – nazwa wyrażenia obliczającego całkowitą produkcję maszyny,4. OpId – nazwa zmiennej, której wartością jest identyfikator operatora zmiany.5. Stop – znacznik rejestracji przyczyn zatrzymania maszyny (yes wskazuje obecność rejestracji).6. Micro – znacznik rejestracji przyczyn mikroprzestojów maszyny (yes wskazuje obecność rejestracji).7. Comment – opis maszyny.8. S – znacznik wskazujący, czy zmienna State maszyny jest potrzebna do obliczenia stanu linii.9. T – znacznik wskazujący, czy zmienna Total maszyny jest potrzebna do obliczenia produkcji całkowitej linii.

Niewypełnione pola w kolumnach Total, Stop i Micro oznaczają brak działania dla danej maszyny (brak obliczenia produkcji całkowitej, brak rejestracji przyczyn zatrzymania lub mikroprzestoju).

117