Praca Konkursowa -...

81
Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju 1 Praca Konkursowa Temat: Monitorowanie i wizualizacja z systemem powiadomień na urządzenia mobilne, parametrów aktywnych sterowników do kompensacji mocy biernej Wykonał: Promotor: Paweł Zabczyński mgr inż. Krzysztof Smyczek Adam Budzik mgr inż. Mirosław Czarnota Jastrzębie-Zdrój Marzec 2014

Transcript of Praca Konkursowa -...

Page 1: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

1

Praca Konkursowa

Temat: Monitorowanie i wizualizacja z systemem powiadomień na urządzenia mobilne,

parametrów aktywnych sterowników do kompensacji mocy biernej

Wykonał: Promotor: Paweł Zabczyński mgr inż. Krzysztof Smyczek Adam Budzik mgr inż. Mirosław Czarnota

Jastrzębie-Zdrój Marzec 2014

Page 2: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

2

Spis treści 1. Znaczenie kompensacji mocy biernej w przemyśle ..................................................5

2. Sterownik do aktywnej kompensacji współczynnika mocy DCRK ..........................6

2.1 Ogólna charakterystyka sterownika DCRK ........................................................6

2.2 Możliwości sterownika DCRK ..........................................................................6

2.3 Tryby pracy sterownika DCRK .........................................................................7

2.4 Nastawianie parametrów....................................................................................8

2.5 Nastawianie parametrów nadrzędnych ...............................................................9

2.6 Kodowanie odpowiedzi sterownika(sposób odczytania podany w rozdziale 5.1) ......................................................................................................................................... 10

3. Aplikacja PFC Controller ...................................................................................... 11

3.1 Wymagania i instalacja .................................................................................... 11

3.2 Konfiguracja aplikacji ..................................................................................... 11

3.3 Zdalny panel .................................................................................................... 13

3.4 Algorytm działania zdalnego panelu kontrolnego ............................................ 14

3.5 Komponent „Server Component” .................................................................... 15

3.6 Algorytm działania komponentu Server Component ........................................ 16

3.7 Baza danych .................................................................................................... 17

3.8 Powiadomienia z Orange API .......................................................................... 18

4. Strona internetowa do przeglądania pomiarów ...................................................... 20

4.1 Strona główna.................................................................................................. 22

4.2 Zakładka pomiary ............................................................................................ 23

4.3 Zakładka Wyślij pomiar .................................................................................. 24

4.4 Zakładka szczegóły ......................................................................................... 26

4.5 Zakładka tygodnie ........................................................................................... 27

4.6 Zakładka ustawienia ........................................................................................ 27

5. Analiza transmisji danych ..................................................................................... 28

5.1 Odczytanie parametrów ................................................................................... 28

5.2 Bufor ............................................................................................................... 30

6. Stanowisko baterii kondensatorów ........................................................................ 32

6.1 Schemat podłączenia baterii kondensatorów z kontrolerem .............................. 32

6.2 Obudowa ......................................................................................................... 34

Page 3: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

3

6.3 Obciążenie....................................................................................................... 34

7. Kompensacja mocy biernej.................................................................................... 35

7.1 Wstęp .............................................................................................................. 35

7.2 Obwód pomiarowy .......................................................................................... 36

7.3 Pomiary ........................................................................................................... 36

8. Wnioski i uwagi .................................................................................................... 40

9. Bibliografia ........................................................................................................... 41

10. Listingi ................................................................................................................ 41

10.1 Server Component ......................................................................................... 41

10.2 Strona internetowa ......................................................................................... 54

Page 4: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

4

WSTĘP

Praca została zainspirowana przez firmę „Proton” znajdującą się w Jastrzębiu-Zdroju, podczas praktyk uczniowskich. Celem było stworzenie systemu komunikacji, ułatwiającego zarządzanie oraz serwisowanie układów kompensacji mocy biernej sterowane przez kontrolery z serii DCRK używane przez tą właśnie firmę. Za ich pomocą można w prosty sposób kontrolować podstawowe parametry sieci elektrycznej w zakładzie, w którym są zamontowane. Pozwala to kontrolować poprawność działania baterii kondensatorów oraz pomaga znaleźć przyczyny ewentualnych problemów podczas eksploatacji.

Problemem jednak jest rozmieszczenie tych sterowników w wielu zakładach przemysłowych. Często są one znacznie oddalone od siebie oraz od siedziby firmy „Proton” co powoduje problem przy usuwaniu usterek spowodowanych różnymi chwilowymi stanami awaryjnymi sieci elektrycznej. Powoduje to konieczność przyjazdu wykwalifikowanego pracownika. Serwisant musi zabrać ze sobą dużą ilość sprzętu gdyż nie wie jakiego typu to może być usterka. Jednak sterowniki z serii DCRK posiadają komunikacje za pomocą interfejsu RS232.

Celem naszej pracy było stworzenie oprogramowania oraz zaprojektowanie infrastruktury komunikacyjnej ułatwiającej monitorowanie baterii kondensatorów z następującymi zamierzeniami:

Zbieranie i zapisywanie danych pomiarowych z okresu trzech tygodni Powiadamianie w czasie rzeczywistym o wystąpieniu stanu alarmowego Sprawdzanie stanu poszczególnych baterii w dowolnym czasie i miejscu Możliwość rozbudowy systemu Możliwość rozszerzenia rodzajów sterowników poza DCRK

Nasza prac składa się kilku elementów: Oprogramowanie dla klienta komunikujące się ze sterownikiem oraz serwerem Oprogramowanie dla serwisanta wspomagające zarządzające sterownikiem Oprogramowanie dla serwera przetwarzające dane

Podczas tworzenia oprogramowania zaszła potrzeba analizy sygnałów wysyłanych przez sterownik w celu poznania szczegółów komunikacji DCRK <=> PC. W celu analizy odczytu sygnałów wysyłanych przez sterownik został zbudowany układ buforujący. Podczas prac zostały również dokonane pomiary w celu porównania dokładności pomiarów sterownika DCRK z analizatorem sieci. Urządzenie buforujące, sposób analizy sygnałów wraz z pomiarami został opisany w części teoretycznej pracy.

Page 5: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

5

1. Znaczenie kompensacji mocy biernej w przemyśle Dla indywidualnego odbiorcy znaczenie mocy biernej jest do pominięcia, ze względu

na moce oraz charakter pobieranej mocy przez urządzenia gospodarstwa domowego. Jednak przez zakłady przemysłowe jest pobierana ogromna ilość mocy biernej, związanej ze znajdującymi się tam silnikami będącymi obciążeniem o charakterze indukcyjnym. Powoduje to pobierani z sieci energii która nie zostaje zużyta, jednak zakład musi za nią zapłacić. Ponadto energetyka narzuca ścisłe normy dotyczące pobieranej mocy biernej. Związane jest to ze współczynnikiem mocy który określa ile mocy jest zużyte w rzeczywistości. Energetyka określa że tgφ nie może przekraczać 0,4 co odpowiada współczynnikowi mocy cosφ = 0.93 i to właśnie ta wartość nie powinna być mniejsza. Za niespełnienie tych wymogów fabryki są karane za nieprzestrzeganie umów.

W niektórych miejscach Polski wytyczne mogą być różne, jednak są to lokalne zmiany związane np. z przeciążeniem starej sieci. Wtedy wytyczne są bardziej restrykcyjne i ustalane indywidualnie dla danego rejonu.

Efektem montażu odpowiednio dobranej baterii kondensatorów jest zmniejszenie kosztów za energie elektryczną zakładu. Jednak są one montowane często w przeróżnych miejscach polski przez firmę „Proton”. Kolejnym problemem jest fakt, że często są to stacje paliw czy też markety. W takich miejscach nie ma nikogo kto mógłby w kompetentny sposób opisać problemy.

Problemami przeważnie są takie sytuacje jak rozbudowa sieci elektrycznej w zakładzie bez zmian konfiguracji baterii kondensatorów. Kolejnym częstym przypadkiem jest dołączenie kolejnej linii produkcyjnej oraz rozruch wszystkich linii produkcyjnych w innych dniach niż zostały dokonane pomiary sieci w celu dobrania baterii oraz nastaw sterownika.

W takim przypadku pracownik musi pojechać w dane miejsce, niejednokrotnie znacznie oddalone od placówki firmy. Generuje to koszty np. podróży, hotelu, transportu dużej ilości sprzętu, wyłączenia pracownika z normalnego trybu pracy na kilka dni. Natomiast za pomocą systemu powiadomień firma może zaoszczędzić pieniądze oraz zaoferować dużo szybszy i sprawniejszy serwis co zwiększy jej konkurencyjność na rynku

Page 6: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

6

2. Sterownik do aktywnej kompensacji współczynnika mocy DCRK

2.1 Ogólna charakterystyka sterownika DCRK

Zgodnie z założeniami został wykorzystany sterownik DCRK 5 firmy Lovato. Charakteryzuje się on prostą obsługą oraz możliwością komunikowania się z nim, w celu uzyskania informacji na temat sieci elektrycznej w której pracuje. Jednakże producent sterownika nie dostarcza żadnych informacji na temat sposobu komunikacji: komend, ramek, parametrów transmisji oraz kodowaniu zwracanej odpowiedzi. Z kontrolerem DCRK 5 kompatybilne są również sterowniki DCRK 7, 8 oraz 12.

Komunikacja ze sterownikiem DCRK 5 odbywa się za pomocą interfejsu RS232. Sterownik posiada gniazdo RJ45 za pomocą którego wyprowadzone są sygnały TxD, RxD, RST oraz DTR. Pracują one jednak w standardzie TTL co wymusza zastosowanie przejściówki 51C11 również firmy Lovato.

2.2 Możliwości sterownika DCRK

DCRK jest regulatorem ciągłym, co jest jego istotnym atutem. Dzięki temu że kontroluje parametry wyjściowe zgodnie z zadanymi w czasie rzeczywistym daje możliwość kontroli przez pracowników danego zakładu parametrów sieci bez stosowania dodatkowych przyrządów pomiarowych podczas eksploatacji sieci elektrycznej w zakładzie.

Page 7: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

7

Wybrany kontroler umożliwia pomiar następujących wielkości charakterystycznych sieci elektrycznej:

Parametr Opis Jednostka Napięcie fazy RMS Pomiar napięcia dokonywany bezpośrednio do 5A

powyżej należy zastosować odpowiedni przekładnik prądowy

V

Prąd fazy RMS Nominalne napięcie to napięcie międzyfazowe sieci NN

A

cos φ Mierzony na jednej fazie --------------- Dzięki pomiarom sterownik może określić oraz przedstawić na ekranie swojego wyświetlacza następujące parametry:

Parametr Uwagi Jednostka V Wartość RMS V A Wartość RMS A

Δkvar kvar dla zadanego cosφ kvar Week P.F. Przeciętny tygodniowy współczynnik mocy ------- CURR% Procentowe przeciążenie kondensatorów % TEMP Temperatura otoczenia C lub F

SET cosφ Nastawiony cosφ ------

2.3 Tryby pracy sterownika DCRK

Opisywany regulator posiada dwa tryby manual oraz auto. Aktualny tryb pracy jest wskazywany przez diody sygnalizujące na obudowie sterownika bezpośrednio po prawej stronie napisów „Auto” oraz „Manual”. Podczas gdy wyświetlany jest „SET COSφ” nie możliwe jest zmiana trybu pracy. Rodzaj pracy jest zapisywany w pamięci EEPROM co powoduje że po załączeniu sterownika ponownie lub powrocie napięcia zasilania po przerwie w dostawie energii zostaje przywrócony stan pracy z przed tego zdarzenia.

Załączenie trybu manual jest sygnalizowane zapaleniem się czerwonej diody obok napisu MAN na sterowniku. Tryb ten pozwala na:

Załączanie/wyłączanie ręczne dowolnego stopnia baterii kondensatorów Ręczna konfiguracja stopni, jest utrzymywana nawet po zaniknięciu napicia.

Gdy napięcie powróci oryginalne ustawienia stopni są przywracane

Załączenie trybu manual następuje po wciśnięciu przycisku MAN/AUTO na 1s (w zależności jaki jest aktualny wybrany tryb zostanie załączony trym manual lub auto). Jeśli aktualnie są wyświetlane inny pomiar niż cosφ można szybko przejść do niego przytrzymując przycisk MODE aż do zgaśnięcia kontrolki danego pomiaru. Załączenie/wyłączenie danego stopnia następuje po jego wybrani za pomocą strzałek oraz wciśnięciu przycisku MODE.

Page 8: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

8

Jeśli dioda obok trybu pracy manual miga, oznacza to proces rozładowywania danego stopnia. Po wykonaniu operacji dioda powraca do normalnego świecenia.

W trybie automatycznym sterownik:

Dobiera optymalną konfiguracje załączonych stopni baterii kondensatorów do zadanego współczynnika cosφ

Sygnalizacja stanu rozładowywania danego stopnia baterii kondensatorów jest sygnalizowana analogicznie do trybu manual. Różnica polega na tym, że jest to robione za pomocą diody sygnalizującej tryb auto.

Przy wyborze kryterium, według którego ma dokonywać regulacji, bierze pod uwagę takie parametry jak moc danego stopnia, ilość operacji załączenia i wyłączenia, całkowity czas pracy, czas rozładowania

2.4 Nastawianie parametrów By ustawiać parametry podłączonej baterii(co jest niezbędne do prawidłowej pracy

regulatora) należy wykonać następujące czynności:

Przejść w tryb maual(jeśli nie jest wybrany) Wcisnąć przycisk MODE i przytrzymać 5s (do pojawienia się na wyświetlaczu

napisu SET) Wybór parametru który ma zostać zmieniony dokonuje się poprzez przyciski

strzałek By zmienić wybrany parametr należy wcisnąć przycisk MAN/AUTO Po wybraniu parametru można dokonać zmiany jego wartości poprzez

wciskanie strzałek góra/dół Aby powrócić i zapisać ustawiony parametr należy nacisnąć przycisk MODE Po ustawieniu parametrów po chwili sterownik automatycznie wyjdzie z trybu

SET

Opis nastawianych parametrów:

Parametr Opis Zakres Wartość domyślna

P.01 Strona pierwotna przekładnika prądowego [A] OFF – 10 000 OFF P.02 Moc najmniejszego stopnia baterii kondensatorów

[kvar] 0.10 – 300 1.00

P.03 Znamionowe napięcie baterii kondensatorów [V] 80 - 750 400 P.04 Maksymalny czas rozładowania baterii kondensatorów

[s] 5 - 240 60

P.05 Czułośc [s] 5 - 240 60 P.05 Mnożnik ostatniego stopnia operacyjnego lub nastawa

ostatniego wyjścia alarmowego 0 – 16 noA, ncA, Fan

0

P.06 Mnożnik pierwszego stopnia operacyjnego 0 – 16 0 P.06 Mnożnik drugiego stopnia operacyjnego 0 – 16 0 P.06 Mnożnik przedostatniego stopnia operacyjnego lub

nastawa wyjścia alarmowego 0 – 16 noA, ncA, Fan

0

Page 9: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

9

Mnożnik stopnia operacyjnego jest to wielokrotność mocy najmniejszego stopnia, za jej pomocą określa się moc kolejnych stopni.

Ostatni stopień jego numer jest zależny od sterownika(numer przy DCRK oznacza ilość możliwych stopni). Oznacza on ostatni wyjście które może być zarówno wejściem sygnalizującym stan alarmowy jak i również wyjście dla ostatniego stopnia baterii kondensatorów.

2.5 Nastawianie parametrów nadrzędnych

Pod nazwą parametry nadrzędne należy rozumieć wskazanie w ustawieniach sterownika parametrów sieci w jakiej ma pracować.

By ustawić parametry nadrzędne należy wykonać następujące czynności:]

Wybrać tryb manual jeśli nie jest załączony Nacisnąć przycisk MODE na 5s (do pojawienia się na wyświetlaczu napisu

SET) Nacisnąć jednocześnie przyciski obu strzałek na 5s (do pojawienia się napisu

na wyświetlaczu AD.S) Wybór parametrów oraz ustawianie analogicznie jak dla ustawiania wartości

nastaw parametrów

Wartości możliwe do ustawienia:

Parametr Opis Zakres Wartość domyślna

1 2 3 4 P.11 Typ podłączenia 3PH 3-fazowy

1PH 1-fazowy 3PH

P.12 Rozpoznawanie podłączonego przekładnika prądowego

AUT- automatyczny DIR-bezpośrednie REV odwrotne

AUT

P.13 Rozpoznawanie częstotliwości AUT-automatyczne 50H-50Hz 60H60Hz

AUT

P.14 Dostosowanie stopnia mocy ON-załączone OFF-wyłączone

OFF

P.15 Dostosowanie trybu STD Standard BND Taśma

STD

P.16 Tryb załączanie stopni STD Standard L in Liniowy

STD

P.17 Cosφ przy generatorze OFF 0,80IND…0,80CAP

OFF

P.18 Czułość wyączaia OFF 1..600 s OFF P.19 Wyłączanie stopni przy przejściu w tryb manual OFF Wyłączone

ON Załączone OFF

P.20 Próg alarmu przeciążenia kondensatora OFF 100…150%

125%

Page 10: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

10

P.21 Próg przeciążenia dla automatycznego wyłączenia stopnia

OFF 100…200%

150%

P.22 Czas resetowania punktu przeciążenia 1…240 h 24h P.23 Czas resetowania punktu przeciążenia 1…30 min 5 min P.24 Jednostka mierzonej temperatury °C Celsius

°F Farenheit °C

P.25 Start temperatury 0…100 °C 32…212 °F

55°C

P.26 Stop temperatury 0…100 °C 32…212 °F

50°C

P.27 Alarm progu temperaturowego 50…100 °C 122…212 °F

60°C

2.6 Kodowanie odpowiedzi sterownika(sposób odczytania podany w rozdziale 5.1)

1 2 3 4 5 6 7 8 9 10

11

12

13

14

15

16

17

18

19

20

21

0 X X 0 0 0

War

tość

0 0

Mno

żnik

Dop

ełni

enie

0 0

Mno

żnik

Dop

ełni

enie

0 0 0 0 X X

Bity

ko

ntro

lne

Wsp

ół. m

ocy

Nap

ięci

e

Prąd

Bity

ko

ntro

lne

Napięcie i prąd kodowane są w następujący sposób: Mnożnik (0,1,2) * 256 + dopełnienie (0-255).

Page 11: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

11

3. Aplikacja PFC Controller

Program został napisany w języku programowania C++ w środowisku Qt, które pozwala na tworzenie aplikacji na wszystkie systemy operacyjne: Windows, Linux, Mac OS. Szeroki wybór bibliotek dostępnych w Qt pozwolił na stworzenie aplikacji, która łączy się z serwerem PHP, bazą danych MySQL oraz portem szeregowym w komputerze. Dodatkowym wymaganiem jest serwer PHP oraz MySQL.

3.1 Wymagania i instalacja

PFC Controller powstał w środowisku Qt dzięki czemu może zostać skompilowany na każdy system operacyjny. Do działania powiadomień oraz serwisu internetowego wymagany jest serwer PHP oraz baza danych MySQL pozwalająca na dostęp z zewnątrz.

3.2 Konfiguracja aplikacji

Przed przystąpieniem do pracy należy uzupełnić dane do połączenia z bazą danych MySQL oraz ustalić numery telefonów do powiadomień i nazwę stacji na której pracuje aplikacja. W tym celu należy przejść do ustawień, klikając w ikonkę klucza w prawym górnym rogu okna programu. Jeśli program nie wykryje prawidłowych danych do połączenia z bazą danych przycisk do uruchamiania pomiarów będzie zablokowany.

Page 12: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

12

Rysunek 1 - Okno ustawień aplikacji PFC Controller

W ustawieniach należy uzupełnić:

Adres serwera MySQL Nazwę użytkownika bazy danych Hasło użytkownika bazy danych Nazwę bazy danych

W celu uniknięcia pomyłek program po naciśnięciu przycisku „Sprawdź i zapisz” sprawdza poprawność wprowadzonych danych i wyświetla stosowny komunikat.

W formularzu „Dane powiadomień” należy określić do dwóch numerów telefonów, na które mają być przesyłane powiadomienia o stanach alarmowych. Ze względu na wykorzystanie do tych celów Orange API, numery telefonów muszą być z sieci Orange. W polu nazwa stacji można określić nazwę miejsca w którym znajduje się bateria kondensatorów w celu lokalizacji ewentualnych alarmów.

Wszystkie wprowadzone ustawienia zapisywane są w pliku pfc.ini, znajdującym się w głównym katalogu programu. Dzięki czemu przy ponownym uruchomieniu programu, ustawienia automatycznie wczytywane są z pliku konfiguracyjnego. Umożliwia to również szybkie przenoszenie programu na inne komputery wraz z ustawieniami.

Page 13: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

13

3.3 Zdalny panel Aplikacja PCF Controler oferuje zdalny pulpit dla osoby nadzorującej. Została

zaprojektowania w taki sposób by odczyt pomiarów był intuicyjny oraz zawierała tylko niezbędne informacje. Wygląd oraz dobór parametrów wyświetlanych wraz z ich interpretacją graficzną został z góry podyktowany przez firmę „Proton”.

Wyświetlane alarmy są odpowiednio opisane by ułatwić ich identyfikacje. Po uruchomieniu programu wystarczy w opcjach wybrać port do którego sterownik został podłączony oraz kliknąć przycisk Start. Po uruchomieniu programu, jeśli sterownik został prawidłowo podłączony do komputera poprzez przejściówkę zostanie zainicjalizowane połączenie. Gdy program połączy się z kontrolerem, otrzyma od niego dane które wyświetla za pomocą wartości liczbowych oraz wybrane pomiary w postaci bargraf-ów. Graficzne przedstawienie parametrów pozwala na szybkie określenie poprawności działania układu. Całość może wyglądać jak na powyższym obrazku.

W programie zostały przewidziane sytuacje awaryjne takie jak brak połączenia ze sterownikiem czy zbyt niskie/wysokie wartości poszczególnych parametrów. Przykład sygnalizacji oraz sposobu ich prezentacji przedstawia również powyższy screen z programu. Wartości nie mieszczące się w przyjętych normach wywołują zmianę koloru bargrafu wielkości która nie mieści się w błędzie. Oprócz zmiany koloru wyświetla się pod danymi wskaźnikami błąd związany z nim w symbolicznej postaci Ax, gdzie x to numer błędu. Wyjaśnienie symbolicznych nazw które mogą się pojawić są równolegle wyświetlane podczas występowania danego stanu awaryjnego pod pomiarami mocy.

W przypadku zerwania połączenia z sterownikiem na dłużej niż 10 sekund, w pasku statusu programu zostaje wyświetlony błąd wraz z jego opisem. Czas ten został ustalony w celu wyeliminowania możliwości przypadkowego wystąpienia błędu związanego z różnego rodzaju opóźnieniami i przypadkowymi zakłóceniami podczas transmisji danych.

Page 14: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

14

3.4 Algorytm działania zdalnego panelu kontrolnego

Rysunek 2 - Algorytm głównego okna programu

Page 15: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

15

Cykl działania programu jest stosunkowo prosty. Po uruchomieniu programu, wybraniu portu i kliknięciu przycisku Start następuje otwarcie portu oraz wysłanie ramki danych do sterownika. Gdy zostanie odebrana ramka zwrotna, dane zostają zapisane do bufora portu szeregowego i odczytane oraz przetworzone w celu uzyskania zakodowanych w niej wartości. Po odczytaniu, liczby zostają odświeżone oraz zapisane do pliku. W przypadku wystąpienia błędu z komunikacją wszystkie wartości wskazywane przyjmują 0 oraz zostaje wygenerowany w pliku odpowiedni komunikat.

3.5 Komponent „Server Component” Komponent Server służy do przesyłania zebranych pomiarów do zewnętrznej bazy

danych MySQL co 15 minut. Dodatkowym zadaniem komponentu Server jest monitorowanie pomiarów i wykrywanie stanów alarmowych (opisane w 2.4 Stany Alarmowe). W przypadku wykrycia alarmu aplikacja komunikuje się z serwerem, który za pośrednictwem Orange API przesyła powiadomienia USSD na wcześniej zdefiniowane telefony komórkowe. W powiadomieniu zawarta jest nazwa stacji, na której wykryto stan alarmowy oraz treść alarmu. Dodatkowo aplikacja przy pomocy Orange API sprawdza i informuje użytkownika o tym czy powiadomienie zostało dostarczone prawidłowo.

Rysunek 3 - Główne okno programu

Główne okno komponentu Server Component składa się z przycisków:

Page 16: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

16

Test powiadomienia – przesyła ostatnie lub testowe powiadomienie na telefon Manualny pomiar – pobiera ostatnie pomiary i przesyła je do bazy danych

oraz sprawdza stan alarmowy. Rozpocznij pomiary – przycisk uruchamiający zegar programu, który co 15

minut pobiera pomiary i przesyła je do bazy danych oraz wykrywa alarmy Przycisk dostępu do ustawień, symbolizowany ikoną klucza

Program wyświetla w swoim oknie następujące informacje:

Data ostatniego przesłanego pomiaru Treść ostatniego wykrytego alarmu Status ostatniego powiadomienia

3.6 Algorytm działania komponentu Server Component

Page 17: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

17

3.7 Baza danych Baza danych znajduje się na zewnętrznym serwerze i zawiera następujące tabele:

Tydz1, Tydz2, Tydz3. Każda tabela zawiera pola: ID, pom1, pom2, pom3, data, BLAD, które kolejno oznaczają: Identyfikator pomiaru, wartość napięcia, wartość prądu, wartość cos fi, data wykonania pomiaru oraz kod błędu jeśli taki wystąpił. Wszystkie wartości pomiarów są typu zmiennoprzecinkowego.

Aplikacja PFC Controller wykrywa gdy tabela Tydzień 1 zostanie zapełniona i przenosi dane o jedną tabelę niżej a następnie czyści i przygotowuje tabelę Tydzień 1 na zapełnienie nowymi pomiarami, tak jak przedstawia poniższa grafika.

Dzięki takiemu rozwiązaniu użytkownik systemu w każdej chwili ma dostęp do wartości pomiarów i statystyk z trzech ostatnich tygodni.

Tydzień 1

Tydzień 2

Tydzień 3

Page 18: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

18

3.8 Powiadomienia z Orange API

Rysunek 4 - Powiadomienie na telefonie komórkowym

Do wysyłki powiadomień na telefony komórkowe, wykorzystywana jest infrastruktura operatora Orange udostępniona dzięki współpracy z firmą Orange Polska w ramach Orange Labs. Powiadomienia wysyłane na telefony to powiadomienia USSD.

Rysunek 5 - Serwera PHP odpowiedzialny za komunikację z Orange API i wysyłkę powiadomienia.

Page 19: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

19

Po wywołaniu funkcji w aplikacji, dane do powiadomienia przesyłane są w formie zapytania HTTP na serwer napisany w języku PHP, który je odpowiednio przetwarza i konstruuje zapytanie do Orange API. W odpowiedzi zwrotnej od Orange, serwer otrzymuje identyfikator powiadomienia, który następnie jest przesyłany z powrotem do aplikacji PFC Controller. Aplikacja sprawdza przy pomocy osobnego zapytania do serwera PHP status wysyłki powiadomienia. Próby powtarzane są co 10 sekund. W przypadku pięciu nieudanych prób wysyłki, w programie uaktywnia się dodatkowy przycisk pozwalający na ręczną próbę wysyłki powiadomienia oraz sprawdzenia statusu.

Wykrycie alarmu Serwer PHP

Orange API i wysłanie

powiadomienia

Odbiór identyfikatora

powiadomienia przez Serwer

PHP

Aplikacja PFC Controller.

Sprawdzenie statusu wysyłki.

Page 20: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

20

Page 21: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

21

4. Strona internetowa do przeglądania pomiarów Strona została stworzona do jak najłatwiejszego odczytywania i wysyłania danych.

Pomiary przedstawione są w formie tabeli oraz wykresów danych. Aplikacja internetowa została podzielona na:

nagłówek w którym znajduje się dostęp do Profilu użytkownika oraz Ustawień aplikacji internetowej jak i przycisk do Wylogowania

menu opcji, z rozwijanymi zakładkami główne okno do przeglądania pomiarów

Witryna powstała również z myślą o urządzeniach mobilnych i jest w pełni

responsywna.

Page 22: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

22

4.1 Strona główna

Na stronie głównej przedstawione są podstawowe pomiary z ostatniego tygodnia w dwóch formach: wykresu oraz tabeli. Dzięki wykresowi pracownik może w łatwy sposób zaobserwować w jakich godzinach i w jakie dni zmieniają się parametry pracy baterii kondensatorów. Wykresy przedstawia wartości: napięcia, natężenia oraz cos Fi na osi czasu.

Page 23: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

23

Tabela pozwala na wygodne przeglądanie tych samych wartości co na wykresie. Ponadto pozwala na wyszukiwanie, sortowanie i filtrowanie pomiarów. W celu zwiększenia przejrzystości domyślnie wyświetlane jest 10 ostatnich pomiarów, jednak w każdej chwili można zmienić tą wartość wybierając z listy wyboru ile pomiarów ma być wyświetlanych na stronę. W razie alarmu w kolumnie błąd, wyświetla się kod błędu.

4.2 Zakładka pomiary

Page 24: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

24

Korzystając z zakładki pomiary, można je przeglądać w formie wykresu i tabeli wartości tylko jednego parametru (napięcie, natężenie lub cos Fi). Pozwala to szybszą i bardziej dokładną analizę wybranego parametru. Wykres na takiej stronie jest również bardziej przejrzysty i jeszcze łatwiejszy do odczytania.

4.3 Zakładka Wyślij pomiar

W przypadku wykrycia nieprawidłowości w działaniu pracy baterii kondensatorów, osoba zarządzająca system jest w stanie przesłać powiadomienie na telefon pracownika z pomiarami z wybranej godziny. Na stronie znajduje się formularz do wysyłki powiadomienia oraz tabela pomocnicza, pozwalająca na szybkie znalezienie i wysłanie pomiaru. W formularzu wystarczy podać datę pomiaru i opcjonalnie numer telefonu, na który ma zostać wysłane. Domyślnie jest to numer podany w ustawieniach aplikacji internetowej.

Page 25: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

25

W tabeli pomocniczej przy każdym pomiarze znajduje się przycisk do szybkiej wysyłki, po którego kliknięciu powiadomienie USSD zostanie wysłane na uprzednio zdefiniowany numer w ustawieniach aplikacji.

Page 26: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

26

4.4 Zakładka szczegóły

W zakładce szczegóły przedstawione są pomiary z ostatniego tygodnia poszerzone o obliczone przez system wartości mocy czynnej, biernej, pozornej oraz Tg Fi. Dzięki tej opcji pracownik nie musi obliczać najpopularniejszych wartości, których sterownik nie jest w stanie przesłać do systemu.

W tabeli zamieszczone są wartości pomiarów dla: napięcia [V], natężenia [A], Cos fi, moc czynna [W], moc bierna [var], moc pozorna [VA] oraz Tg fi.

Page 27: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

27

4.5 Zakładka tygodnie

Zakładka tygodnie pozwala na wybranie i przeglądanie pomiarów do 3 tygodni wstecz. Dane przedstawiane są podobnie jak na stronie głównej: w formie wykresu oraz tabeli.

4.6 Zakładka ustawienia

W ustawieniach można zdefiniować domyślny numer do wysyłki powiadomień oraz dane do Orange API i bazy danych.

Page 28: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

28

5. Analiza transmisji danych Podczas prac nad oprogramowaniem zaszła konieczność analizy danych ze względu

na brak dokumentacji dotyczącej protokołu komunikacji. Jedyną posiadaną wiedzą na ten temat to informacja o wykorzystywaniu przez sterownik magistrali szeregowej RS232. Dzięki tej wiedzy zadanie zostało nieco ułatwione.

5.1 Odczytanie parametrów Do odczytu podstawowych parametrów został wykorzystany oscyloskop. Dzięki

podłączeniu równoległemu do linii magistrali została oczytana wartość prędkości transmisji. Prędkość transmisji została uzyskana poprzez odczytanie długości trwania pojedynczego bitu. Na tej podstawie za pomocą zależności 1/t można obliczyć częstotliwość z jaką są przesyłane dane. Ponieważ prędkości transmisji szeregowej są zestandaryzowane, więc nie było problemu z dopasowaniem odpowiedniej.

Kolejny etapem było oczytanie długości ramki. Można to uzyskać za pomocą oscyloskopu. Należy kolejno:

Zatrzymać przebieg podczas transmisji Zapisać na kartce kolejno stany logiczne odpowiadające kolejnym odcinkom

czasu zaczynając od pierwszego. Pierwszy bit można rozpoznać po tym, że przed nim występuje przez dłuższy czas stan niski(odpowiadający wartości logicznej „1” dla RS232). Jest to nasza baza pomiarowa wg. której odmierzamy i dzielimy przebieg na odcinki o szerokości równej czasów trwania 1 impulsu.

Po przepisaniu ciągu bitów powtarzamy wszystko od początku dla kolejnej

ramki danych

Page 29: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

29

Gdy posiadamy dane z kilku ramek wysyłanych zaczynamy szukać następującej zależności: cyklicznego występowania stanu 1 w zapisanych ciągach z uwzględnieniem minimalnej oraz maksymalnej długości ramki.

Na tej podstawie można określić ilość bitów stop Gdy mamy bity stop możemy już określić długość poszczególnych

podstawowych ramek dla RS232. Długość ramki jest różnicą między n+1 bitem stop a n-tym bitem stop

Po określeniu długości ramki należy określić czy występuje bit parzystości Należy sprawdzić w kilku wydzielonych ramkach czy bit występujący

bezpośrednio przed bitem stop pokrywają się z możliwością sprawdzania parzystości dla transmisji RS232

Na koniec pozostaje określenie ilości danych w ramce Liczba bitów danych to Bd = (B n+1 - B n) + Bs + Bp

B - bit/-y Bs – bit/- stop Bp – bit parzystości

Page 30: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

30

5.2 Bufor Podczas rozkodowywania komunikacji między sterownikiem a komputerem PC zaszła

potrzeba zbudowania urządzenia, które odseparowałoby układ pomiarowy i posiadało dużą impedancją wejściową. Konieczność taka zachodzi z powodu specyfikacji elektrycznej magistrali RS232. Jest ona przygotowana dla podłączenia 2 urządzeń, natomiast po wpięciu równolegle odbiornika pracującego według specyfikacji RS232 nie jest możliwe odczytanie komunikacji, ze względu na duże zakłócenie uniemożliwiające przesyłanie danych.

Schemat przedstawia bufor służący do analizy oraz podsłuchu transmisji między urządzeniami komunikującymi się za pomocą interfejsu RS232. Układ składa się z dwóch wtórników napięciowych oraz dwóch wzmacniaczy w konfiguracji wzmacniacza odwracającego z pętlą ujemnego sprzężenia zwrotnego oraz wzmocnieniem równym jedności. Wtórniki napięciowe służą tylko do zapewnienia dużej impedancji wejściowej. Wzmacniacze odwracające służą natomiast do zapewnienia dużej impedancji wejściowej jak i pełnią funkcje negatora ze względu na to że linie sterujące w RS232 pracują w dodatniej logice.

Układy ICL232 służą do konwersji standardu poziomów logicznych dla RS232 na TTL by umożliwić podpięcie analizatora logicznego, gdyż takie analizatory pracują tylko dla napięć dodatnich. Jednak te konwertery służą do zamiany poziomów napięć tylko linii przesyłu danych co wymusza właśnie zastosowanie negatora na wejściu dla linii sterujących

Page 31: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

31

Dzięki zbudowanemu urządzeniu można analizować sygnały za pomocą odpowiednich programów na PC, podłączając się do linii danych oraz używać analizatora stanów logicznych w celu ustalenia sekwencji stanów linii sterujących. Stworzone stanowisko umożliwia poznanie przez uczniów oraz badanie transmisji standardu RS232 na konkretnych, rzeczywistych przykładach.

Page 32: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

32

6. Stanowisko baterii kondensatorów Podczas prac, do wykonania testów zaszła potrzeba stworzenia stanowiska baterii

kondensatorów, kontrolowanej przez sterownik do kompensacji mocy biernej wraz z obciążeniem, które stanowił silnik pierścieniowy, trójfazowy o mocy 2,2kW. Stanowisko zawiera 3 stopnie baterii kondensatorów kolejno o mocy:

0,83 kvar 0,83 kvar 1,67 kvar

6.1 Schemat podłączenia baterii kondensatorów z kontrolerem Stworzone stanowisko zostało połączone zgodnie ze stworzonym wcześniej

schematem, który został sporządzony na podstawie dokumentacji producentów zarówno sterownika jak i baterii kondensatorów. Ponieważ stanowisko zawiera 3 stopnie baterii kondensatorów, więc pozostają jeszcze wolne przekaźniki sterownika.

Do załączania poszczególnych stopni zostały użyte styczniki o napięciu znamionowy cewek Un = 230V. Wymusza to zastosowanie transformatora obniżającego napięcie 400/230, gdyż jedyne dostępne napięcie w układzie to napięcie międzyfazowe. Do zabezpieczenia układu przed ewentualnym uszkodzeniem podczas eksploatacji, zostały zastosowane wyłączniki nadprądowe.

Page 33: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

33

Styczniki trójfazowe zastosowane w układzie

Transformator zmniejszający napięcie

Page 34: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

34

6.2 Obudowa W celu zabezpieczenia przed dostępem do elementów obwodu będących pod

napięciem, cały obwód wraz z baterią kondensatorów został umieszczony w skrzynce elektrycznej. Takie rozwiązanie daje możliwość zobaczenia przez uczniów rzeczywistego rozwiązania montażu urządzeń. Powoduje ono również wygodniejszy sposób użytkowania stanowiska podczas pomiarów.

6.3 Obciążenie By umożliwić testowanie oraz pomiary, do stanowiska z baterią kondensatorów

należało dołączyć obciążenie. Do zrealizowania tego zadania został zastosowany silnik trójfazowy pierścieniowy wraz z hamownicą.

Hamownica składa się z elektromagnesu oraz tarczy aluminiowej zamocowanej na wale silnika. Płyta paramagnetyczna znajduje się w szczelinie powietrznej elektromagnesu. W niej indukują się prądy wirowe pod wpływem SEM rotacji, które oddziaływują z polem magnetycznym elektromagnesu i w konsekwencji powstaje moment oporowy. Można go zmieniać regulując natężenie prądu cewki hamownicy..

Page 35: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

35

7. Kompensacja mocy biernej

7.1 Wstęp W obwodach prądu trójfazowego występują trzy rodzaje mocy : moc czynna

(fragment energii zamieniany na pracę) , bierna (fragment niewykorzystanej energii)

i pozorna (geometryczna suma mocy czynnej i biernej). Wyróżniamy energie bierną

indukcyjną i pojemnościową. Większość odbiorników w sieci ma charakter

indukcyjny np. silniki, piece indukcyjne. Jak wiadomo moc bierna jest

niewykorzystywana, i powstają straty przesyłu energii. Można je zmniejszyć poprzez

poprawę współczynnika mocy dołączając baterie kondensatorów, równolegle do

obciążenia. Najlepiej byłoby jeśli współczynnik mocy byłby bliski wartości 1.

Wartość współczynnika mocy regulowana jest przez dostawców energii.

Page 36: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

36

7.2 Obwód pomiarowy

7.3 Pomiary

7.3..1 Bez kompensacji mocy – praca jałowa silnika.

Wyniki pomiarów przedstawione w powyższej tabeli pokazują wartości parametrów pracy silnika pierścieniowego trójfazowego podczas pracy jałowej. Różnice w wartościach poszczególnych pomiarów mogą wynikać z błędu pomiarowego, niesymetryczności sieci zasilającej lub też z niedokładnego wykonania np. uzwojenia wirnika. Współczynnik mocy jest niski.

7.3..2 Bez kompensacji mocy – praca silnika z obciążeniem.

Przy obciążeniu silnika hamownicą wiroprądową zasilaną ze źródła prądu stałego, można zauważyć wzrost wartości mocy czynnej i zmianę wartości płynących prądów.

Napięcie [V]

Prąd [A]

Moc

Cos Ø

Siła hamująca [Nm]

V12 V23 V31 I1 I2 I3 P[KW] S[KVA]

Q[KVAR]

Wartość 409.3 408.9 407.5 4.936 5.085 5.179 0.467 3.584 - 3.554 0.13 -

Napięcie [V]

Prąd [A]

Moc

Cos Ø

Siła hamująca [Nm]

V12 V23 V31 I1 I2 I3 P[KW] S[KVA] Q[KVAR]

Wartość 408.8 407.4 406.1 5.733 5.086 5.977 2.400 4.122 - 3.352 0.25 15.225

Page 37: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

37

7.3..3 Z kompensacją mocy – stopień 1 podłączenia baterii kondensatorów praca jałowa silnika

Dzięki dołączeniu pierwszego stopnia baterii kondensatorów widać znaczny spadek wartości poszczególnych prądów płynących w obwodzie. Moc bierna dzięki takiemu zabiegowi też maleje i wskazuje na to również wartość współczynnika mocy biernej.

Napięcie [V]

Prąd [A]

Moc

Cos Ø

Siła hamująca [Nm]

V12 V23 V31 I1 I2 I3 P[KW] S[KVA]

Q[KVAR]

Wartość 412.0 410.3 407.4 3.589 3.886 3.952 0.494 2.699 - 2.654 0.18 -

Page 38: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

38

7.3..4 Z kompensacją mocy – stopień 1 i 2 podłączenia baterii kondensatorów praca jałowa silnika

Dołączenie kolejnego stopnia baterii skutkuje jeszcze dalszą poprawą współczynnika

mocy biernej . Poszczególne wartości prądów i wartość mocy biernej zmalały.

7.3..5 Z kompensacją mocy – stopień 1,2 i 3 podłączenia baterii kondensatorów praca jałowa silnika

Przy dołączeniu ostatniego stopnia, można stwierdzić iż prądy, moc pozorna i bierna zmalały i to znacznie. Wartość mocy biernej zmniejszyła się w przybliżeniu o 2,76[KVAR] a współczynnik mocy wzrósł o 0.38.

Napięcie [V]

Prąd [A]

Moc

Cos Ø

Siła hamująca [Nm]

V12 V23 V31 I1 I2 I3 P[KW] S[KVA]

Q[KVAR]

Wartość 409.3 407.9 409.0 2.232 2.476 2.640 0.475 1.727 - 1.661 0.27 -

Napięcie [V]

Prąd [A]

Moc

Cos Ø

Siła hamująca [Nm]

V12 V23 V31 I1 I2 I3 P[KW] S[KVA]

Q[KVAR]

Wartość 409.8 410.6 407.7 1.153 1.287 1.534 0.480 0.929 - 0.796 0.51 -

Page 39: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

39

7.3..6 Z kompensacją mocy – stopień 1,2 i 3 podłączenia baterii kondensatorów, praca silnika z obciążeniem.

Przy obciążeniu i podłączeniu wszystkich stopni baterii kondensatorów wyraźnie widać że współczynnik mocy biernej jest w przybliżeniu równy jeden a moc bierna w porównaniu do pomiaru bez kompensacji spadła o 2.74[KVAR]. Bez baterii kondensatorów nie był by możliwy tak wysoki współczynnik mocy i takie zmniejszenie strat energii.

Napięcie [V]

Prąd [A]

Moc

Cos Ø

Siła hamująca [Nm]

V12 V23 V31 I1 I2 I3 P[KW] S[KVA]

Q[KVAR]

Wartość 404.3 403.2 406.0 3.484 3.259 3.710 2.362 2.439 - 0.611 0.96 15.225

Page 40: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

40

8. Wnioski i uwagi Uwagi:

1) Program został napisany na potrzeby firmy Proton, której oczekiwaniami był prosty i przejrzysty program oraz strona internetowa do przeglądania pomiarów. Aplikacja powstała zgodnie z powyższymi założeniami i oferuje minimalistyczny wygląd, czytelne i łatwe do przeglądania pomiary oraz intuicyjną nawigację po stronie internetowej.

2) Istnieje możliwość odbioru pomiarów ze sterownika na komputer. 3) Opracowano oprogramowanie pozwalające na wyświetlanie pomiarów w oknie

aplikacji oraz ich przesyłanie do bazy danych MySQL. 4) Program informuje o stanach alarmowych i wysyła powiadomienia USSD na telefony

komórkowe, co pozwala na szybką reakcję ze strony firmy. 5) Opracowany system pozwala lokalizować i rozróżniać zakład, w którym został

zainstalowany konkretny kontroler. 6) Utworzono stronę internetową pozwalającą na przeglądanie i analizę zebranych

pomiarów. 7) Stworzono urządzenie służące do wspomagania odczytu komunikacji między

kontrolerem, a komputerem.

Wnioski:

1) System pozwala firmie na zdalne monitorowanie i analizowanie pobranych pomiarów. Wykresy dostępne na stronie umożliwiają łatwą analizę stanów sterownika oraz wykrycie zbyt małych wartości współczynnika mocy i zbyt dużych wartości prądów fazowych związanych z różnym cyklem pracy zakładów przemysłowych (inny rozkład obciążeń w poszczególnych dniach tygodnia). Dzięki temu firma nie musi każdorazowo wysyłać pracownika na miejsce gdzie znajduje się kompensator mocy biernej.

2) Przeglądając pomiary na stronie internetowej można przesłać informacje na telefon innego pracownika, który może znajdować się w pobliżu zakładu, w którym wystąpiła awaria co pozwala na skrócenie czasu reakcji na zaistniały problem.

3) Powstałe stanowisko badawczo-pomiarowe pozwala analizować sposób przesyłu pakietów sygnału wysyłanych przez kontroler za pomocą portu szeregowego. Stanowisko to może być więc wykorzystane na zajęciach laboratoryjnych w procesie dydaktycznym szkolenia przyszłych techników informatyków, mechatroników czy też elektryków.

Page 41: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

41

9. Bibliografia Qt: http://qt-project.org

PHP: http://www.php.net MySQL: http://www.mysql.com

Bootstrap: http://getbootstrap.com

Instrukcja obsługi sterownika: http://www.lovatoelectric.pl Ikony wykorzystane w aplikacji PFC Controller: http://www.tutorial9.net/downloads/108-mono-icons-huge-set-of-minimal-icons/

10. Listingi

10.1 Server Component

10.1..1 Dana.h #ifndef DANA_H #define DANA_H #include <QObject> #include <QString> #include <QStringRef> #include <QApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> #include <QLabel> #include <QSqlError> #include <QString> #include <QtCore/QCoreApplication> #include <QFile> #include <QtCore/QTextStream> #include <QNetworkAccessManager> #include <QUrl> #include <QNetworkRequest> #include <QNetworkReply> #include <QSslError> #include <QStringRef> class dana : public QObject { Q_OBJECT public: explicit dana(QObject *parent = 0); QString statusid,statusid2,deliverystatus,recipient,recipient2,station_name,alarm; bool lasttest, isSecondRec; float value[]; void checkstatus(QString statusid); void getmeasurement(); void sendnotification(QString recipient, QString station_name, QString alarm, bool isSecondRec=false); signals: public slots:

Page 42: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

42

private: // void SendToDatabase(float value[]); void sendsms(QString recipient, QString station_name, QString alarm); void checkforalarm(QString pomiar); }; #endif // DANA_H

10.1..2 Dana.cpp #include "dana.h" #include "mainwindow.h" dana::dana(QObject *parent) { } void dana::getmeasurement(){ QFile inputFile(QApplication::applicationDirPath()+"/rsChar.txt"); qDebug() << QApplication::applicationDirPath(); QString pomiar; if (inputFile.open(QIODevice::ReadOnly)) { QTextStream in(&inputFile); while ( !in.atEnd() ) { pomiar = in.readLine(); QString spr = pomiar.mid(0,1); pomiar = pomiar.mid(1); if(spr == "V") this->value[0] = pomiar.toFloat(); if(spr == "I") this->value[1] = pomiar.toFloat(); if(spr == "C") this->value[2] = pomiar.toFloat(); if(spr == "A") { checkforalarm(pomiar); this->value[3]=1; } } inputFile.close(); } } void dana::checkforalarm(QString pomiar){ if(pomiar=="01") this->alarm = "Niedokompensowanie"; else if(pomiar=="02") this->alarm = "Przekompensowanie"; else if(pomiar=="03") this->alarm = "Zbyt niski prad"; else if(pomiar=="04") this->alarm = "Zbyt wysoki prad"; else if(pomiar=="05") this->alarm = "Zbyt niskie napiecie"; else if(pomiar=="06") this->alarm = "Zbyt wysokie napiecie"; else if(pomiar=="07") this->alarm = "Przeciazenie kondensatorow"; else if(pomiar=="08") this->alarm = "--"; else if(pomiar=="09") this->alarm = "Zanik napiecia"; else this->alarm = "Brak alarmu"; if(this->alarm!="Brak alarmu"){ this->lasttest = true; qDebug() << this->alarm; this->sendnotification(this->recipient, this->station_name, this->alarm);

Page 43: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

43

if(!this->recipient2.isNull()) this->sendnotification(this->recipient2, this->station_name, this->alarm, true); } } void dana::sendnotification(QString recipient, QString station_name, QString alarm, bool isSecondRec){ QNetworkAccessManager *nam = new QNetworkAccessManager(this); QUrl url("http://adambudzik.stronazen.pl/projekt/sendnotification.php"); url.setUserName("adam"); url.setPassword("adam123"); url.setQuery("recipient="+recipient+"&msg=Stacja "+station_name+" uwaga alarm: "+alarm); QNetworkReply *reply = nam->get(QNetworkRequest(url)); QEventLoop loop; QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit())); loop.exec(); QString phpreply = reply->readAll(); if(!isSecondRec){ this->statusid = phpreply.mid(56,22); qDebug() << this->statusid; } else{ this->statusid2 = phpreply.mid(56,22); qDebug() << this->statusid2; } } void dana::sendsms(QString recipient, QString station_name, QString alarm){ QNetworkAccessManager *nam = new QNetworkAccessManager(this); QUrl url("http://adambudzik.stronazen.pl/projekt/sendsms.php"); url.setUserName("adam"); url.setPassword("adam123"); url.setQuery("recipient="+recipient+"&msg=Stacja "+station_name+" uwaga alarm: "+alarm); QNetworkReply *reply = nam->get(QNetworkRequest(url)); QEventLoop loop; QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit())); loop.exec(); QString phpreply = reply->readAll(); this->statusid = phpreply.mid(56,22); qDebug() << this->statusid; } void dana::checkstatus(QString statusid){ QNetworkAccessManager *nam = new QNetworkAccessManager(this); QUrl url("http://adambudzik.stronazen.pl/projekt/getstatus.php"); url.setUserName("adam"); url.setPassword("adam123"); url.setQuery("statusid="+statusid); QNetworkReply *reply = nam->get(QNetworkRequest(url)); QEventLoop loop; QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit())); loop.exec(); QString phpreply = reply->readAll(); QString begin = "<deliveryStatus>"; QString end = "</deliveryStatus>"; int startIndex = phpreply.indexOf(begin)+begin.length();

Page 44: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

44

int endIndex = phpreply.indexOf(end,startIndex); this->deliverystatus = phpreply.mid(startIndex,endIndex-startIndex); }

10.1..3 Database.cpp #ifndef DATABASE_H #define DATABASE_H #include <QObject> #include <QString> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QApplication> #include <QDebug> #include <QLabel> #include <QtCore/QCoreApplication> #include <QFile> #include <QtCore/QTextStream> #include <QNetworkAccessManager> #include <QUrl> #include <QNetworkRequest> #include <QNetworkReply> #include <QSslError> class database : public QObject { Q_OBJECT public: explicit database(QObject *parent = 0); QString server,username,password,dbname,recipient,recipient2,station_name; bool sms; int lp; bool StoreConnectionSettings(QString server, QString username, QString password, QString dbname); void SendToDatabase(float value[]); bool CheckConnectionOnStartup(); signals: public slots: private: bool CheckConnection(QString server, QString username, QString password, QString dbname); QSqlDatabase db; }; #endif // DATABASE_H

10.1..4 Database.cpp #include "database.h" database::database(QObject *parent) : QObject(parent)

Page 45: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

45

{ } bool database::StoreConnectionSettings(QString server, QString username, QString password, QString dbname){ if(this->CheckConnection(server,username,password,dbname)) { this->server = server; this->username = username; this->password = password; this->dbname = dbname; return true; } else { return false; } } bool database::CheckConnection(QString server, QString username, QString password, QString dbname) { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(server); db.setDatabaseName(dbname); db.setUserName(username); db.setPassword(password); if (!db.open()) { return false; } else { return true; } db.close(); } void database::SendToDatabase(float value[]){ QSqlDatabase db= QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(this->server); db.setDatabaseName(this->dbname); db.setUserName(this->username); db.setPassword(this->password); if (!db.open()) { qDebug() << "Błąd: nie można się połączyć z bazą!"; } else { qDebug() << "Nawiązano połączenie z bazą danych."; QString DBQuery =" insert into odczyt1(pomiar1,pomiar2,pomiar3,BLAD)" "Values(:pomiar1,:pomiar2,:pomiar3,:BLAD)"; QSqlQuery SendToDB; SendToDB.prepare(DBQuery); for(int i=0; i<4;i++){ SendToDB.bindValue(i,value[i]); } if( !SendToDB.exec() )

Page 46: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

46

qDebug() << SendToDB.lastError().text(); else { qDebug( "Inserted!" ); this->lp = this->lp + 1; qDebug() << this->lp; if(this->lp==672){ QString DBQuery1 ="TRUNCATE TABLE odczyt3"; QString DBQuery2 ="INSERT INTO odczyt3 SELECT * FROM odczyt2"; QString DBQuery3 ="TRUNCATE TABLE odczyt2"; QString DBQuery4 ="INSERT INTO odczyt2 SELECT * FROM odczyt1"; QString DBQuery5 ="TRUNCATE TABLE odczyt1"; QSqlQuery swap1; QSqlQuery swap2; QSqlQuery swap3; QSqlQuery swap4; QSqlQuery swap5; swap1.prepare(DBQuery1); swap2.prepare(DBQuery2); swap3.prepare(DBQuery3); swap4.prepare(DBQuery4); swap5.prepare(DBQuery5); if( !swap1.exec() ) qDebug() << swap1.lastError().text(); if( !swap2.exec() ) qDebug() << swap2.lastError().text(); if( !swap3.exec() ) qDebug() << swap3.lastError().text(); if( !swap4.exec() ) qDebug() << swap4.lastError().text(); if( !swap5.exec() ) qDebug() << swap5.lastError().text(); this->lp=0; } } } db.close(); } bool database::CheckConnectionOnStartup(){ QSqlDatabase db= QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(this->server); db.setDatabaseName(this->dbname); db.setUserName(this->username); db.setPassword(this->password); if (!db.open()) { qDebug() << "Błąd: nie można się połączyć z bazą!"; qDebug() << db.lastError().text(); db.close(); return false; } else

Page 47: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

47

{ QString DBQuery ="SELECT ID from odczyt1 ORDER BY ID DESC LIMIT 1"; QSqlQuery GetID; GetID.prepare(DBQuery); if( !GetID.exec() ) qDebug() << GetID.lastError().text(); else{ qDebug( "Pobrano" ); GetID.first(); this->lp=GetID.value(0).toInt(); } db.close(); return true; } }

10.1..5 MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "dana.h" #include "database.h" #include <QTimer> #include <QProcess> #include <QTime> #include <QDate> #include <QDateTime> #include <QDebug> #include <QSettings> #include <QMessageBox> #include <QString> #include <QStringList> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void setAlarm ( const QString & name ); private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked(); void on_pushButton_4_clicked(); void checkstatus(); void on_pushButton_5_clicked(); void processError(QProcess::ProcessError err);

Page 48: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

48

void on_pushButton_6_clicked(); private: Ui::MainWindow *ui; dana * mData; database * db; QTimer *timer; int checkint; void LoadSettings(); QProcess process; }; #endif // MAINWINDOW_H

10.1..6 MainWindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "settingswindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); mData = new dana (); db = new database(); ui->pushButton_5->setVisible(false); LoadSettings(); QObject::connect( &process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError))); process.start(QApplication::applicationDirPath()+"/Sterownikv1.3.exe"); if(!db->server.isEmpty()) if(db->CheckConnectionOnStartup()){ ui->pushButton_4->setEnabled(true); } } MainWindow::~MainWindow() { delete ui; } void MainWindow::LoadSettings() { QSettings setting("pfc.ini", QSettings::IniFormat); setting.beginGroup("DatabaseCredentials"); db->server=setting.value("server").toString(); db->username = setting.value("username").toString(); db->password = setting.value("password").toString(); db->dbname = setting.value("dbname").toString(); setting.endGroup(); setting.beginGroup("APICredentials"); db->recipient = setting.value("recipient").toString();

Page 49: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

49

db->recipient2 = setting.value("recipient2").toString(); db->station_name = setting.value("station_name").toString(); mData->recipient = setting.value("recipient").toString(); mData->recipient2 = setting.value("recipient2").toString(); mData->station_name = setting.value("station_name").toString(); setting.endGroup(); } void MainWindow::on_pushButton_clicked() { SettingsWindow settingswindow(db); settingswindow.setModal(true); settingswindow.exec(); if(!db->server.isEmpty()) if(db->CheckConnectionOnStartup()){ ui->pushButton_4->setEnabled(true); } } void MainWindow::on_pushButton_2_clicked() { mData->getmeasurement(); if(mData->lasttest==true){ setAlarm(mData->alarm); mData->lasttest=false; }else{ ui->label_3->setText(""); } db->SendToDatabase(mData->value); ui->label->setText("Ostatni pomiar: " + QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm")); } void MainWindow::on_pushButton_3_clicked() { if(! db->recipient.isEmpty() && !db->station_name.isEmpty()){ mData->sendnotification(db->recipient, db->station_name,"ALARM"); ui->label_2->setText("Wysyłanie powiadomienia..."); QTimer::singleShot(10000, this, SLOT(checkstatus())); } else ui->label->setText("Nie uzupełniłeś danych do powiadomienia"); } void MainWindow::on_pushButton_4_clicked() { QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(on_pushButton_2_clicked())); // timer->start(900000); timer->start(30000); } void MainWindow::checkstatus(){ mData->checkstatus(mData->statusid); qDebug() << "Sprawdzenie"; if(mData->deliverystatus == "DeliveredToNetwork"){ ui->label_2->setText("Wysłano powiadomienie o alarmie"); this->checkint=0; ui->pushButton_5->setVisible(false); }

Page 50: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

50

else{ if(this->checkint<=4){ ui->label_2->setText("Sprawdzanie... Próba: "+QString::number(this->checkint+1)); QTimer::singleShot(10000, this, SLOT(checkstatus())); this->checkint++; }else{ ui->label_2->setText("Nie udało się wysłać powiadomienia ! "+mData->deliverystatus); ui->pushButton_5->setVisible(true); } } } void MainWindow::on_pushButton_5_clicked() { mData->checkstatus(mData->statusid); ui->label_2->setText(mData->deliverystatus); } void MainWindow::setAlarm ( const QString & name ) { ui->label_3->setText("Alarm: " + name); QTimer::singleShot(10000, this, SLOT(checkstatus())); } void MainWindow::processError(QProcess::ProcessError err) { switch(err) { case QProcess::FailedToStart: QMessageBox::information(0,"FailedToStartDD","Błąd uruchamiania aplikacji"); break; case QProcess::Crashed: QMessageBox::information(0,"Crashed","Crashed"); break; case QProcess::Timedout: QMessageBox::information(0,"FailedToStart","FailedToStart"); break; case QProcess::WriteError: QMessageBox::information(0,"Timedout","Timedout"); break; case QProcess::ReadError: QMessageBox::information(0,"ReadError","ReadError"); break; case QProcess::UnknownError: QMessageBox::information(0,"UnknownError","UnknownError"); break; default: QMessageBox::information(0,"default","default"); break; } } void MainWindow::on_pushButton_6_clicked() { }

Page 51: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

51

10.1..7 SettingsWindow.h #ifndef SETTINGSWINDOW_H #define SETTINGSWINDOW_H #include <QDialog> #include "database.h" #include <QSettings> namespace Ui { class SettingsWindow; } class SettingsWindow : public QDialog { Q_OBJECT public: explicit SettingsWindow(database * bazaa, QWidget *parent = 0); ~SettingsWindow(); private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); private: Ui::SettingsWindow *ui; database * baza; void SaveDBSettings(); void SaveAPISettings(); }; #endif // SETTINGSWINDOW_H

10.1..8 SettingsWindow.cpp #include "settingswindow.h" #include "mainwindow.h" #include "ui_settingswindow.h" SettingsWindow::SettingsWindow(database * bazaa, QWidget *parent) : QDialog(parent), ui(new Ui::SettingsWindow) { ui->setupUi(this); baza = bazaa; ui->lineEdit_server->setText(baza->server); ui->lineEdit_username->setText(baza->username); ui->lineEdit_password->setText(baza->password); ui->lineEdit_dbname->setText(baza->dbname); ui->lineEdit_recipient->setText(baza->recipient); ui->lineEdit_name->setText(baza->station_name); ui->lineEdit_recipient_2->setText(baza->recipient2); } SettingsWindow::~SettingsWindow()

Page 52: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

52

{ delete ui; } void SettingsWindow::SaveDBSettings(){ QSettings setting("pfc.ini", QSettings::IniFormat); setting.beginGroup("DatabaseCredentials"); setting.setValue("server",baza->server); setting.setValue("username",baza->username); setting.setValue("password",baza->password); setting.setValue("dbname",baza->dbname); setting.endGroup(); } void SettingsWindow::SaveAPISettings(){ QSettings setting("pfc.ini", QSettings::IniFormat); setting.beginGroup("APICredentials"); setting.setValue("recipient",baza->recipient); setting.setValue("recipient2",baza->recipient2); setting.setValue("station_name",baza->station_name); setting.setValue("sms",baza->sms); setting.endGroup(); } void SettingsWindow::on_pushButton_clicked() { if(baza->StoreConnectionSettings(ui->lineEdit_server->text(),ui->lineEdit_username->text(), ui->lineEdit_password->text(), ui->lineEdit_dbname->text())){ ui->label_status->setText("Połączono i zapisano"); SaveDBSettings(); } else{ ui->label_status->setText("Błąd połączenia z bazą. Sprawdź dane."); } } void SettingsWindow::on_pushButton_2_clicked() { baza->recipient=ui->lineEdit_recipient->text(); baza->recipient2=ui->lineEdit_recipient_2->text(); baza->station_name=ui->lineEdit_name->text(); SaveAPISettings(); ui->label_status_2->setText("Zapisano zmiany"); }

10.1..9 Main.cpp #include "mainwindow.h" #include "database.h" #include <QApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> #include <QLabel> #include <QSqlError> #include <QString> #include <QtCore/QCoreApplication> #include <QFile>

Page 53: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

53

#include <QtCore/QTextStream> #include <QNetworkAccessManager> #include <QUrl> #include <QNetworkRequest> #include <QNetworkReply> std::string a; int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); dana(); database(); return a.exec(); }

Page 54: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

54

10.2 Strona internetowa

Page 55: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

55

10.3 Aplikacja do komunikacji z sterownikiem #include <fstream> #include <iostream> #include <sstream> #include <math.h> #include <cmath> #include <msclr\marshal_cppstd.h>

Page 56: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

56

int ptimer1, ptimer2, ptimer3; int cmd = 5; int size; bool CharEnabled = true; static int volt; static int amper; static float cosinus; float fResultb = 0; float fResulta = 0; std::fstream fFilie; std::string BuffData; #pragma once namespace Sterownikv13 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO::Ports; using namespace System::Threading; using namespace std; using namespace System::Runtime::InteropServices; void MarshalString ( String ^ s, string& os ) { using namespace Runtime::InteropServices; const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer(); os = chars; Marshal::FreeHGlobal(IntPtr((void*)chars)); } /// <summary> /// Summary for Form1 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); findPorts(); // //TODO: Add the constructor code here // } protected: /// <summary> /// Clean up any resources being used. /// </summary> ~Form1() {

Page 57: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

57

if (components) { delete components; } } private: System::Windows::Forms::MenuStrip^ menuStrip1; protected: private: System::Windows::Forms::ToolStripMenuItem^ plikToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ oPcjeToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ standardoweToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ dowolneToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ pomocToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ oProgramieToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ opisKomendToolStripMenuItem; private: System::Windows::Forms::Timer^ timer1; private: System::IO::Ports::SerialPort^ serialPort1; private: System::Windows::Forms::TabControl^ tabControl1; private: System::Windows::Forms::TabPage^ Opcje; private: System::Windows::Forms::ComboBox^ cbPort; private: System::Windows::Forms::TabPage^ Pomiary; private: System::Windows::Forms::TabPage^ Pomoc; private: System::Windows::Forms::ToolStripMenuItem^ typoweToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ toolStripMenuItem2; private: System::Windows::Forms::ToolStripMenuItem^ toolStripMenuItem3; private: System::Windows::Forms::StatusStrip^ statusStrip1; private: System::Windows::Forms::ToolStripProgressBar^ toolStripProgressBar1; private: System::Windows::Forms::ToolStripStatusLabel^ toolStripStatusLabel1; private: System::Windows::Forms::ComboBox^ cbStopBit; private: System::Windows::Forms::ComboBox^ cbData; private: System::Windows::Forms::ComboBox^ cbUBRR; private: System::Windows::Forms::TextBox^ textBox2; private: System::Windows::Forms::TextBox^ textBox1; private: System::Windows::Forms::Label^ label5; private: System::Windows::Forms::Label^ label4; private: System::Windows::Forms::Label^ label3; private: System::Windows::Forms::Label^ label2; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Label^ label8; private: System::Windows::Forms::ComboBox^ cbKomenda; private: System::Windows::Forms::Button^ Reset; private: System::Windows::Forms::Timer^ timer2; private: GaryPerkin::UserControls::Buttons::RoundButton^ roundButton1; private: ::VerticalProgressBar::VerticalProgressBar^ verticalProgressBar1; private: ::VerticalProgressBar::VerticalProgressBar^ verticalProgressBar2; private: ::VerticalProgressBar::VerticalProgressBar^ verticalProgressBar3; private: System::Windows::Forms::TextBox^ textBox3; private: System::Windows::Forms::RichTextBox^ richTextBox1; private: System::Windows::Forms::Label^ label9; private: System::Windows::Forms::Label^ label10; private: ::VerticalProgressBar::VerticalProgressBar^ verticalProgressBar4;

Page 58: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

58

private: System::Windows::Forms::RichTextBox^ richTextBox2; private: System::Windows::Forms::TextBox^ textBox4; private: System::Windows::Forms::TextBox^ textBox7; private: System::Windows::Forms::TextBox^ textBox6; private: System::Windows::Forms::TextBox^ textBox5; private: System::Windows::Forms::Label^ label14; private: System::Windows::Forms::Label^ label13; private: System::Windows::Forms::Label^ label12; private: System::Windows::Forms::Label^ label11; private: System::Windows::Forms::Label^ label7; private: System::Windows::Forms::Label^ label6; private: System::Windows::Forms::Label^ A6; private: System::Windows::Forms::Label^ A5; private: System::Windows::Forms::Label^ A4; private: System::Windows::Forms::Label^ A3; private: System::Windows::Forms::StatusStrip^ statusStrip2; private: System::Windows::Forms::ToolStripProgressBar^ toolStripProgressBar2; private: System::Windows::Forms::ToolStripStatusLabel^ toolStripStatusLabel2; private: System::Windows::Forms::Label^ label16; private: System::Windows::Forms::Label^ label15; private: System::Windows::Forms::Label^ label17; private: System::Windows::Forms::Label^ label18; private: System::ComponentModel::IContainer^ components; protected: private: /// <summary> /// Required designer variable. /// </summary> #pragma region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid)); this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip()); this->plikToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->oPcjeToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->standardoweToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->dowolneToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->typoweToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->toolStripMenuItem2 = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->toolStripMenuItem3 = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->pomocToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->oProgramieToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->opisKomendToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->timer1 = (gcnew System::Windows::Forms::Timer(this->components)); this->serialPort1 = (gcnew System::IO::Ports::SerialPort(this->components)); this->tabControl1 = (gcnew System::Windows::Forms::TabControl()); this->Pomiary = (gcnew System::Windows::Forms::TabPage());

Page 59: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

59

this->label17 = (gcnew System::Windows::Forms::Label()); this->label16 = (gcnew System::Windows::Forms::Label()); this->label15 = (gcnew System::Windows::Forms::Label()); this->label14 = (gcnew System::Windows::Forms::Label()); this->label13 = (gcnew System::Windows::Forms::Label()); this->label12 = (gcnew System::Windows::Forms::Label()); this->label11 = (gcnew System::Windows::Forms::Label()); this->label7 = (gcnew System::Windows::Forms::Label()); this->label6 = (gcnew System::Windows::Forms::Label()); this->textBox7 = (gcnew System::Windows::Forms::TextBox()); this->textBox6 = (gcnew System::Windows::Forms::TextBox()); this->textBox5 = (gcnew System::Windows::Forms::TextBox()); this->statusStrip1 = (gcnew System::Windows::Forms::StatusStrip()); this->toolStripProgressBar1 = (gcnew System::Windows::Forms::ToolStripProgressBar()); this->toolStripStatusLabel1 = (gcnew System::Windows::Forms::ToolStripStatusLabel()); this->Opcje = (gcnew System::Windows::Forms::TabPage()); this->label18 = (gcnew System::Windows::Forms::Label()); this->statusStrip2 = (gcnew System::Windows::Forms::StatusStrip()); this->toolStripProgressBar2 = (gcnew System::Windows::Forms::ToolStripProgressBar()); this->toolStripStatusLabel2 = (gcnew System::Windows::Forms::ToolStripStatusLabel()); this->Reset = (gcnew System::Windows::Forms::Button()); this->label8 = (gcnew System::Windows::Forms::Label()); this->cbKomenda = (gcnew System::Windows::Forms::ComboBox()); this->label5 = (gcnew System::Windows::Forms::Label()); this->label4 = (gcnew System::Windows::Forms::Label()); this->label3 = (gcnew System::Windows::Forms::Label()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label1 = (gcnew System::Windows::Forms::Label()); this->cbStopBit = (gcnew System::Windows::Forms::ComboBox()); this->cbData = (gcnew System::Windows::Forms::ComboBox()); this->cbUBRR = (gcnew System::Windows::Forms::ComboBox()); this->cbPort = (gcnew System::Windows::Forms::ComboBox()); this->Pomoc = (gcnew System::Windows::Forms::TabPage()); this->A6 = (gcnew System::Windows::Forms::Label()); this->A5 = (gcnew System::Windows::Forms::Label()); this->A4 = (gcnew System::Windows::Forms::Label()); this->A3 = (gcnew System::Windows::Forms::Label()); this->textBox2 = (gcnew System::Windows::Forms::TextBox()); this->textBox1 = (gcnew System::Windows::Forms::TextBox()); this->timer2 = (gcnew System::Windows::Forms::Timer(this->components)); this->roundButton1 = (gcnew GaryPerkin::UserControls::Buttons::RoundButton()); this->verticalProgressBar1 = (gcnew ::VerticalProgressBar::VerticalProgressBar()); this->verticalProgressBar2 = (gcnew ::VerticalProgressBar::VerticalProgressBar()); this->verticalProgressBar3 = (gcnew ::VerticalProgressBar::VerticalProgressBar()); this->textBox3 = (gcnew System::Windows::Forms::TextBox()); this->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox()); this->label9 = (gcnew System::Windows::Forms::Label()); this->label10 = (gcnew System::Windows::Forms::Label()); this->verticalProgressBar4 = (gcnew ::VerticalProgressBar::VerticalProgressBar()); this->richTextBox2 = (gcnew System::Windows::Forms::RichTextBox()); this->textBox4 = (gcnew System::Windows::Forms::TextBox()); this->menuStrip1->SuspendLayout(); this->tabControl1->SuspendLayout(); this->Pomiary->SuspendLayout(); this->statusStrip1->SuspendLayout(); this->Opcje->SuspendLayout(); this->statusStrip2->SuspendLayout(); this->SuspendLayout(); // // menuStrip1

Page 60: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

60

// this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(3) {this->plikToolStripMenuItem, this->oPcjeToolStripMenuItem, this->pomocToolStripMenuItem}); this->menuStrip1->Location = System::Drawing::Point(0, 0); this->menuStrip1->Name = L"menuStrip1"; this->menuStrip1->Size = System::Drawing::Size(856, 24); this->menuStrip1->TabIndex = 4; this->menuStrip1->Text = L"menuStrip1"; // // plikToolStripMenuItem // this->plikToolStripMenuItem->Enabled = false; this->plikToolStripMenuItem->Name = L"plikToolStripMenuItem"; this->plikToolStripMenuItem->Size = System::Drawing::Size(38, 20); this->plikToolStripMenuItem->Text = L"Plik"; // // oPcjeToolStripMenuItem // this->oPcjeToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(3) {this->standardoweToolStripMenuItem, this->dowolneToolStripMenuItem, this->typoweToolStripMenuItem}); this->oPcjeToolStripMenuItem->Enabled = false; this->oPcjeToolStripMenuItem->Name = L"oPcjeToolStripMenuItem"; this->oPcjeToolStripMenuItem->Size = System::Drawing::Size(50, 20); this->oPcjeToolStripMenuItem->Text = L"Opcje"; // // standardoweToolStripMenuItem // this->standardoweToolStripMenuItem->Name = L"standardoweToolStripMenuItem"; this->standardoweToolStripMenuItem->Size = System::Drawing::Size(143, 22); this->standardoweToolStripMenuItem->Text = L"Standardowe"; // // dowolneToolStripMenuItem // this->dowolneToolStripMenuItem->Name = L"dowolneToolStripMenuItem"; this->dowolneToolStripMenuItem->Size = System::Drawing::Size(143, 22); this->dowolneToolStripMenuItem->Text = L"Dowolne"; // // typoweToolStripMenuItem // this->typoweToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->toolStripMenuItem2, this->toolStripMenuItem3}); this->typoweToolStripMenuItem->Name = L"typoweToolStripMenuItem"; this->typoweToolStripMenuItem->Size = System::Drawing::Size(143, 22); this->typoweToolStripMenuItem->Text = L"Typowe"; // // toolStripMenuItem2 // this->toolStripMenuItem2->Name = L"toolStripMenuItem2"; this->toolStripMenuItem2->Size = System::Drawing::Size(104, 22); this->toolStripMenuItem2->Text = L"9600"; // // toolStripMenuItem3 // this->toolStripMenuItem3->Name = L"toolStripMenuItem3";

Page 61: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

61

this->toolStripMenuItem3->Size = System::Drawing::Size(104, 22); this->toolStripMenuItem3->Text = L"19200"; // // pomocToolStripMenuItem // this->pomocToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->oProgramieToolStripMenuItem, this->opisKomendToolStripMenuItem}); this->pomocToolStripMenuItem->Enabled = false; this->pomocToolStripMenuItem->Name = L"pomocToolStripMenuItem"; this->pomocToolStripMenuItem->Size = System::Drawing::Size(57, 20); this->pomocToolStripMenuItem->Text = L"Pomoc"; // // oProgramieToolStripMenuItem // this->oProgramieToolStripMenuItem->Name = L"oProgramieToolStripMenuItem"; this->oProgramieToolStripMenuItem->Size = System::Drawing::Size(145, 22); this->oProgramieToolStripMenuItem->Text = L"O programie"; // // opisKomendToolStripMenuItem // this->opisKomendToolStripMenuItem->Name = L"opisKomendToolStripMenuItem"; this->opisKomendToolStripMenuItem->Size = System::Drawing::Size(145, 22); this->opisKomendToolStripMenuItem->Text = L"Opis komend"; // // timer1 // this->timer1->Enabled = true; this->timer1->Interval = 250; this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick); // // serialPort1 // this->serialPort1->ReadTimeout = 500; this->serialPort1->WriteTimeout = 500; // // tabControl1 // this->tabControl1->Controls->Add(this->Pomiary); this->tabControl1->Controls->Add(this->Opcje); this->tabControl1->Controls->Add(this->Pomoc); this->tabControl1->Location = System::Drawing::Point(0, 28); this->tabControl1->Name = L"tabControl1"; this->tabControl1->SelectedIndex = 0; this->tabControl1->Size = System::Drawing::Size(387, 404); this->tabControl1->TabIndex = 5; // // Pomiary // this->Pomiary->Controls->Add(this->label17); this->Pomiary->Controls->Add(this->label16); this->Pomiary->Controls->Add(this->label15); this->Pomiary->Controls->Add(this->label14); this->Pomiary->Controls->Add(this->label13); this->Pomiary->Controls->Add(this->label12); this->Pomiary->Controls->Add(this->label11); this->Pomiary->Controls->Add(this->label7); this->Pomiary->Controls->Add(this->label6); this->Pomiary->Controls->Add(this->textBox7);

Page 62: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

62

this->Pomiary->Controls->Add(this->textBox6); this->Pomiary->Controls->Add(this->textBox5); this->Pomiary->Controls->Add(this->statusStrip1); this->Pomiary->Location = System::Drawing::Point(4, 22); this->Pomiary->Name = L"Pomiary"; this->Pomiary->Padding = System::Windows::Forms::Padding(3); this->Pomiary->Size = System::Drawing::Size(379, 378); this->Pomiary->TabIndex = 0; this->Pomiary->Text = L"Pomiary"; this->Pomiary->UseVisualStyleBackColor = true; this->Pomiary->Click += gcnew System::EventHandler(this, &Form1::Pomiary_Click); // // label17 // this->label17->AutoSize = true; this->label17->BackColor = System::Drawing::Color::Red; this->label17->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label17->ForeColor = System::Drawing::Color::Yellow; this->label17->Location = System::Drawing::Point(32, 307); this->label17->Name = L"label17"; this->label17->Size = System::Drawing::Size(0, 20); this->label17->TabIndex = 13; // // label16 // this->label16->AutoSize = true; this->label16->BackColor = System::Drawing::Color::Red; this->label16->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label16->ForeColor = System::Drawing::Color::Yellow; this->label16->Location = System::Drawing::Point(32, 264); this->label16->Name = L"label16"; this->label16->Size = System::Drawing::Size(0, 20); this->label16->TabIndex = 12; // // label15 // this->label15->AutoSize = true; this->label15->BackColor = System::Drawing::Color::Red; this->label15->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label15->ForeColor = System::Drawing::Color::Yellow; this->label15->Location = System::Drawing::Point(32, 223); this->label15->Name = L"label15"; this->label15->Size = System::Drawing::Size(0, 20); this->label15->TabIndex = 11; // // label14 // this->label14->AutoSize = true; this->label14->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label14->Location = System::Drawing::Point(21, 161); this->label14->Name = L"label14"; this->label14->Size = System::Drawing::Size(117, 20);

Page 63: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

63

this->label14->TabIndex = 10; this->label14->Text = L"Moc pozorna:"; // // label13 // this->label13->AutoSize = true; this->label13->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label13->Location = System::Drawing::Point(21, 106); this->label13->Name = L"label13"; this->label13->Size = System::Drawing::Size(102, 20); this->label13->TabIndex = 9; this->label13->Text = L"Moc bierna:"; this->label13->Click += gcnew System::EventHandler(this, &Form1::label13_Click); // // label12 // this->label12->AutoSize = true; this->label12->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label12->Location = System::Drawing::Point(21, 45); this->label12->Name = L"label12"; this->label12->Size = System::Drawing::Size(108, 20); this->label12->TabIndex = 8; this->label12->Text = L"Moc czynna:"; // // label11 // this->label11->AutoSize = true; this->label11->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 19, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label11->Location = System::Drawing::Point(272, 156); this->label11->Name = L"label11"; this->label11->Size = System::Drawing::Size(81, 30); this->label11->TabIndex = 7; this->label11->Text = L"[ VA ]"; // // label7 // this->label7->AutoSize = true; this->label7->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 19, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label7->Location = System::Drawing::Point(272, 98); this->label7->Name = L"label7"; this->label7->Size = System::Drawing::Size(84, 30); this->label7->TabIndex = 6; this->label7->Text = L"[ var ]"; // // label6 // this->label6->AutoSize = true; this->label6->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 19, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label6->Location = System::Drawing::Point(272, 36); this->label6->Name = L"label6";

Page 64: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

64

this->label6->Size = System::Drawing::Size(71, 30); this->label6->TabIndex = 5; this->label6->Text = L"[ W ]"; // // textBox7 // this->textBox7->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 19, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->textBox7->Location = System::Drawing::Point(144, 145); this->textBox7->Multiline = true; this->textBox7->Name = L"textBox7"; this->textBox7->Size = System::Drawing::Size(110, 38); this->textBox7->TabIndex = 4; // // textBox6 // this->textBox6->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 19, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->textBox6->Location = System::Drawing::Point(144, 88); this->textBox6->Multiline = true; this->textBox6->Name = L"textBox6"; this->textBox6->Size = System::Drawing::Size(110, 38); this->textBox6->TabIndex = 3; // // textBox5 // this->textBox5->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 19, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->textBox5->Location = System::Drawing::Point(144, 29); this->textBox5->Multiline = true; this->textBox5->Name = L"textBox5"; this->textBox5->Size = System::Drawing::Size(110, 38); this->textBox5->TabIndex = 2; this->textBox5->TextChanged += gcnew System::EventHandler(this, &Form1::textBox5_TextChanged); // // statusStrip1 // this->statusStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->toolStripProgressBar1, this->toolStripStatusLabel1}); this->statusStrip1->Location = System::Drawing::Point(3, 353); this->statusStrip1->Name = L"statusStrip1"; this->statusStrip1->Size = System::Drawing::Size(373, 22); this->statusStrip1->TabIndex = 1; this->statusStrip1->Text = L"statusStrip1"; // // toolStripProgressBar1 // this->toolStripProgressBar1->Name = L"toolStripProgressBar1"; this->toolStripProgressBar1->Size = System::Drawing::Size(100, 16); // // toolStripStatusLabel1 // this->toolStripStatusLabel1->Name = L"toolStripStatusLabel1"; this->toolStripStatusLabel1->Size = System::Drawing::Size(36, 17); this->toolStripStatusLabel1->Text = L"STOP";

Page 65: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

65

// // Opcje // this->Opcje->Controls->Add(this->label18); this->Opcje->Controls->Add(this->statusStrip2); this->Opcje->Controls->Add(this->Reset); this->Opcje->Controls->Add(this->label8); this->Opcje->Controls->Add(this->cbKomenda); this->Opcje->Controls->Add(this->label5); this->Opcje->Controls->Add(this->label4); this->Opcje->Controls->Add(this->label3); this->Opcje->Controls->Add(this->label2); this->Opcje->Controls->Add(this->label1); this->Opcje->Controls->Add(this->cbStopBit); this->Opcje->Controls->Add(this->cbData); this->Opcje->Controls->Add(this->cbUBRR); this->Opcje->Controls->Add(this->cbPort); this->Opcje->Location = System::Drawing::Point(4, 22); this->Opcje->Name = L"Opcje"; this->Opcje->Padding = System::Windows::Forms::Padding(3); this->Opcje->Size = System::Drawing::Size(379, 378); this->Opcje->TabIndex = 1; this->Opcje->Text = L"Opcje"; this->Opcje->UseVisualStyleBackColor = true; this->Opcje->Click += gcnew System::EventHandler(this, &Form1::Opcje_Click); // // label18 // this->label18->AutoSize = true; this->label18->Location = System::Drawing::Point(30, 91); this->label18->Name = L"label18"; this->label18->Size = System::Drawing::Size(188, 13); this->label18->TabIndex = 13; this->label18->Text = L"Dla zaawansowanych(nie wymagane):"; // // statusStrip2 // this->statusStrip2->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->toolStripProgressBar2, this->toolStripStatusLabel2}); this->statusStrip2->Location = System::Drawing::Point(3, 353); this->statusStrip2->Name = L"statusStrip2"; this->statusStrip2->Size = System::Drawing::Size(373, 22); this->statusStrip2->TabIndex = 12; this->statusStrip2->Text = L"statusStrip2"; // // toolStripProgressBar2 // this->toolStripProgressBar2->Name = L"toolStripProgressBar2"; this->toolStripProgressBar2->Size = System::Drawing::Size(100, 16); // // toolStripStatusLabel2 // this->toolStripStatusLabel2->Name = L"toolStripStatusLabel2"; this->toolStripStatusLabel2->Size = System::Drawing::Size(36, 17); this->toolStripStatusLabel2->Text = L"STOP"; // // Reset // this->Reset->Location = System::Drawing::Point(119, 243);

Page 66: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

66

this->Reset->Name = L"Reset"; this->Reset->Size = System::Drawing::Size(99, 23); this->Reset->TabIndex = 11; this->Reset->Text = L"Znajdź port"; this->Reset->UseVisualStyleBackColor = true; this->Reset->Click += gcnew System::EventHandler(this, &Form1::Reset_Click); // // label8 // this->label8->AutoSize = true; this->label8->Location = System::Drawing::Point(26, 199); this->label8->Name = L"label8"; this->label8->Size = System::Drawing::Size(55, 13); this->label8->TabIndex = 10; this->label8->Text = L"Komenda:"; // // cbKomenda // this->cbKomenda->Enabled = false; this->cbKomenda->FormattingEnabled = true; this->cbKomenda->Items->AddRange(gcnew cli::array< System::Object^ >(5) {L"KOMENDA1", L"KOMENDA2", L"KOMENDA3", L"KOMENDA4", L"KOMENDA5"}); this->cbKomenda->Location = System::Drawing::Point(97, 199); this->cbKomenda->Name = L"cbKomenda"; this->cbKomenda->Size = System::Drawing::Size(121, 21); this->cbKomenda->TabIndex = 9; // // label5 // this->label5->AutoSize = true; this->label5->Location = System::Drawing::Point(23, 172); this->label5->Name = L"label5"; this->label5->Size = System::Drawing::Size(46, 13); this->label5->TabIndex = 8; this->label5->Text = L"Stop bit:"; // // label4 // this->label4->AutoSize = true; this->label4->Location = System::Drawing::Point(23, 145); this->label4->Name = L"label4"; this->label4->Size = System::Drawing::Size(33, 13); this->label4->TabIndex = 7; this->label4->Text = L"Data:"; // // label3 // this->label3->AutoSize = true; this->label3->Location = System::Drawing::Point(23, 118); this->label3->Name = L"label3"; this->label3->Size = System::Drawing::Size(56, 13); this->label3->TabIndex = 6; this->label3->Text = L"Baud rate:"; // // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(23, 43); this->label2->Name = L"label2";

Page 67: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

67

this->label2->Size = System::Drawing::Size(29, 13); this->label2->TabIndex = 5; this->label2->Text = L"Port:"; // // label1 // this->label1->AutoSize = true; this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 20, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label1->Location = System::Drawing::Point(111, 3); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(85, 31); this->label1->TabIndex = 4; this->label1->Text = L"Opcje"; // // cbStopBit // this->cbStopBit->FormattingEnabled = true; this->cbStopBit->Items->AddRange(gcnew cli::array< System::Object^ >(2) {L"One", L"Two"}); this->cbStopBit->Location = System::Drawing::Point(97, 172); this->cbStopBit->Name = L"cbStopBit"; this->cbStopBit->Size = System::Drawing::Size(121, 21); this->cbStopBit->TabIndex = 3; // // cbData // this->cbData->FormattingEnabled = true; this->cbData->Items->AddRange(gcnew cli::array< System::Object^ >(4) {L"5", L"6", L"7", L"8"}); this->cbData->Location = System::Drawing::Point(97, 145); this->cbData->Name = L"cbData"; this->cbData->Size = System::Drawing::Size(121, 21); this->cbData->TabIndex = 2; // // cbUBRR // this->cbUBRR->FormattingEnabled = true; this->cbUBRR->Items->AddRange(gcnew cli::array< System::Object^ >(11) {L"150", L"300", L"600", L"1200", L"2400", L"4800", L"9600", L"19200", L"38400", L"76800", L"153600"}); this->cbUBRR->Location = System::Drawing::Point(97, 118); this->cbUBRR->Name = L"cbUBRR"; this->cbUBRR->Size = System::Drawing::Size(121, 21); this->cbUBRR->TabIndex = 1; // // cbPort // this->cbPort->FormattingEnabled = true; this->cbPort->Location = System::Drawing::Point(97, 43); this->cbPort->Name = L"cbPort"; this->cbPort->Size = System::Drawing::Size(121, 21); this->cbPort->TabIndex = 0; // // Pomoc // this->Pomoc->Location = System::Drawing::Point(4, 22); this->Pomoc->Name = L"Pomoc"; this->Pomoc->Padding = System::Windows::Forms::Padding(3); this->Pomoc->Size = System::Drawing::Size(379, 378); this->Pomoc->TabIndex = 2;

Page 68: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

68

this->Pomoc->Text = L"Pomoc"; this->Pomoc->UseVisualStyleBackColor = true; // // A6 // this->A6->AutoSize = true; this->A6->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->A6->Location = System::Drawing::Point(764, 341); this->A6->Name = L"A6"; this->A6->Size = System::Drawing::Size(0, 20); this->A6->TabIndex = 14; // // A5 // this->A5->AutoSize = true; this->A5->BackColor = System::Drawing::Color::Red; this->A5->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->A5->ForeColor = System::Drawing::Color::Yellow; this->A5->Location = System::Drawing::Point(764, 314); this->A5->Name = L"A5"; this->A5->Size = System::Drawing::Size(0, 20); this->A5->TabIndex = 13; // // A4 // this->A4->AutoSize = true; this->A4->BackColor = System::Drawing::Color::Red; this->A4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->A4->ForeColor = System::Drawing::Color::Yellow; this->A4->Location = System::Drawing::Point(770, 314); this->A4->Name = L"A4"; this->A4->Size = System::Drawing::Size(0, 20); this->A4->TabIndex = 12; // // A3 // this->A3->AutoSize = true; this->A3->BackColor = System::Drawing::Color::Red; this->A3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->A3->ForeColor = System::Drawing::Color::Yellow; this->A3->Location = System::Drawing::Point(662, 314); this->A3->Name = L"A3"; this->A3->Size = System::Drawing::Size(0, 20); this->A3->TabIndex = 11; // // textBox2 // this->textBox2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->textBox2->Location = System::Drawing::Point(750, 263); this->textBox2->Multiline = true;

Page 69: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

69

this->textBox2->Name = L"textBox2"; this->textBox2->Size = System::Drawing::Size(65, 40); this->textBox2->TabIndex = 3; // // textBox1 // this->textBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->textBox1->Location = System::Drawing::Point(641, 263); this->textBox1->Multiline = true; this->textBox1->Name = L"textBox1"; this->textBox1->Size = System::Drawing::Size(65, 40); this->textBox1->TabIndex = 2; // // timer2 // this->timer2->Enabled = true; this->timer2->Interval = 500; this->timer2->Tick += gcnew System::EventHandler(this, &Form1::timer2_Tick); // // roundButton1 // this->roundButton1->BackColor = System::Drawing::Color::Transparent; this->roundButton1->Location = System::Drawing::Point(503, 367); this->roundButton1->Name = L"roundButton1"; this->roundButton1->RecessDepth = 0; this->roundButton1->Size = System::Drawing::Size(190, 50); this->roundButton1->TabIndex = 6; this->roundButton1->Text = L"Start"; this->roundButton1->UseVisualStyleBackColor = false; this->roundButton1->Click += gcnew System::EventHandler(this, &Form1::roundButton1_Click); // // verticalProgressBar1 // this->verticalProgressBar1->BorderStyle = VerticalProgressBar::BorderStyles::Classic; this->verticalProgressBar1->Color = System::Drawing::Color::Blue; this->verticalProgressBar1->Location = System::Drawing::Point(537, 79); this->verticalProgressBar1->Maximum = 100; this->verticalProgressBar1->Minimum = 0; this->verticalProgressBar1->Name = L"verticalProgressBar1"; this->verticalProgressBar1->Size = System::Drawing::Size(65, 178); this->verticalProgressBar1->Step = 1; this->verticalProgressBar1->Style = VerticalProgressBar::Styles::Solid; this->verticalProgressBar1->TabIndex = 7; this->verticalProgressBar1->Value = 0; // // verticalProgressBar2 // this->verticalProgressBar2->BorderStyle = VerticalProgressBar::BorderStyles::Classic; this->verticalProgressBar2->Color = System::Drawing::Color::Blue; this->verticalProgressBar2->Location = System::Drawing::Point(641, 79); this->verticalProgressBar2->Maximum = 520; this->verticalProgressBar2->Minimum = 0; this->verticalProgressBar2->Name = L"verticalProgressBar2"; this->verticalProgressBar2->Size = System::Drawing::Size(65, 178); this->verticalProgressBar2->Step = 1; this->verticalProgressBar2->Style = VerticalProgressBar::Styles::Solid; this->verticalProgressBar2->TabIndex = 8; this->verticalProgressBar2->Value = 0;

Page 70: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

70

// // verticalProgressBar3 // this->verticalProgressBar3->BorderStyle = VerticalProgressBar::BorderStyles::Classic; this->verticalProgressBar3->Color = System::Drawing::Color::Blue; this->verticalProgressBar3->Location = System::Drawing::Point(750, 79); this->verticalProgressBar3->Maximum = 480; this->verticalProgressBar3->Minimum = 0; this->verticalProgressBar3->Name = L"verticalProgressBar3"; this->verticalProgressBar3->Size = System::Drawing::Size(65, 178); this->verticalProgressBar3->Step = 1; this->verticalProgressBar3->Style = VerticalProgressBar::Styles::Solid; this->verticalProgressBar3->TabIndex = 9; this->verticalProgressBar3->Value = 0; // // textBox3 // this->textBox3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->textBox3->Location = System::Drawing::Point(537, 264); this->textBox3->Multiline = true; this->textBox3->Name = L"textBox3"; this->textBox3->Size = System::Drawing::Size(65, 39); this->textBox3->TabIndex = 10; // // richTextBox1 // this->richTextBox1->BackColor = System::Drawing::SystemColors::MenuBar; this->richTextBox1->BorderStyle = System::Windows::Forms::BorderStyle::None; this->richTextBox1->Enabled = false; this->richTextBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->richTextBox1->Location = System::Drawing::Point(537, 34); this->richTextBox1->Name = L"richTextBox1"; this->richTextBox1->Size = System::Drawing::Size(65, 25); this->richTextBox1->TabIndex = 11; this->richTextBox1->Text = L"cos φ"; // // label9 // this->label9->AutoSize = true; this->label9->Enabled = false; this->label9->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label9->Location = System::Drawing::Point(637, 39); this->label9->Name = L"label9"; this->label9->Size = System::Drawing::Size(88, 20); this->label9->TabIndex = 12; this->label9->Text = L"[ A ]Prąd :"; // // label10 // this->label10->AutoSize = true; this->label10->Enabled = false; this->label10->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238)));

Page 71: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

71

this->label10->Location = System::Drawing::Point(731, 39); this->label10->Name = L"label10"; this->label10->Size = System::Drawing::Size(115, 20); this->label10->TabIndex = 13; this->label10->Text = L"[ V ]Napięcie:"; // // verticalProgressBar4 // this->verticalProgressBar4->BorderStyle = VerticalProgressBar::BorderStyles::Classic; this->verticalProgressBar4->Color = System::Drawing::Color::Blue; this->verticalProgressBar4->Location = System::Drawing::Point(446, 79); this->verticalProgressBar4->Maximum = 90; this->verticalProgressBar4->Minimum = 0; this->verticalProgressBar4->Name = L"verticalProgressBar4"; this->verticalProgressBar4->Size = System::Drawing::Size(65, 178); this->verticalProgressBar4->Step = 1; this->verticalProgressBar4->Style = VerticalProgressBar::Styles::Solid; this->verticalProgressBar4->TabIndex = 14; this->verticalProgressBar4->Value = 0; // // richTextBox2 // this->richTextBox2->BackColor = System::Drawing::SystemColors::MenuBar; this->richTextBox2->BorderStyle = System::Windows::Forms::BorderStyle::None; this->richTextBox2->Enabled = false; this->richTextBox2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->richTextBox2->Location = System::Drawing::Point(446, 34); this->richTextBox2->Name = L"richTextBox2"; this->richTextBox2->Size = System::Drawing::Size(65, 25); this->richTextBox2->TabIndex = 15; this->richTextBox2->Text = L"tgφ"; // // textBox4 // this->textBox4->BackColor = System::Drawing::SystemColors::Window; this->textBox4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->textBox4->Location = System::Drawing::Point(446, 264); this->textBox4->Multiline = true; this->textBox4->Name = L"textBox4"; this->textBox4->Size = System::Drawing::Size(65, 39); this->textBox4->TabIndex = 16; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->BackgroundImage = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"$this.BackgroundImage"))); this->ClientSize = System::Drawing::Size(856, 429); this->Controls->Add(this->textBox4); this->Controls->Add(this->richTextBox2); this->Controls->Add(this->verticalProgressBar4); this->Controls->Add(this->label10); this->Controls->Add(this->label9); this->Controls->Add(this->A6); this->Controls->Add(this->richTextBox1);

Page 72: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

72

this->Controls->Add(this->A5); this->Controls->Add(this->textBox3); this->Controls->Add(this->A4); this->Controls->Add(this->verticalProgressBar3); this->Controls->Add(this->A3); this->Controls->Add(this->verticalProgressBar2); this->Controls->Add(this->textBox2); this->Controls->Add(this->verticalProgressBar1); this->Controls->Add(this->textBox1); this->Controls->Add(this->roundButton1); this->Controls->Add(this->tabControl1); this->Controls->Add(this->menuStrip1); this->MainMenuStrip = this->menuStrip1; this->Name = L"Form1"; this->Text = L"PFC Controler v1.3"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); this->menuStrip1->ResumeLayout(false); this->menuStrip1->PerformLayout(); this->tabControl1->ResumeLayout(false); this->Pomiary->ResumeLayout(false); this->Pomiary->PerformLayout(); this->statusStrip1->ResumeLayout(false); this->statusStrip1->PerformLayout(); this->Opcje->ResumeLayout(false); this->Opcje->PerformLayout(); this->statusStrip2->ResumeLayout(false); this->statusStrip2->PerformLayout(); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion //Metoda znajdująca dostępne porty na komputerze private: void findPorts(void) { array<Object^>^ objectArray = SerialPort::GetPortNames(); //Wstawienie do tablicy obiektów systemowych dostępnych portów this ->cbPort->Items->AddRange(objectArray); //Wstawienie nazw dostępnych portów do tablicy nazw combobox-a } //metoda obsługująca combobox-y do ustawiania parametrów portu szeregowego RS232 private: void cbSettings(void){ /* Ustawienie komendy i długości odbieranych danych o wysłaniu pijedyńczej komendy, dla każdej komendy z osoban */ if(this->cbKomenda->Text == "KOMENDA1") { cmd = 1; size = 25; } if(this->cbKomenda->Text == "KOMENDA2") { cmd = 2; size = 25; } if(this->cbKomenda->Text == "KOMENDA3") { cmd = 3; size = 5; } if(this->cbKomenda->Text == "KOMENDA4")

Page 73: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

73

{ cmd = 4; size = 9; } if(this->cbKomenda->Text == "KOMENDA5") { cmd = 5; size = 21; } if( (this->cbUBRR->Text != String::Empty) || (this->cbData->Text != String::Empty) || (this->cbStopBit->Text != String::Empty) ){ //Zmianana ilości bitów stop if(this->cbStopBit->Text == "One") // dla wyboru { this->serialPort1->StopBits = StopBits::One; } if(this->cbStopBit->Text == "Two") { this->serialPort1->StopBits = StopBits::Two; } //Ustalenie długości przesyłanej danj this->serialPort1->DataBits = Int32::Parse(this->cbData->Text); this->serialPort1->BaudRate = Int32::Parse(this->cbUBRR->Text); this->serialPort1->PortName = this->cbPort->Text; }else{ if(this->cbPort->Text != String::Empty)this->serialPort1->PortName = this->cbPort->Text; this->serialPort1->DataBits = 8; this->serialPort1->BaudRate = 9600; this->serialPort1->StopBits = StopBits::One; cmd = 5; size = 21; } } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } private: System::Void Opcje_Click(System::Object^ sender, System::EventArgs^ e) { } private: System::Void Reset_Click(System::Object^ sender, System::EventArgs^ e) { this ->cbPort->Items->Clear(); findPorts(); } private: void readByte(void) { static int cntA; static int cntV;

Page 74: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

74

static int cntReturn; static int cntC; cntA++; cntV++; cntC++; if(!CharEnabled) { if(this->serialPort1->BytesToRead != 0) { if(this->serialPort1->IsOpen) { try { fFilie.open("rsChar.txt", std::ios::trunc | std::ios::out); static int bsize; bsize = this->serialPort1->BytesToRead; Int32 *iData = new Int32[size]; Int32 auxVariable = 0; if( bsize >= size) { cntReturn = 0; this->toolStripStatusLabel1->Text = L"RUN"; this->toolStripStatusLabel2->Text = L"RUN"; for(int i = 0; i < size; i++) { auxVariable = this->serialPort1->ReadByte(); iData[i] = auxVariable; if(i == 6) { Int32 cos = 80; char chZ = 'C'; fFilie << chZ; cosinus = (float)(iData[i])/ 100; this->verticalProgressBar1->Value = auxVariable; //cos = acos( (double)cosinus); fFilie << cosinus << "\n"; } if((i == 9) || (i == 10)) { if(i == 9) { volt = iData[i]; }else { char chZ = 'V'; fFilie << chZ;

Page 75: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

75

fResultb =( ( (float)volt * 256 ) + iData[i] ); fFilie << fResultb << "\n"; this->verticalProgressBar3->Value = (int)(fResultb); } } if(i == 13 || i == 14) { if( i == 13) { amper = iData[i]; } else { char chZ = 'I'; fFilie << chZ; fResulta = ( ( (float)amper * 256) + iData[i]) / 100; fFilie << fResulta; fFilie << "\n"; this->verticalProgressBar2->Value = (int)(fResulta * 100); } } Byte newVariable; newVariable = Convert::ToByte(auxVariable); } } float pierTrzy = sqrt(3.00); float sin = sqrt( 1 - (pow( cosinus, 2 ) ) ); float P = pierTrzy * (float)cosinus * fResultb * fResulta; float Q = pierTrzy *(sin * fResulta * fResultb); float S = sqrt(P + Q); float tg = Q/P; if(tg != 0)this->textBox4->Text = tg.ToString();else this->textBox4->Text = L"∞" ; this->verticalProgressBar4->Value = (int)( ( ( atan(tg) ) * 180 ) / 3.14 ); if(P > 1050) { P /= 1000; this->label6->Text = L"[ kW ]"; } if(Q > 1050) { Q /= 1000; this->label7->Text = L"[ kvar ]"; } if(S > 1050) {

Page 76: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

76

S /= 1000; this->label8->Text = L"[ kVA ]"; } this->textBox5->Text = P.ToString(); this->textBox6->Text = Q.ToString(); this->textBox7->Text = S.ToString(); delete [] iData; this->textBox2->Text = fResultb.ToString(); this->textBox3->Text = cosinus.ToString(); if( (fResulta < 0.125) || (fResulta >= 5.2)) { if(cntA >= 40 && (fResulta < 0.125)) { cntA = 40; fFilie << "A03\n"; this->A3->Text = L"A03"; this->label15->Text = L"A03 - Za niski prąd!"; this->textBox1->Text = fResulta.ToString(); this->verticalProgressBar2->Color = System::Drawing::Color::Red; } if(cntA >= 480 && (fResulta >= 5.2)) { cntA = 480; fFilie << "A04\n"; this->A3->Text = L"A04"; this->label15->Text = L"A04 - Za wysoki prąd!"; this->textBox1->Text = fResulta.ToString(); this->verticalProgressBar2->Color = System::Drawing::Color::Red; } }else{ cntA = 0; this->textBox1->Text = fResulta.ToString(); this->A3->Text = String::Empty; //this->A4->Text = String::Empty; this->label15->Text = String::Empty; this->verticalProgressBar2->Color = System::Drawing::Color::Blue; } if( (fResultb < 340) || (fResultb >= 480)) { if((cntV >= 20) && (fResultb <= 340)) { cntV = 20; fFilie << "A05\n"; this->A4->Text = L"A05"; this->label16->Text = L"A05 - Zbyt niskie napięcie!"; this->textBox2->Text = fResultb.ToString(); this->verticalProgressBar3->Color = System::Drawing::Color::Red; }

Page 77: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

77

if((cntV >= 480) && (fResultb >= 440)) { cntV = 480; fFilie << "A06\n"; this->A4->Text = L"A06"; this->label16->Text = L"A06 - Zbyt wysokie napięcie!"; this->textBox2->Text = fResultb.ToString(); this->verticalProgressBar3->Color = System::Drawing::Color::Red; } }else{ cntV = 0; this->textBox2->Text = fResultb.ToString(); this->A4->Text = String::Empty; this->A4->Text = String::Empty; this->label16->Text = String::Empty; this->verticalProgressBar3->Color = System::Drawing::Color::Blue; } if(cosinus <= 0.93) { //if((cosinus >= 0.93) && (cntC >= 20) && ( cntC >= 20 ) ) //{ // cntC = 20; // this->verticalProgressBar1->Color = System::Drawing::Color::Red; // this->verticalProgressBar4->Color = System::Drawing::Color::Red; //} if( (cosinus <= 0.93) && (cntC >= 20) ) { cntC = 20; this->verticalProgressBar1->Color = System::Drawing::Color::Red; this->verticalProgressBar4->Color = System::Drawing::Color::Red; this->label17->Text = L"A01 - Niedokompensowanie!"; fFilie << "A01\n"; } }else{ cntC = 0; this->verticalProgressBar1->Color = System::Drawing::Color::Blue; this->verticalProgressBar4->Color = System::Drawing::Color::Blue; this->label17->Text = String::Empty; } fFilie.close(); }catch(TimeoutException^) { this->textBox1->Text= "Nic nie ma w buforze"; } }else { if(fFilie.good() != true) { this->textBox1->Text="Plik nie został otwarty "; } } }else{ cntReturn++; if(cntReturn > 40)

Page 78: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

78

{ fFilie.open("rsChar.txt", std::ios::trunc | std::ios::out); fFilie << "A99"; this->toolStripStatusLabel1->Text = L"BŁĄD! Sterownik niedostępny"; this->toolStripStatusLabel2->Text = L"BŁĄD! Sterownik niedostępny"; fFilie.close(); this->textBox1->Text = String::Empty; this->textBox2->Text = String::Empty; this->textBox3->Text = String::Empty; this->textBox4->Text = String::Empty; this->textBox5->Text = String::Empty; this->textBox6->Text = String::Empty; this->textBox7->Text = String::Empty; this->label15->Text = String::Empty; this->label16->Text = String::Empty; this->label17->Text = String::Empty; this->A3->Text = String::Empty; this->A4->Text = String::Empty; this->verticalProgressBar1-> Value = 0; this->verticalProgressBar2-> Value = 0; this->verticalProgressBar3-> Value = 0; this->verticalProgressBar4-> Value = 0; } } } } private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { readByte(); } private: System::Void timer2_Tick(System::Object^ sender, System::EventArgs^ e) { if(this->serialPort1->IsOpen) { // static bool zach = false; // if(!zach) // { if(cmd == 1) { array<byte >^ dana = gcnew array<byte> {1,4,0,9,0,10,160,15}; this->serialPort1->Write(dana, 0, 8); } if(cmd == 2) {

Page 79: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

79

array<byte >^ dana = gcnew array<byte> {1,4,0,33,0,10,32,7}; this->serialPort1->Write(dana, 0, 8); } if(cmd == 3) { array<byte >^ dana = gcnew array<byte> {1,7,65,226}; this->serialPort1->Write(dana, 0, 4); } if(cmd == 4) { array<byte >^ dana = gcnew array<byte> {1,4,0,21,0,2,96,15}; this->serialPort1->Write(dana, 0, 8); } if(cmd == 5) { array<byte >^ dana = gcnew array<byte> {1,4,0,1,0,8,160,12}; this->serialPort1->Write(dana, 0, 8); } } } private: System::Void roundButton1_Click(System::Object^ sender, System::EventArgs^ e) { static bool lock; if(this->cbPort->Text != String::Empty){ if( (!this->serialPort1->IsOpen) && !lock ){ try{ cbSettings(); this->serialPort1->PortName = this->cbPort->Text; this->serialPort1->Open(); this->serialPort1->RtsEnable = true; CharEnabled = false; this->roundButton1->Text = "Stop"; this->toolStripStatusLabel1->Text = L"RUN"; this->toolStripStatusLabel2->Text = L"RUN"; lock = true; this->toolStripProgressBar1->Value = 100; this->toolStripProgressBar2->Value = 100; this->cbPort->Enabled = false; this->cbUBRR->Enabled = false; this->cbData->Enabled = false; this->cbStopBit->Enabled = false; this->cbKomenda->Enabled = false;

Page 80: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

80

}catch(UnauthorizedAccessException^){ this->toolStripStatusLabel1->Text = L"BŁĄD! Nieynanz błąd!"; this->toolStripStatusLabel2->Text = L"BŁĄD! Nieynanz błąd!"; } }else{ CharEnabled = true; fFilie.close(); this->serialPort1->RtsEnable = false; this->serialPort1->DiscardInBuffer(); this->serialPort1->DiscardOutBuffer(); this->serialPort1->Close(); this->roundButton1->Text = "Start"; this->toolStripStatusLabel1->Text = L"STOP"; this->toolStripStatusLabel2->Text = L"STOP"; lock = false; this->toolStripProgressBar1->Value = 0; this->toolStripProgressBar2->Value = 0; this->textBox1->Text = String::Empty; this->textBox2->Text = String::Empty; this->textBox3->Text = String::Empty; this->textBox4->Text = String::Empty; this->textBox5->Text = String::Empty; this->textBox6->Text = String::Empty; this->textBox7->Text = String::Empty; this->label15->Text = String::Empty; this->label16->Text = String::Empty; this->label17->Text = String::Empty; this->A3->Text = String::Empty; this->A4->Text = String::Empty; this->verticalProgressBar1-> Value = 0; this->verticalProgressBar2-> Value = 0; this->verticalProgressBar3-> Value = 0; this->verticalProgressBar4-> Value = 0; this->cbPort->Enabled = true; this->cbUBRR->Enabled = true; this->cbData->Enabled = true; this->cbStopBit->Enabled = true; //this->cbKomenda->Enabled = true; } } } private: System::Void textBox5_TextChanged(System::Object^ sender, System::EventArgs^ e) { }

Page 81: Praca Konkursowa - pawelzabczynski.compawelzabczynski.com/images/ProtonProjekt/dokumentacja1.22-.pdf · Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu -Zdroju

Zespół Szkół nr 6 im. Króla Jana III Sobieskiego w Jastrzębiu-Zdroju

81

private: System::Void label13_Click(System::Object^ sender, System::EventArgs^ e) { } private: System::Void Pomiary_Click(System::Object^ sender, System::EventArgs^ e) { } }; }