• Nie Znaleziono Wyników

Możliwości rozwoju systemu

W dokumencie Index of /rozprawy2/10413 (Stron 120-162)

Rozdział 11. Zakończenie

11.2. Możliwości rozwoju systemu

Ciągły rozwój nowoczesnych systemów sterowania oraz pojawiające się nowe rozwiązania technologiczne, sprawiają iż jest nieustanna potrzeba udoskonalania działających już rozwiązań systemu OpenLon. W trakcie wykonywania opisanych w poprzednim podrozdziale prac, wielokrotnie zmieniały się ustalenia np. związane z układem zasilania urządzeń w sieci RS485, organizacją pakietów, strukturą bazy danych oraz wiele innych. Jako przykład może posłużyć sposób dostępu do zasobów sieci LON z poziomu lokalnego serwera komunikacyjnego. Początkowo cała komunikacja odbywała się wyłącznie poprzez protokół DDE, jednak późniejsze pojawienie się bibliotek funkcji z dostępem do Serwera LNS pozwoliły pominąć mechanizm wspierany wyłączanie przez system operacyjny

Windows. Nowe podejście dało lepsze wyniki transferu danych oraz wygodniejszy dostęp do zasobów zmiennych sieciowych.

W ramach dalszych prac prowadzonych nad rozproszonym systemem serowania OpenLon oraz diagnostycznym systemem ekspertowym, autor zamierza wykonać następujące czynności:

Zbudowanie nowego modułu węzła z mikroprocesorem NouronChip oraz pamięcią EEprom, który zastąpi obecny układ LTM-10.

Wykonanie kolejnych urządzeń kontrolno pomiarowych z funkcjami pomiaru natężenia światła, wilgotności, wykrywania dymu oraz tlenku węgla w powietrzu. Wykonanie miernika temperatury obsługującego wiele czujników Dallas poprzez

wspólny interfejs 1-Wire.

Zbudowanie interfejsu graficznego w formie Miletu dla urządzeń mobilnych, których zadaniem będzie zdalne monitorowane i konfigurowanie urządzeń w rozproszonych sieciach. Wykorzystany będzie działający już mechanizm komunikacyjny oparty na protokole XMPP [27].

Rozbudowa diagnostycznego systemu ekspertowego o nowe możliwości uczenia się oraz predykcji wybranych parametrów systemu sterowania.

Rozbudowa czwartej warstwy decyzyjnej. Opracowanie struktury globalnej bazy danych, polityki bezpieczeństwa oraz sposobu zarządzania dużą ilością danych archiwalnych [21].

Spis skrótów i oznaczeń

DDE – (Dynamic Data Exchange) mechanizm dynamicznej wymiany danych. Pozwala

przekazywać informacje pomiędzy aplikacjami w systemie Microsoft Windows.

DSE – Diagnostyczny System Ekspertowy – autorski program, dedykowany

rozproszonemu systemowi sterowania OpenLon.

FIFO – (First In First Out) – liniowa struktura danych w formie tablicy, gdzie dane

zapisywane są zawsze na początek określony przez zmienną inkrementowaną w formie wskaźnika oraz pobierane z końca kolejki, na którą wskaże druga zmienna dekrementowana.

HMI – (Human Machine Interface) Interfejs pomiędzy człowiekiem i maszyną.

ISO/OSI – model protokołu komunikacji dedykowany dla otwartych systemów wymiany

danych (OSI - Open System Interconnection), opracowany i wspierane przez międzynarodową organizację (ISO - International Standard Organization).

JavaSE – (Java Platform Standard Edtion) – jest to standardowa specyfikacja języka Java

opracowana przez firmę Sun Microsystems . Napisane w tym środowisku programy mogą być uruchamiane na komputerach stacjonarnych i serwerach w postaci aplikacji, apletu lub serwletu.

JVM – (Java Virtual Machine) Wirtualna maszyna Javy, nazywana również interpreterem

Java. Jest to niezależne od platformy systemowej, środowisko uruchomieniowe dla programów napisanych w języku JAVA.

Klient-Server – Model komunikacji, gdzie serwer ustala usługi dla klientów. Klient może

wnioskować o dostęp do zasobów serwera.

LAN – (Local Area Network) sieć lokalna, najmniej rozległa sieci komputerowa.

LNS DDE – Narzędzie udostępniające zasoby sieci LON przez zmienne sieciowe

z poziomu systemu operacyjnego Windows i mechanizmu dynamicznej wymiany danych DDE.

LNS Server – Narzędzie programowe używane w systemie operacyjnym Windows,

udostępnia zasoby lokalnej sieci operacyjnej poprzez zbiór funkcji np. z poziomu innych aplikacji.

LON – Local Operating Network; Lokalna Sieć Operacyjna dla systemów automatyki. LonMark – Organizacja zajmująca się certyfikacją urządzeń działającej w sieci LonWorks LonTalk – Protokół komunikacyjny stworzony dla systemu LonWorks.

LonWorks – Amerykański standard sieci automatyki budynkowej. Sieć sterowania

stworzona przez amerykańską firmę Echelon Corporation, pracująca na bazie protokołu LonTalk.

MAC – (Message Authentication Code) – algorytm uwierzytelniania, zapewnia integralność danych.

NeuronChip – Mikroprocesor zaprojektowany dla urządzeń pracujących w technologii

LonWorks, produkowany przez firmy Motorola i Toshiba. W jego skład wchodzą trzy jednostki CPU, z których każda ma inne przydzielone zadania.

Obiekt faktu – jest to zbiór zmiennych przechowujący informacje wykorzystywane

w procesie wnioskowania. Opisuje stan urządzeń lub zawiera odpowiedź od użytkownika systemu. Jest identyfikowany prze obiekt zmiennej.

Obiekt fasety – Opisuje sposób organizacji danych porównywanych w obiekcie warunku.

Fasety reprezentowane są przez klasy, które definiują zapytanie do bazy danych, użytkownika lub określają kryteria poszukiwania odpowiedzi w formie obiektu faktu.

Obiekt konkluzji – reprezentuje wniosek w formie klasy DSE. Gdy wszystkie jego

obiekty warunków zostaną określone, obiekt konkluzji będzie miał wartość określoną w czasie jego tworzenia.

Obiekt reguły – reprezentuje regułę w diagnostycznym systemie ekspertowym. Składa się

z obiektu konkluzji oraz obiektów warunków.

Obiekt warunku – jest przesłanką o strukturze narzuconej przez DSE. Najważniejsze jego

elementy to obiekt zmiennej oraz wyrażenie warunkowe zapisane w składowych klasy obiektu warunku.

Obiekt zmiennej – jest instancją klasy, która jest wykorzystywana do budowy wszystkich

elementów bazy wiedzy DSE (obiektów: warunku, konkluzji i faktu). Jest identyfikowana składowymi, które są często powiązane z fizycznymi urządzeniami jak: typ, identyfikator, nr polecenia. Dodatkowo opisana ciągiem znaków w zmiennej typu String.

OpenLon – System sterowania o rozproszonej strukturze urządzeń, bazujący na sieci LON

z dodatkową warstwą urządzeń kontrolno pomiarowych i sterujących, realizujące swoje zadania w dodatkowej sieci RS485. Jest to autorskie rozwiązanie szeroko prezentowane w niniejszej rozprawie doktorskiej.

One-Wire – interfejs oraz protokół komunikacyjny wykorzystywany do wymiany

informacji pomiędzy urządzeniami przez jedną linę danych, podłączonych równolegle.

P2P – (peer to peer) Model komunikacji w sieci gwarantujący równe prawa obydwu

stronom.

SNVT – (Standard Network Variable Types) - standardowy typ zmiennych sieciowych WAN – (Wide Area Network) rozległa sieć komputerowa, często wykraczająca poza

obszar jednego miasta.

XMPP – (Extensible Messaging and Presence Protocol) protokół komunikacyjny oparty

o język XML. Wykorzystywany do komunikacji strumieniowej najczęściej w architekturze typu klient-serwer. Wykorzystywany w systemach natychmiastowego zawiadamiania i obecności - Jabber (komunikator).

Spis tablic

Tabela 1.1. Parametry sieci dla medium transmisyjnego w postaci pary przewodów ... 12 Tabela 2.1. Opis złącza RJ45 ... 21 Tabela 3.1. Typy urządzeń kontrolno pomiarowych ... 36 Tabela 3.2. Typy podsystemów ... 36 Tabela 3.3. Polecenia przekazywane do węzła w polu Req, przez zmienna sieciową NvDevReq ... 37 Tabela 3.4. Wartości zwracane w polu Req przez zmienna sieciową NvDevResp ... 37 Tabela 3.5. Kody błędów ... 37 Tabela 3.6. Pakiety instalacji urządzenia ... 38 Tabela 3.7. Przykładowe pakiety instalacji urządzenia ... 38 Tabela 3.8. Pakiety - deinstalacji urządzenie ... 39 Tabela 3.9. Przykładowe pakiety deinstalacji urządzenia ... 39 Tabela 3.10. Pakiety instalacji podsystemu ... 39 Tabela 3.11. Przykładowe pakiety instalacji podsystemu centralnego ogrzewania ... 40 Tabela 3.12. Parametry konfiguracji podsystemów, typ 101 i 102 ... 40 Tabela 3.13. Przykładowe pakiety instalacji podsystemu sterowania oświetleniem ... 40 Tabela 3.14. Przykładowe pakiety instalacji podsystemu alarmowego ... 40 Tabela 3.15. Pakiet - deinstalacji podsystemu przesyłane przez NvDevReq do węzła... 41 Tabela 3.16. Przykładowe pakiety deinstalacji podsystemu ... 41 Tabela 3.17. Pakiet - pobieranie listy urządzeń podrzędnych ... 41 Tabela 3.18. Przykładowy pakiet z zapytaniem o listę urządzeń podrzędnych ... 41 Tabela 3.19. Pakiet z zapytaniem o listę zainstalowanych podsystemów ... 42 Tabela 3.20. Przykładowe pakiety z zapytaniem o listę zainstalowanych podsystemów ... 42 Tabela 3.21. Pakiet z zapytaniem o listę zainstalowanych w systemie urządzeń ... 42 Tabela 3.22. Przykładowe pakiety z zapytaniem o listę zainstalowanych urządzeń ... 42 Tabela 3.23. Pakiet z zapytaniem o informacje o urządzeniu ... 43 Tabela 3.24. Opis flag przesyłanych w deskryptorze urządzenia ... 43 Tabela 3.25. Przykłady pakietów dotyczących informacji o urządzeniu ... 43 Tabela 3.26. Pakiet z zapytaniem o wartości parametrów urządzenia ... 44 Tabela 3.27. Typy parametrów urządzeń ... 44 Tabela 3.28. Przykładowe pakiety pobierający aktualne wartości parametrów ... 44 Tabela 3.29. Pakiet ustawiający wartości parametrów urządzeń ... 44 Tabela 3.30. Przykładowe pakiety zmiany wartości parametrów urządzeń ... 45 Tabela 3.31. Pakiet zmiany wartości parametrów podsystemu ... 45 Tabela 3.32. Typ parametrów podsystemu ... 45 Tabela 3.33. Pakiety zmiany parametrów podsystemu ... 45 Tabela 3.34. Pakiet pobierający wartości parametrów podsystemu ... 46 Tabela 3.35. Przykładowe pakiety pobierające parametry podsystemów ... 46 Tabela 3.36. Pakiet restartujący węzeł LON ... 46 Tabela 3.37. Przykładowe pakiety restartujące węzeł LON... 46 Tabela 3.38. Pakiet dodający urządzenie redundantne ... 47 Tabela 3.39. Przykładowe pakiety ustawiające urządzenie redundantne ... 47 Tabela 3.40. Pakiet usuwający urządzenie redundantne ... 47 Tabela 3.41. Przykładowe pakiety usuwające urządzenie redundantne ... 47 Tabela 3.42. Przykładowy pakiet danych zmiennej NvChaneg ... 48 Tabela 3.43. Składowe pakietu zmiennej sieciowej NvChange ... 48

Tabela 3.44. Zakres wartości przesyłany dla poszczególnych urządzeń ... 48 Tabela 3.45. Pakiet przesyłający informację o zmianie wartości we/wy ... 49 Tabela 3.46. Pakiet przesyłający informację o braku komunikacji z urządzeniem ... 49 Tabela 3.47. Przykładowy pakiet zawierający informację o braku komunikacji z urządzeniem ... 49 Tabela 3.48. Pakiet przesyłający dane o ponownym nawiązaniu komunikacji z urządzeniem ... 50 Tabela 3.49. Pakiet z informacją o ponownym nawiązaniu komunikacji z urządzeniami ... 50 Tabela 6.1. Operatory przypisania i porównania ... 78 Tabela 8.1 Wartości wygenerowanych wektorów ... 103 Tabela 10.1.Wyniki pomiaru obciążenia procesora AMD 1.8GHz dla różnej liczby wątków z różną wartością opóźnienia pętli głównej ... 110 Tabela 10.2. Wyniki pomiaru obciążenia procesora AMD 3.0 GHz dla różnej liczby wątków z różną wartością opóźnienia pętli głównej ... 112 Tabela 10.3. Wyniki pomiaru obciążenia procesora Intel 2x2.6 GHz dla różnej liczby wątków z różną wartością opóźnienia pętli głównej ... 113 Tabela 10.4.Wyniki pomiaru czasu zapisu różnej liczby pakietów do lokalnej bazy danych... 116 Tabela 10.5. Wynik pomiaru czasu odczytu rekordów za bazy danych ... 117

Spis rysunków

Rysunek 1.1. Schemat komunikacji typu master-slave ... 8 Rysunek 1.2. Schemat sieci typu magistralowego BUS ... 8 Rysunek 1.3. Architektura mikroprocesora NeuronChip ... 11 Rysunek 1.4. Podział urządzeń na grupy, podsieci i domeny ... 13 Rysunek 1.5 Schemat relacji systemów starowania (System2) i diagnostycznego (System1) ... 15 Rysunek 1.6. Warstwowa budowa rozproszonego systemu sterowania ... 17 Rysunek 2.1. Przykładowa sieć RS485 ... 19 Rysunek 2.2. Układ modułu komunikacji w sieci RS485 ... 20 Rysunek 2.3. Złącze RJ45 ... 21 Rysunek 2.4. Rozdzielacz sygnału łączący urządzenia w sieci RS485 ... 22 Rysunek 2.5. Miernik temperatury ... 23 Rysunek 2.6. Nastawnik ... 23 Rysunek 2.7. Lampka z wbudowanym nastawnikiem - sieć RS485 ... 24 Rysunek 2.8. Urządzenie wejść cyfrowych... 25 Rysunek 2.9. Zintegrowane urządzenie testowe ... 26 Rysunek 2.10. Sieć RS485 z podłączonymi trzema urządzeniami ... 30 Rysunek 2.11. Redundancja urządzeń przedstawiona w projekcie sieci RS485 – ConfinNetRs ... 30 Rysunek 3.1. Węzeł OpenLon... 32 Rysunek 3.2. Połączenie układów NeuronChip3150 – Atmel90s4414 – Driver SN75176B ... 33 Rysunek 3.3. Odczyt bajta danych z portu równoległego mikrokontrolera 90s4414 [26] ... 34 Rysunek 3.4. Zapis bajta danych na port równoległy mikrokontrolera 90s4414 [26] ... 35 Rysunek 4.1. Uproszczony schemat połączeń elementów rozproszonego systemu sterowania ... 52 Rysunek 4.2. Komunikacja elementów rozproszonego systemu sterowania ... 52 Rysunek 4.3. Schemat połączenia komputera z siecią LON ... 53 Rysunek 4.4. Interfejs graficzny utworzony w programie InTouch wspomagająca podsystem sterowania centralnym ogrzewaniem ... 53 Rysunek 4.5. Pola tabeli DevResp ... 54 Rysunek 4.6. Pola tabeli „dynamicznej” DevChange ... 55 Rysunek 4.7. Pola tabeli DevReq ... 55 Rysunek 4.8. Organizacja danych w lokalnym serwerze komunikacyjnym ... 56 Rysunek 4.9. Przykładowy projekt sieci RS485- aplikacja ConfigNetRS ... 58 Rysunek 4.10. Projekt sieci RS485 - aplikacja ConfigNetRS ... 59 Rysunek 5.1. Schemat działań podejmowanych przez DSE w czasie odczytania stanu nastawnika 63 Rysunek 5.2. „Drzewo reguł” – wyświetlane w trybie edycji ... 64 Rysunek 5.3. Lista obiektów zmiennych ... 65 Rysunek 5.4. Konfiguracja fasety dla warunku CO064_15 ... 66 Rysunek 5.5. Edycja konkluzji CO016_101 ... 68 Rysunek 5.6. Rekord danych inicjujący proces wnioskowania ... 69 Rysunek 5.7. Drzewo reguł wyświetlane w trakcie wnioskowania ... 69 Rysunek 5.8. Rekordy z pytaniem i odpowiedzią dotyczące parametrów urządzenia podrzędnego 70 Rysunek 5.9. Rekordy z pytaniem i odpowiedzią dotyczące wartości temperatury ... 70 Rysunek 5.10. Pozytywny wynik wnioskowania widoczny w trybie graficznym (przypadek 1) .... 71 Rysunek 5.11. Wynik wnioskowania dostępny w trybie tekstowym ... 71 Rysunek 5.12. Pozytywny wynik wnioskowanie widoczny w trybie graficznym (przypadek 2) .... 72 Rysunek 5.13. Pozytywny wynik wnioskowanie widoczny w trybie graficznym (przypadek 3) .... 72

Rysunek 5.14. Negatywny wynik wnioskowanie widoczny w trybie graficznym (przypadek 4) ... 73 Rysunek 6.1. Schemat relacji pomiędzy najważniejszymi klasami DSE ... 74 Rysunek 6.2. Zapis konkluzji z przypisaniem wartości stałej ... 77 Rysunek 6.3. Zapis konkluzji z przypisaniem wartości pochodzącej z obiektu faktu ... 78 Rysunek 6.4. Okno dialogowe – Edit Condition z przykładowymi parametrami. ... 79 Rysunek 6.5. Struktura reguł ukazująca relacje logiczne ... 80 Rysunek 6.6. Graficzna reprezentacja wiedzy w trakcie projektowania bazy reguł. ... 81 Rysunek 6.7. Okno dialogowe pozwalające edytować i ustalać kolejność wykonywania faset. .... 83 Rysunek 6.8. Okno dialogowe do edycji pytań fasety ESFasetUser. ... 84 Rysunek 6.9. Pytanie zadawane użytkownikowi w trakcie wnioskowania. ... 85 Rysunek 6.10. Pola tabeli DevReq - zawierają polecenia i zapytania dla urządzeń ... 85 Rysunek 7.1. Panel aplikacji CongfigNetRS przedstawiający tablice zadań ... 90 Rysunek 8.1. Obiekty faktu wizualizowane podczas wnioskowania. ... 93 Rysunek 8.2. Blok „Obiektu Faktu” tworzony na podstawie rekordów z lokalnej bazy danych ... 93 Rysunek 8.3. Przykładowy widok drzewa reguł po zakończeniu wnioskowania. ... 94 Rysunek 8.4. Szczegółowe dane reguły podczas wnioskowania. ... 94 Rysunek 8.5. Schemat wnioskowania podczas jednego cyklu głównej pętli dla jednego wątku. .... 96 Rysunek 8.6. Schemat analizy Obiektu Faktu ... 97 Rysunek 8.7. Schemat postępowania podczas analizy fasety faktu. ... 98 Rysunek 8.8. Schemat przedstawiający sposób analizy fasety użytkownika. ... 99 Rysunek 8.9. Schemat przedstawiający sposób analizy fasety bazy danych. ... 100 Rysunek 8.10. Pola tabeli DevResp – przechowują odpowiedzi na zapytania z tabeli DevReq... 100 Rysunek 8.11. Kwerenda ReqResp - grupująca informacje z tabel DevReq i DevResp. ... 101 Rysunek 8.12. Panel ViewText – przedstawia rezultat wnioskowania w trybie tekstowym. ... 102

Bibliografia

[1] Astor – Wonderware InTouch Podręcznik użytkownika,

http://www.astor.com.pl/downloads/archive/Centrum_techniczne/Wonderware/ dokumentacja_pl/LI-ASK-PU-IT95.pdf

[2] Automatyka budynkowa – wybrane systemy inteligentnych instalacji elektrycznych - http://www.elektroinstalator.com.pl

[3] Chromiec J., Strzemieczna E., Sztuczna Inteligencja. Metody konstrukcji i analizy

systemów eksperckich, Akademicka oficyna Wydawnicza PLJ Warszawa 1994r.

[4] Cholewa W., Czogała E., Podstawy systemów ekspertowych, PAN - Instytut Biocybernetyki i Inżynierii Biomedycznej, Warszawa 1989r.

[5] Daca W., Mikrokontrolery – od układów 8-bitowych do 32-bitowych”, Mikom Warszawa, 2000r.

[6] Daniluk A., RS 232C – Praktyczne programowanie. Od Pascala i C++ do Delphi i

Buildera”, Helion, Gliwice 2001r.

[7] DDE – Dynamic Data Exchange Management Library, http://msdn.microsoft.com

[8] Dołęga B., Rogalski T., Diagnostyka systemu pośredniego sterowania, Diagnostyka procesów przemysłowych, Miesięcznik Naukowo Techniczny, Rajgród Wrzesień 2005r.

[9] Eckel B., Thinking in Java, Wydanie 3, Helion 2003r.

[10] Introduction to the LonWorks Platform – http://www.echelon.com [11] Java SE Technical Documentation - http://download.oracle.com/javase/ [12] JConsol Java Application -

http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html [13] Kościelny J., Diagnostyka zautomatyzowanych procesów przemysłowych,

Akademicka Oficyna Wydawnicza EXIT, Warszawa 2001r.

[14] Kowalczuk Z., Wszołek J., Sieciowy monitoring i diagnostyka obiektów. Systemy wykrywające i tolerujące usterki. PWNT, Gdańsk 2009r.

[15] Ligęza A, Górny B., Wnioskowanie diagnostyczne w oparciu o model systemu, DPS Diagnostyka procesów przemysłowych, Zielona Góra 2001r.

[16] LNS HMI Development Kit for the Java Platform,

http://www.echelon.com/products/development/lns_java/default.htm

[18] Lower M., Monitoring urządzeń chłodniczych w PSS “Feniks”, Diagnostyka Procesów Przemysłowych, Rajgród 2005r.

[19] Mikulik J., Pawlik M., Systemy autodiagnostyczne i systemy o zwiększonej

odporności na awarie w budynkach inteligentych, Diagnostyka Procesów i

Systemów, EXIT, Warszawa 2007r.

[20] Mulawka J., Systemy Ekspertowe, Wydawnictwo Naukowo Techniczne, Warszawa 1996r.

[21] Oaks Scott, JAVA a bezpieczeństwo, Wydawnictwo RM, Warszawa 2002r. [22] Orzadowicz A.: Analiza porównawcza dwóch systemów sterowania inteligentnym

budynkiem – Systemu europejskiego EIB/KNX oraz standardu amerykańskiego na bazie technologii LonWorks. Rozprawa doktorska, Kraków 2006r.

[23] Pelczar J., Kontroler wejścia/wyjścia dla systemu automatyki domowej, praca inżynierska z PWSZ Krosko, promotor: prof. dr hab. inż. W. Wajs, Krosno 2009r. [24] Pełka R., Mikrokontrolery – architektura programowanie zastosowania,

Wydawnictwo Komunikacji i Łączności, Warszawa 2000r.

[25] Ritchie D.M., Kernighan B.W., Język ANSI C, WNT, Warszawa 2001r.

[26] Skuba M.: Inteligentny system zarządzania zasobami budynku oparty na protokole

LonTalk i RS485, I Ogólnopolskie Seminarium Naukowo-Techniczne Studentów i

Młodych Naukowców. Kraków Czerwiec 07.2005r.

[27] Smack – API specification, an Open Source XMPP client library, http://www.igniterealtime.org/builds/smack/docs/3.1.0/javadoc/

[28] Sportack M., Sieci komputerowe – Księga eksperta s.26, Helion, Gliwice 1999r. [29] Szymczyk I., Otwarte i zamknięte systemy zarządzania budynkiem inteligentnym,

I Ogólnopolskie Seminarium Studentów i Doktorantów, AGH Kraków 2005r. [30] Wajs W, Skuba M., Gołąb R.: A distributed control and management system of the

building‟s resources based on LON technology, IFAC Workshop on Programmable

Devices and Systems, PDS 2004, Krakow November 18-19, 2004r.

[31] Wajs W. Skuba M.: Diagnostyczny Systemu Ekspertowy do nadzoru urządzeń

sterowania ruchem kolejowym, KZA Expres – Magazyn 03, Październik 2009r.

[32] Wajs W., Skuba M., Gołąb R.: Analiza możliwości diagnozowania stanu węzłów w

rozproszonym systemie sterowania, VII Krajowa Konferencja Naukowo-Techniczna

Diagnostyka Procesów Przemysłowych. Rajgród, Września 12-14.2005r. [33] Wajs W., Skuba M., Hubert W.: LON and LAN Networks Connection Based on

Neuron Chip and Atmel Microprocessors, WSEAS International Conference on

AUTOMATIC CONTROL, MODELLING AND IMULATION ’05, Prague, Czech Republic, March 13-15, 2005r.

[34] Wajs W., Skuba M.: Device diagnostics in the distributed control system of the

intelligent building, INTELLIGENT BUILDING SYSTEMS - InBuS 2006, Kraków,

Czerwiec 1-2. 2006r.

[35] Wajs W., Skuba M.: Diagnostyczny system ekspertowy dla rozproszonej struktury

systemu sterowania, Diagnostyka Procesów i Systemów – DPS’09.Gdańsk, Wrzesień

[36] Wajs W., Skuba M.: Diagnostyczny system ekspertowy dla sieciowych struktur

sterowania i zarządzania, KZA Expres – Magazyn 02, Marzec 2009r.

[37] Wajs W., Skuba M.: Diagnozowanie stanu obiektów w rozproszonym systemie

sterowania, Diagnostyka Procesów i Systemów – DPS’07.Słubice, Wrzesień 10-12

2007r.

[38] Wajs W., Skuba M.: LON and LAN connection base on LonTalk and RS485

protocols, International Congress on INTELLIGENT BUILDING SYSTEMS – InBuS 200, Krakow May 20-21, 2004r.

[39] Wajs W., Skuba M.: Zintegrowany system zarządzania układem sterowania

ogrzewaniem oparty na technologii LON, Problemy Ekologiczne Euroregionu

Karpackiego, Krosno Wrzesień 2004r.

[40] Wajs W., Systemy Sterowania Rozproszonego LonWorks, Eurostudent, Kraków 2002r.

Dodatek A

Kody źródłowe wybranych klas DSE

Klasa DBDate

import java.io.*; import java.util.*;

//Klasa grupująca dane, które mają być serializowane do/z pliku

class DBDate implements Serializable{

ESCollectionVariableDB cVDB; // odnośnik do wektora zmiennych

ESColectionRulesDB cRDB; // odnośnik do wektora reguł

ESTask tabTasks[]; Vector vObjects; boolean bDateBase=true; boolean bObjects=true; boolean bTasks=true; DBDate(){ cVDB=null; cRDB=null;

vObjects =new Vector(); }

}

Klasa DRO_ES

//Główna klasa diagnostycznego systemu ekspertowego

import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.io.*; import java.util.*; import javax.swing.filechooser.FileNameExtensionFilter;

public class DRO_ES implements ActionListener{

String version="v11.05.15"; JFrame frame; File file; MenuMain menuMain; ToolBarMain toolBarMain; PanelViewGraph panelViewGraph; PanelViewText panelViewText; PanelEditDB panelEditDB; PanelSchedule panelSchedule; PanelSchedueList panelSchedueList; PanelRaport panelRaport; DBDate dBD; Vector vObjectFacts; ScheduleES schedule; OdbcES odbcES; DRO_ES(){ dBD = new DBDate(); vObjectFacts = new Vector(); odbcES = new OdbcES(this);

JFrame.setDefaultLookAndFeelDecorated(true);

frame.setBounds(100,100,900,700);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setLocationRelativeTo(null);

menuMain = new MenuMain(this); frame.setJMenuBar(menuMain);

JPanel panel = new JPanel(new BorderLayout()); toolBarMain = new ToolBarMain(this);

JTabbedPane tabbedPane = new JTabbedPane();

panelViewGraph = new PanelViewGraph(this);

ImageIcon iconPanelGraph = ToolBarMain.createImageIcon("icons/panelgraf.gif");

tabbedPane.addTab("View Graphisc", iconPanelGraph, panelViewGraph,"View Graphics");

tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

panelViewText = new PanelViewText(this);

ImageIcon iconPanelText = ToolBarMain.createImageIcon("icons/paneltext.gif");

tabbedPane.addTab("View Text",iconPanelText, panelViewText,"View Text");

tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

panelEditDB = new PanelEditDB(this);

ImageIcon iconEditDB = ToolBarMain.createImageIcon("icons/paneleditdb.gif");

tabbedPane.addTab("Edit DB ",iconEditDB, panelEditDB,"Edit date base");

tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

panelSchedule = new PanelSchedule();

schedule = new ScheduleES(vObjectFacts, panelSchedule); dBD.tabTasks=schedule.tabTasks;

panelSchedueList = new PanelSchedueList(this, vObjectFacts, dBD, panelViewGraph,schedule);

ImageIcon iconSchedule = ToolBarMain.createImageIcon("icons/scheduleedit.jpg");

tabbedPane.addTab("Schedule ",iconSchedule, panelSchedueList,"Schedule");

tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

panelRaport = new PanelRaport();

ImageIcon iconRaport = ToolBarMain.createImageIcon("icons/raport.jpg");

tabbedPane.addTab("Raports ",iconRaport, panelRaport,"Raports");

tabbedPane.setMnemonicAt(4, KeyEvent.VK_5); newFile(); panel.add("North", toolBarMain); panel.add("Center", tabbedPane); panel.add("South", panelSchedule); frame.setContentPane(panel); frame.setVisible(true); }

public void actionPerformed(ActionEvent e){

Object src = e.getSource(); if (src==menuMain.miExit){

if (JOptionPane.showConfirmDialog(null, "Czy zamknąć aplikacje?", "Zamykanie", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE )==0) System.exit(0);

}

else if (src==menuMain.miInfo){

JOptionPane.showMessageDialog(null, " Diagnostyczny Regułowo - Obiektowy System

Ekspertowy \n Autor programu: Marcin Skuba \n Wersja programu: "+version+" \n Kraków 2011 " );

}

else if (src==toolBarMain.bBVariable){ new DialogEditVariable(dBD.cVDB); }

else if (src==toolBarMain.bNew || src==menuMain.miNew){

int yes_no_cancel = JOptionPane.showConfirmDialog (null, "Czy zapiszać istniejący projekt?",

"Nowy projekt", JOptionPane.YES_NO_CANCEL_OPTION,

JOptionPane.QUESTION_MESSAGE); if (yes_no_cancel == 0) saveFile(); else if (yes_no_cancel == 2) return; newFile();

panelRaport.setText("Utorzono nowy projekt"); }

else if (src==toolBarMain.bSave || src==menuMain.miSave){ saveFile(); } else if (src==menuMain.miSaveAs){ saveAsFile(); } else if (src==toolBarMain.bOdbc){

boolean join = odbcES.connectDisconnectODBC(); panelSchedule.setOdbcConnection(join); }

else if (src==toolBarMain.bOpen || src==menuMain.miOpen){ openFile();

panelEditDB.panelEditDBGrph.clean(); }

else if (src==toolBarMain.bFact){

new DialogNewFact(this, vObjectFacts, dBD, panelViewGraph); }

else if(src==menuMain.miDescription){

panelViewGraph.panelViewGraphGraph.description=menuMain.miDescription.isSelected(); }

else if (src==toolBarMain.bCopy || src==menuMain.miCopy){ panelEditDB.panelEditDBGrph.copyRule();

}

else if (src==toolBarMain.bPaste || src==menuMain.miPaste){ panelEditDB.panelEditDBGrph.pasteRule();

}

else if (src==toolBarMain.bSchedule || src==menuMain.miSchedule){ boolean join = schedule.startStop();

panelSchedule.setOdbcSchedule(join); panelRaport.setText("Schedule status: "+join); }

else if (src==toolBarMain.bListObject){

new DialogListObject(this, vObjectFacts, dBD, panelViewGraph); }

}

public void newFile(){

panelViewGraph.removeAllGFacts(); vObjectFacts.removeAllElements(); schedule.removeAllElements(); panelEditDB.panelEditDBGrph.clean(); dBD.cVDB = new ESCollectionVariableDB(); dBD.cRDB = new ESColectionRulesDB(); panelEditDB.setESCollectionVariableDB(dBD.cVDB,dBD.cRDB); frame.setTitle("DRO_ES "+version+" - <bez nazwy>");

file=null; }

public void saveFile(){

if (file == null) saveAsFile(); else{

try{

FileOutputStream plik = new FileOutputStream(file); ObjectOutputStream ob = new ObjectOutputStream (plik); prepareObjectsToSeriablizable();

ob.writeObject(dBD); ob.close();

frame.setTitle("DRO_ES "+version+" - "+file.getName());

panelRaport.setText("Projekt zapisano do pliku \""+file.getName()+"\""); }

catch (IOException e){

panelRaport.setText("Błąd przy zapisywaniu pliku \""+file.getName()+"\" na dysk"); }

} }

public void prepareObjectsToSeriablizable(){

dBD.vObjects = new Vector();

for(int i=0; i<vObjectFacts.size(); i++){

ObjectFact ob = (ObjectFact)vObjectFacts.get(i);

if(ob==null) continue;

ESObjectSerializable obSer = new ESObjectSerializable(ob.idObjectDiagnostic,

ob.typeObjectDiagnostic, ob.description);

dBD.vObjects.add(obSer);

}

}

public void vector(Vector v ){

for(int i=0; i<v.size();i++){

ESRule rule = (ESRule)v.get(i);

ESConclusion con = (ESConclusion)rule.conclusion; }

}

public static String getExtension(File f) {

String ext = ""; String s = f.getName(); int i = s.lastIndexOf('.'); if (i > 0 && i < s.length() - 1) { ext = s.substring(i+1).toLowerCase(); } return ext; }

public void saveAsFile (){

JFileChooser fc;

File ff = new File(".//projects//"); fc = new JFileChooser(ff);

FileNameExtensionFilter filter = new FileNameExtensionFilter("DRO_ES project (.des)", "des"); fc.setFileFilter(filter);

int returnVal = fc.showSaveDialog(null);

if (returnVal == JFileChooser.APPROVE_OPTION) {

file = fc.getSelectedFile();

String nameFile = file.getPath(); if(!getExtension(file).equals("des"))

nameFile+=".des"; try{

FileOutputStream plik = new FileOutputStream(nameFile); ObjectOutputStream ob = new ObjectOutputStream (plik); prepareObjectsToSeriablizable();

ob.writeObject(dBD); ob.close();

frame.setTitle("DRO_ES "+version+" - "+file.getName());

panelRaport.setText("Projekt zapisano do pliku \""+file.getName()+"\""); }

catch (IOException e){

panelRaport.setText("Błąd przy zapisywaniu pliku \""+file.getName()+"\" na dysk"); }

} }

public void openFile(){

int yes_no_cancel=1;

String Plik = "<bez nazwy>"; if (file != null){

Plik = file.getName();

yes_no_cancel = JOptionPane.showConfirmDialog (null, "Czy zapiszać zmiany w pliku "+ Plik +"?",

"Nazwa", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); }

if (yes_no_cancel == 0){ saveFile(); } if (yes_no_cancel == 1){ newFile(); JFileChooser fc;

File ff = new File(".//projects//");

fc = new JFileChooser(ff);

FileNameExtensionFilter filter = new FileNameExtensionFilter("DRO_ES project (.des)", "des");

fc.setFileFilter(filter);

int returnVal = fc.showOpenDialog(null);

if (returnVal == JFileChooser.APPROVE_OPTION) {

file = fc.getSelectedFile();

try{

FileInputStream plik = new FileInputStream (file); ObjectInputStream ob = new ObjectInputStream (plik); dBD = (DBDate)ob.readObject();

ob.close();

DialogSerializable dialogSer = new DialogSerializable(); if(dialogSer.cancel) return;

frame.setTitle("DRO_ES "+version+" - "+file.getName());

W dokumencie Index of /rozprawy2/10413 (Stron 120-162)

Powiązane dokumenty