• No results found

Vizualizace měření teploty pomocí PC Visualisation of temperature measurement by PC

N/A
N/A
Protected

Academic year: 2022

Share "Vizualizace měření teploty pomocí PC Visualisation of temperature measurement by PC"

Copied!
45
0
0

Loading.... (view fulltext now)

Full text

(1)

Studijní program: B2612 – Elektrotechnika a informatika Studijní obor: 1802R022 – Informatika a logistika

Vizualizace měření teploty pomocí PC Visualisation of temperature measurement

by PC

Bakalářská práce

Autor: Petr Gänsel

Vedoucí práce: Ing. Leoš Beran Konzultant: Ing. Martin Diblík

V Liberci 17.5.2007

(2)

Prohlášení

Byl(a) jsem seznámen(a) s tím, že na mou bakalářskou práci se plně vztahuje zákon č. 121/2000 o právu autorském, zejména § 60 (školní dílo).

Beru na vědomí, že TUL má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.).

Jsem si vědom(a) toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem TUL, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených univerzitou na vytvoření díla (až do jejich skutečné výše).

Bakalářskou práci jsem vypracoval(a) samostatně s použitím uvedené literatury a na základě konzultací s vedoucím bakalářské práce a konzultantem.

Datum

Podpis

(3)

Poděkování

Zde bych moc rád poděkoval všem lidem, kteří mně pomáhali v průběhu tvorby této práce. Jmenovitě bych chtěl poděkovat panu Ing. Leoši Beranovi, vedoucímu mé bakalářské práce, za jeho trpělivost při psaní této práce a za rady vedoucí k jejímu úspěšnému dokončení. Na závěr bych chtěl velice poděkovat mé rodině, která mne v průběhu studia finančně podporovala, díky které jsem mohl studia dokončit.

(4)

Abstrakt

Bakalářská práce je zaměřena na tvorbu aplikace pro operační systém MS Windows, která má zpracovávat naměřené hodnoty z diagnostického zařízení Temp_12 navrženého na Katedře elektrotechniky. Jako programovací jazyk byl využit Pascal v prostředí Borland Delphi. Bylo zapotřebí doinstalovat komponenty pro rozhraní RS 232 a vytvořit vlastní komponentu pro názornou prezentaci teplot statorového vinutí elektromotoru. Následně byl vytvořen web jako nápověda pro aplikaci s využitím jazyka PHP a databáze MySQL.

Aplikace je vytvořena jako MDI aplikace, která umožňuje práci na více měřeních současně. Program obsahuje funkce pro ukládání naměřených hodnot do souboru, jejich export do tabulky MS Excel nebo jejich následné načtení, procházení nebo tisk. K procházení naměřených hodnot a jejich snadnou identifikaci bylo vytvořeno několik pomocných prvků jako škálování, manager upravující zobrazení jejich průběhů v grafech nebo vzájemné provázání vizualizačních prvků s grafem pro snadnou identifikaci hodnot v grafu pomocí vlastního nástroje GraphLine. Dále byla vytvořena internetová stránka, kde je umístěna nápověda pro aplikaci.

Funkčnost a příjemné uživatelské rozhraní aplikace se testovalo při reálném měření, kde aplikace bez problému obstála.

Abstract

This thesis is focused on development of a diagnostic application for MS Windows platform. This application processes measured values from diagnostic unit called Temp_12 This unit was designed in department of Electroengineering. Object Pascal is a programming language which was used for a realization of the application in Delphi Borland Studio. It was important to install a few components for communication through RS 232 interface and to create a component which is able to present temperatures in stator winding. The application is linked with web site, which contains it’s help. This web site was realized by PHP language with support of MySQL database.

The Application was created as a MDI (Multi Document Interface) which allows working with more measurement in the same time. Program contains functions for saving measured values into a file, exporting table to MS Excel, loading files, passing

(5)

measured values or graph printing. Auxilary tools like Scaling and Manager, administrating courses of measurement in graphs, where developed for passing measured values and their easy identification. Also the object graphline is providing helpful linking among visual tools.

Functionality a user-friendly interface where successfully used and tested in real measuring, that means that application is useful solution for a electro motor diagnostic.

(6)

Obsah

Prohlášení... 3

Poděkování... 4

Abstrakt... 5

Obsah... 7

Úvod... 9

1 Vymezení pojmů... 10

1.1 Temp_12 ... 10

1.2 RS 232 ... 10

1.2.1 Baudrate ... 11

1.3 Delphi ... 11

1.3.1 Jednotka ( unit )... 11

1.3.2 Formulář ( form )... 11

1.3.3 Canvas ... 12

1.3.4 TShape... 12

1.3.5 Potomek... 12

1.4 Komponenta... 12

1.5 Zdroje... 13

1.6 Průměrovací kauzální filtr ... 13

2 Komponenta EMotor... 14

2.1 Popis kódu komponenty ... 15

2.1.1 Funkce DekodujBarvu... 16

3 Aplikace ThermoGear ... 18

3.1 Připojení k sériovému rozhraní... 18

3.2 Ukládání naměřených hodnot do paměti ... 19

3.2.1 Záznam informace z telegramu – TZaznamCidla ... 19

3.2.2 Způsob uložení informací - TPoleZaznamu... 20

3.3 Nastavení počátečních hodnot a způsobu měření... 20

3.3.1 Záznam podmínek měření - TPocatecniHodnotyMereni ... 21

3.3.2 Dělení měřených kanálů do skupin - TTridiciMatice ... 22

3.3.3 Offsetové hodnoty - TOffset ... 22

3.4 Ovládání potomků z rodičovského okna aplikace ... 22

3.5 Funkce... 23

3.5.1 Funkce pro vypočtení průměru - function Prumer ... 23

3.5.2 Dekódování naměřené hodnoty - function Dekoduj ... 23

3.5.3 Převod z desítkové soustavy do dvojkové - function IntToBinStr... 24

3.5.4 Test využívání portu - function NekdeOtevrenPort ... 25

3.6 Procedury... 25

3.6.1 Dialog otevřeného portu - procedure PortOpenedDlg ... 25

3.7 Ukládání souborů měření... 26

3.7.1 Export do *.xls ... 26

3.7.2 Export do *.txt... 27

3.8 Načítání souborů měření... 27

4 Formuláře potomků... 28

4.1 Formulář „Process“... 28

4.2 Počáteční hodnoty měření – formulář „Settings“ ... 28

(7)

4.2.1 Počáteční hodnoty ... 30

4.2.2 Fáze ... 30

4.2.3 Filtry... 31

4.2.4 Port ... 31

4.2.5 Moduly ... 31

4.2.6 Kalibrace ... 31

4.3 Ladící rozhraní – formulář „Comunicator“ ... 32

5 Vlastní měření... 33

5.1 Vizualizace naměřených hodnot... 34

5.1.1 Lineární graf... 34

5.1.2 Sloupcový graf ... 37

5.1.3 Tabulka... 38

5.1.4 Řez motorem ... 40

5.1.5 PopUp menu... 40

6 Nápověda... 41

Závěr... 43

Literatura... 44

Příloha A Tabulka ASCII... 45

Příloha B Obsah CD... 46

(8)

Úvod

Na Katedře elektrotechniky se zabývají diagnostikou elektromotorů. Tato diagnostika se zabývá životností asynchronního elektromotoru (dále jen AM), která je závislá na kvalitě a vlastnostech izolačních materiálů v motoru. Protože s užíváním AM se kvalita izolačních materiálů snižuje, dochází časem i ke vzniku zkratu. Nejen tyto zkratové proudy, ale i dielektrické ztráty svými tepelnými účinky ohřívají okolní prostředí, proto lze kvalitu izolačního materiálu vysledovat z teplot na statorovém vynutí za provozu.

Úkolem mé bakalářské práce bylo naprogramovat aplikaci, která by tyto teplotní průběhy názorně zobrazovala. Pro měření teplot v různých místech statorového vynutí bylo vytvořeno zařízení Temp_12, které snímá teploty pomocí termočlánků rozmístěných ve vynutí AM. Rozhraním pro komunikaci modulu Temp_12 s PC bylo vybráno sériové rozhraní RS232.

Aplikace byla aktivně využívána ke svému účelu od doby, kdy byly dokončeny její základní funkce. Na základě kvalifikované uživatelské zpětné vazby a jejích vzrůstajících požadavků na funkčnost aplikace, byly do programu postupně implementovány metody, které zefektivnily obsluhu aplikace a její uživatelské rozhraní.

Nejprve byla vytvořena SDI (Single Document Interface) aplikace, jejímž úkolem bylo pouze zobrazit naměřené hodnoty modulem Temp_12 v grafu. Později byla přidána funkce ukládání naměřených hodnot do souboru a jejich zpětné načtení.

Tyto vlastnosti byly ovšem nedostačující a pro efektivní práci s programem byly přidány další funkce.

Dalším vývojovým krokem aplikace bylo vytvoření názorného vizuálního nástroje pro zobrazení teplot statorového vinutí v motoru. Následovalo přepracování na MDI (Multi Document Interface) aplikaci. Po této fázi přišlo na řadu řešení příjemného uživatelského rozhraní pro nastavování počátečních hodnot měření.

Aplikace je vytvořena v prostředí Delphi a je naprogramována v jazyce Pascal.

Skládá se ze šesti jednotek a dvou nadstandardních komponent, které jsou doinstalovány.

(9)

1 Vymezení pojmů

V této kapitole jsou uvedeny některé pojmy, které jsou nezbytné pro pochopení dalšího textu.

1.1 Temp_12

Modul Temp_12 byl navržen na Katedře elektrotechniky, který umožňuje měření teploty prostřednictvím dvanácti vstupních kanálů. Těmito kanály jsou snímány zesílené proudy termočlánků, které se převádí na teplotní veličiny. Modul funguje tak, že přivádí vstupní analogové signály z dvanácti termočlánků do multiplexoru, který pak jednotlivé signály dále předává 24bitovému A/D převodníku. Digitální informace je zpracovávána jednočipovým mikropočítačem ADUc824, kde se data kódují a následně odesílají přes sériové rozhraní RS 232 do PC. Toto zařízení bylo navrženo tak, že je schopno měřit teplotu v rozsahu 0 až 256°C.

Modul Temp_12 je ovládán řídícími znaky (Tabulka 1), které přijímá po sériové lince.

Znak Funkce

„i“ Inicializace modulu

„k“ Ukončení měření, modul čeká na zank „i“

„x“ Telegram doručen kompletní, žádost o další

„c“ Mód ruční kalibrace

„0“ Nastavení komunikace rychlostí 9600 b / s

„1“ Nastavení komunikace rychlostí 19200 b / s

„2“ Nastavení komunikace rychlostí 38400 b / s

„3“ Nastavení komunikace rychlostí 57600 b / s Tabulka 1: Tabulka řídících znaků

1.2 RS 232

RS 232 je rozhraní pro přenos informací vytvořené původně pro komunikaci dvou zařízení do vzdálenosti 20 m. Data se přenášejí po sériové lince a přenos informací probíhá asynchronně pomocí pevně nastavené přenosové rychlosti a synchronizace sestupnou hranou startovacího impulsu.

Pro přenos binární hodnoty se používají dvě napěťové úrovně. Logická 1 je reprezentována zápornou úrovní, zatímco logická 0 je přenášena kladnou úrovní

(10)

výstupních vodičů.

Definované napěťové úrovně jsou uvedeny níže (Tabulka 2) a další parametry rozhraní RS 232 jsou detailněji zpracovány na internetu [1].

Napěťové úrovně

úroveň Vysílač přijímač

Log O 5 V až 15 V 3 V až 25 V Log 1 -5 V až -15 V - 3 V až -25 V nedefinované -3 V až 3 V

Tabulka 2 : Napěťové úrovně RS 232

1.2.1 Baudrate

Baudrate je hodnota udávající počet změn přenášeného analogového signálu za jednotku času [2]. V tomto případě při modulaci signálu prostřednictvím RS 232 platí, že 1 baud = 1 bps (bit per second). Baudrate je modulační rychlost a měří se v Baudech.

1.3 Delphi

Delphi je integrované vývojové prostředí společnosti Borland, určené pro tvorbu aplikací na platformě Microsoft Windows v jazyce Object Pascal, což je objektová nadstavba jazyka Pascal. Implementován je systém RAD (Rapid Application Development), který urychluje vývojový cyklus tím, že vytváří kostru zdrojového kódu na základě vlastního grafického rozhraní. V Delphi se využívá předem vytvořených komponent, které urychlují vývoj nových aplikací.

1.3.1 Jednotka ( unit )

Program v Delphi se skládá ze zdrojových souborů, které se nazývají units (programové jednotky, soubory s příponou PAS). Každá jednotka je uložena v separátním souboru a je kompilována samostatně. Zkompilované jednotky (soubory s příponou DCU) jsou přímo spojeny s vlastním vytvářením aplikace, tzv. linkování.

1.3.2 Formulář ( form )

Formulářem se rozumí okno aplikace, na které se umísťují vizuální komponenty a které je uživatelským rozhraním aplikace. Aplikace může mít libovolný počet formulářů, které mezi sebou mohou, nebo nemusí mít vztah.

Každý formulář má svou vlastní jednotku, která obsahuje vlastní zdrojový kód.

(11)

Hodnoty a vlastnosti formuláře, nastavené pomocí vizuálního nástroje Object Manager v Delphi, jsou uloženy v souboru s koncovkou *.DFM. Tento soubor je binárním souborem a není zdrojovým kódem jazyka Pascal.

Formuláře existují modální nebo nemodální. Modální formulář je takový, který se stává primárním formulářem aplikace. Dokud není tento formulář ukončen, není možné pracovat s aplikací jiným způsobem, než prostřednictvím právě tohoto formuláře. Nemodální formulář tyto vlastnosti nemá.

1.3.3 Canvas

Canvas znamená v angličtině plátno. Na toto pomyslné plátno vybraných komponent je možné, pomocí několika dostupných funkcí Canvasu, kreslit základní křivky.

1.3.4 TShape

Pokud je potřeba kreslit na formulář jednoduché geometrické tvary, existuje v Delphi třída TShape. Pomocí této třídy je možné vytvořit objekty, kterým je možno měnit tvar, velikost nebo barvu.

1.3.5 Potomek

Aplikace je naprogramována jako MDI aplikace, což znamená, že se skládá z hlavního okna aplikace (overlapped window) a z dceřiných oken (child windows).

Tato dceřiná okna jsou zcela podřízena hlavnímu oknu aplikace, která je jejich vlastníkem, a nemohou opustit její plochu. Takové dceřiné okno je dále v práci nazýváno právě potomkem.

1.4 Komponenta

Komponenta je, jak název napovídá, součástí celku. Celek v tomto případě reprezentuje vývojové prostředí Delphi. Komponenta je malý program, nebo balíček programů, který vykonává určitou činnost (například zobrazuje text nebo obrázky, přehrává multimédia, komunikuje s databází atd.). Komponenty se dají do vývojového prostředí doinstalovat. U komponenty se předpokládá, že je předem odladěná a plně funkční, aby při jejím použití nebylo nutné zasahovat do jejího zdrojového kódu.

(12)

1.5 Zdroje

Zdroje, anglicky resources, se využívají k rozšíření programu o specifické grafické prvky, jako jsou ikony, bitmapy apod. Jsou uloženy v externím souboru, který lze vytvářet nebo editovat v příslušném programu a jeho obsah upravovat pro vlastní potřebu. Aby bylo možno zdrojový soubor využít, musí se zapsat do programu za klíčové slovo implementation a následně program znovu zkompilovat. Zdrojová data se tak připojí ke zdrojovému souboru a spojí se s ním do jednoho celku.

1.6 Průměrovací kauzální filtr

Průměrovací kauzální filtr je systém, kterého výstupní signál je průměrem předcházejících hodnot vstupního signálu. Počet hodnot zahrnutých do výpočtu průměru udává řád filtru. Znak r v rovnici (1) má význam řádu filtru. Rovnice (2) je příkladem výstupu průměrovacího kauzálního filtru třetího řádu.

[ ]

r

n x

= n y

n

r + n

=

i

1

]

[ (1)

3

] [ ] 1 [ ] 2 ] [

[ x n x n x n

n

y = − ⋅ − ⋅ (2)

(13)

2 Komponenta EMotor

Žádná komponenta obsažená v Delphi nesplňovala vizuální požadavky, které vznikly při snaze o názorné zobrazení teplot ve vinutí motoru. Aby se dalo využít tohoto prvku i v jiných aplikacích a odstranila se nutnost opakovaného programování, komponování a odlaďování za stejným cílem, byla vytvořena komponenta EMotor.

Tuto komponentu je možno do Delphi doinstalovat a dále využívat jako vizuální komponentu, kterou lze při programování jednoduše přidávat na formulář jako ostatní vizuální komponenty.

EMotor má podobu řezu motorem (Obrázek 1). V obrázku statorového vinutí jsou na dvanácti místech zobrazeny termočlánky jako barevné kruhové objekty. Tyto objekty, prostřednictvím barvy, zobrazují teplotu naměřenou v jednotlivých místech statorového vinutí. Barva reprezentující teplotu je přepočítávána ze škály, která je zobrazena po pravé straně komponenty. Ta je sestavena na základě vstupních hodnot při tvorbě komponenty v aplikaci.

Obrázek 1 : Komponenta EMotor

V komponentě je možné nastavit mezní hodnoty. Pokud vstupující parametr,

(14)

který zastupuje naměřenou hodnotu, přesáhne mezní teplotu, je uživatel upozorněn zvukovou signalizací. Barvy na jednotlivých objektech jsou aktualizovány synchronně s přicházejícími daty. Parametry vstupující do objektu komponenty nejsou ukládány, proto se k nim není možné vracet.

Při tvorbě komponenty EMotor bylo zapotřebí vytvořit vlastní zdroj. Šlo o obrázek, který představuje řez motorem. Obrázek by se bez tohoto řešení musel načítat z pevného, předem v programu nadefinovaného místa v úložišti. Takové řešení by bylo velice nepraktické. Pokud by chtěl programátor využít komponentu, musel by sám vytvořit příslušné adresáře a obrázek na patřičné místo zkopírovat. To by bylo nesystémové řešení například z důvodu omezení hardwaru, nedostatku práv v systému nebo možného nežádoucího zásahu do obrázku. Zdroje jsem vytvořil pomocí programu Resource builder, který je možno nalézt na internetové adrese uvedené v literatuře[3].

Byla využita jeho shareware licence k vytvoření vlastního zdroje, do kterého byl přidán potřebný obrázek.

2.1 Popis kódu komponenty

Komponenta EMotor je postavena na základě třídy TCustomPanel, která je o potřebné vlastnosti rozšířena. Třída TCustomPanel byla vybrána, protože nejvíce vyhovovala požadavkům, které byly kladeny na novou komponentu.

Komponenta se skládá z šesti součástí a to ze čtyř objektů TLabel, které jsou využity pro zobrazení mezních hodnot a dvou objektů TImage. První z nich reprezentuje obrázek řezu motorem a druhý teplotní škálu pro orientaci v barevném znázornění teplot snímaných na termočláncích.

Při tvorbě komponenty je do prvního objektu načten obrázek řezu motorem ze zdroje. Na tento obrázek je dokresleno 12 objektů Civka typu TShape. Pro jejich rozmístění po obrázku je využito smyčky, která se 12x zopakuje. V každé fázi je vytvořen objekt Civka, kterému jsou nastaveny vlastnosti (velikost, tvar atd.) a je umístěn na požadovanou pozici podle souřadnic vypočtených z rovnic kružnice (1) a (2).

α

⋅sin

= r

y (1)

α

⋅cos

= r

x (2)

V tomto případě je koordinační kružnice rozdělena při dvanácti čidlech na úseky po 30°. Souřadný systém na objektech v Delphi má svůj počátek v levém horním rohu

(15)

objektu, proto pro zobrazení všech objektů v Canvasu se musel posunout střed koordinační kružnice o její poloměr doprava a dolů.

Proto se v níže uvedených rovnicích zdrojového kódu odečítají poloměry R od vypočtených x-ových a y-ových složek. Dále bylo zapotřebí, aby se objekt Cidlo s indexem 1 nacházel na vrcholu obrázku (na 12ti hodinách), proto se do argumentu funkce sin a cos musí k aktuálnímu úhlu přičíst 90°, tedy π / 2. Na konci vzorce jsou přičteny pomocné hodnoty, které upravují posunutí objektů na patřičné pozice, aby lícovaly s podkladním obrázkem. Níže zobrazený zdrojový kód naznačuje výpočet souřadnic pro umístění objektů na obrázku, kde i je počet iterací, pi je konstanta Ludolfova čísla a pCidel reprezentuje počet objektů.

Civka[i].Left:=round(R*(1-cos((i-1)*pi/(pcidel/2)+ pi/2)))+35;

Civka[i].Top:=round(R-R*sin((i-1)*pi/(pCidel/2)+pi/2))+30;

Pro zobrazení naměřených teplot pomocí vytvořené komponenty byla přidána vlastnost ZbarveniCivky. Tato se stará, prostřednictvím funkce GetZbarveniCivky, o získání barvy objektu Cidlo určitého indexu a pomocí procedury SetZbarveniCivky o její změnu. Pro přenesení informace o barvě se využívá typu TColor. V proceduře Zapis, která je článkem spojujícím hlavní program s komponentou, se využívá druhé jmenované procedury SetZbarveniCivky. Přes argumenty procedury Zapis se předávají informace o mezních teplotách elektromotoru, naměřené hodnoty a indexu měřeného kanálu. Tyto argumenty jsou dále zpracovávány funkcí DekodujBarvu, která vrací hodnotu barvy typu TColor.

Další funkcí komponenty je zvuková signalizace přesáhnutí kritických teplot.

Řešením je procedura PlaySnd(), využívající standardní proceduru PlaySound(), která přehrává zvuk uložený ve zdroji komponenty. Varovný zvuk se přehraje v případě, že byla překročena některá z kritických hodnot, což se testuje v proceduře Zapis.

2.1.1 Funkce DekodujBarvu

Zajímavým úkolem bylo vytvořit barevnou škálu pro teplotu. Tato škála se nedá vytvořit jednoduše jako přechod od bílé k černé nebo od modré k červené, protože by se zde zobrazily další barvy, které do tohoto přechodu nepatří (například fialová, hnědá atd.). Klasickým přechodem tedy myslím z modré do zelené a dále pak přes žlutou do červené. Každá barva se skládá ze tří složek (Tabulka 3).

(16)

Barva Hexadecimální hodnota Funkce pro převod na typ TColor

Červená ff 00 00 RGB( 255 , 0, 0 )

Zelená 00 ff 00 RGB( 0, 255, 0 )

Modrá 00 00 ff RGB( 0, 0, 255 )

Tabulka 3 : Barvy a funkce

Každá složka je reprezentována jedním bajtem (256 bitů), proto je každý přechod dlouhý 256 kroků. V první přechodu z modré barvy do zelené zároveň postupně ubývá složka modré a přibývá zelené. Žlutá barva je složena z barvy červené a zelené, proto se v další fázi k současné zelené postupně přidává až 256 bitů složky zastupující červenou barvu. Poslední fází je přechod ze žluté do červené. V této fázi pouze ubývá složka zelené barvy až do stavu, kdy je zastoupena jen složka červené.

Kompletní barevná škála se tedy skládá ze 768mi barev (tří přechodů, kde v každém je provedeno 256 kroků).

Barva, kterou bude reprezentována naměřená hodnota, se získá promítnutím naměřené hodnoty do rozsahu mezních teplot motoru. Tedy platí poměr z rovnice (4).

( )

min max

min 768

min max

min

768 −

= ⋅

− ⇒

= − hodnota

hodnota x

x (4)

Proměnná hodnota, je naměřená hodnota teploty uvnitř statorového vynutí a min a max jsou mezní teploty motoru.

Následuje dělení do tří skupin, které představují přechody z modré do zelené, ze zelené do žluté a ze žluté do červené. Přepočtená hodnota se zařadí do jedné těchto skupin, kde se získají složky hledané barvy.

Výsledkem funkce je pak návratová hodnota typu TColor funkce RGB(), jejíž parametry jsou získané složky R, G a B. Ošetřen je i případ, kdy se předávaný parametr nachází mimo přípustný interval omezený mezními hodnotami.

(17)

3 Aplikace ThermoGear

Jako přijatelné řešení uživatelského rozhraní byl zvolen typ aplikace MDI - Multiple Document Interface. MDI aplikace je taková aplikace, kdy je možné pod hlavním oknem (formulářem) otevřít libovolný počet oken (formulářů) a tak současně pracovat na několika měřeních najednou. Výhodou je možnost jednak provádět více měření současně a nebo porovnávat průběhy staršího data s novějšími.

Celá aplikace byla od počátku vytvářena jako dynamická, ovšem setkal jsem s omezeními jako například ukládání naměřených hodnot do souboru, při kterých jsem úplnou dynamičnost nemohl zajistit. Při současném nastavení by aplikace byla nucena ukládat do souboru také dynamické pole, což nelze. Byla proto omezena použitím maximálně dvanácti měřených kanálů.

Pro ukládání naměřených hodnot byl namísto typu real použit celočíselný typ integer. Tento typ byl vybrán pro jeho nižší náročnost na operační paměť, protože byl předpokládán vysoký počet naměřených hodnot. Aby se odstranila nepřesnost spojená s ukládáním dat do celočíselného formátu, zavedla se proměnná accuracy typu real, která rozšiřuje naměřenou hodnotu a zaručuje její přesnost, která je v aplikaci volitelná uživatelem.

3.1 Připojení k sériovému rozhraní

Připojení aplikace k sériovému portu probíhá pomocí komponenty ComPort.

Tato komponenta je součástí balíčku ComPort, který je k dispozici na internetu [4] a plně vyhovuje požadavkům aplikace. Balíček se stává z 5ti komponent níže uvedených tříd.

• TComPort

• TComDataPacket

• TComComboBox

• TComTerminal

• TComLed

• TComRadioGroup

V aplikaci bylo využito objektů třídy TComPort pro připojení k portu a speciálního ComboBoxu, který podle nastavení měření umožňuje úpravu parametrů komponenty ComPort. Třída TComPort byla upravena tak, aby nastavení rychlosti

(18)

komunikace korespondovalo s možnostmi modulu Temp_12. Změna se týkala rychlosti komunikace po sériové lince, kterou objekt této třídy nabízí. Povoleny byly pouze rychlosti, kterými zařízení Temp_12 komunikuje (9600, 19200, 38400 a 57600 baud/s).

Přednastavené inicializační hodnoty komponenty třídy TComPort (Tabulka 4) jsou výchozími i pro modul Temp_12.

Název Hodnota

Datové bity 8

Stop bity 1

Parita není

Kontrol toku není

Tabulka 4 : Defaultní hodnoty komunikace přes RS 232

MDI aplikace umožňuje více měření zároveň, proto každý potomek hlavního formuláře obsahuje vlastní komponentu pro přístup k portu. Počáteční nastavení komponent potomků je řešeno pomocí globálního portu spjatého s hlavním formulářem.

Tato komponenta není využívána k měření, ale pouze k nastavování portů případných potomků aplikace nebo nastavení offsetu.

Po zadání všech potřebných parametrů na kartě „Port“, se s uzavírajícím se formulářem „Settings“ nastaví pouze globální port. Při tvorbě potomka, je tedy celý objekt globálního portu, spolu s jeho nastavením, zkopírován do nově vytvářeného objektu portu. Toto je možné pouze u objektů stejných tříd, kterými právě porty jsou.

Globální port je také využíván formulářem „Settings“, pro nastavení offsetu měření.

3.2 Ukládání naměřených hodnot do paměti

Pro ukládání hodnot do paměti se využívá typu TPoleZaznamu, který je dynamickým polem strukturovaného typu nazvaného TZaznamCidla. Typ TZaznamCidla je záznamem naměřené hodnoty a několika důležitých informací s ní spjatých. Tyto typy jsou definovány v jednotce hlavní aplikace, na kterou se při definici objektů těchto typů jednotky potomků odkazují. Využitím stejných typů je zaručena kompatibilita dat mezi hlavní aplikací a jejími potomky.

3.2.1 Záznam informace z telegramu – TZaznamCidla

Telegram (Obrázek 3), který je vysílán modulem Temp_12, se skládá z informací o indexu měřeného kanálu, uplynulém čase a naměřené hodnotě. Spolu s

(19)

těmito hodnotami bylo nutné zachovávat také další informace o měření. Informace jako je čas, kdy byla hodnota naměřena od započetí měření, cyklus, ve kterém byla hodnota naměřena, přesnost, se kterou bylo počítáno, a počet měřených kanálů zapojených do měření. Právě proto byl vytvořen strukturovaný typ TZaznamCidla, který všechny tyto informace uchovává. Tento záznam se tedy skládá z reálných částí Cas a Presnost a celočíselných částí Cyklus, HodnotaCidla, CisloCidla a pocetCidel. Z obrázku (Obrázek 2) je zřejmá struktura záznamu.

Obrázek 2 : Struktura typu TZaznamCidla

3.2.2 Způsob uložení informací - TPoleZaznamu

Množství dat přijatých z měření není předem známo, proto jsou data ukládána do otevřeného dynamického pole, ve kterém jsou jednotlivé prvky typu TZaznamCidla.

Aby bylo možné v programu efektivně pracovat s takovýmto specifickým druhem pole, jak v hlavní aplikaci tak i v jejích potomcích, byl vytvořen typ TPoleZaznamu, který tuto kompatibilitu datových polí zaručí. Kompatibilita polí je využívána například při procesu ukládání dat do souboru, který je vykonáván prostřednictvím hlavní aplikace.

3.3 Nastavení počátečních hodnot a způsobu měření

Podmínky, v nichž jsou jednotlivá měření prováděna, se mohou v některých částech lišit, proto lze tyto počáteční podmínky ovlivňující měření, do měření zahrnout.

Ať už je to teplota prostředí, ve kterém se měří, kritické teploty motoru, časové a teplotní konstanty využívané k přepočtu hodnot z měřících modulů, požadovaná přesnost měření a nebo zda je vhodné použít softwarový průměrovací filtr, všechny tyto počáteční podmínky lze nastavit Pro uložení těchto hodnot byl vytvořen strukturovaný typ TPocatecniHodnotyMereni.

(20)

3.3.1 Záznam podmínek měření - TPocatecniHodnotyMereni

Strukturovaný typ TpocatecniHodnotyMereni byl vytvořen pro předávání nastavení počátečních podmínek potomkům aplikace a jejich uchovávání. Nastavení počátečních podmínek probíhá prostřednictvím formuláře „Settings“.

Struktura typu je zřejmá z tabulky (Tabulka 5).

Typ Vysvětlení

Name String název měření

Nacteno Boolean logická hodnota výsledku, zda byly hodnoty načteny ze souboru

Minimum integer minimální hodnota vertikální osy grafu Maximum integer maximální hodnota vertikální osy grafu PocetCidel integer počet měřících kanálů

TempConst real teplotní konstanta

TimeConst real časová konstanta

Prumerovani boolean logická hodnota výsledku, zda byl použit průměrovací filtr

delkaPrumerovani integer řád filtru

Offset TOffset offsetové hodnoty pro jednotlivé kanály Accuracy real přepočtová konstanta přesnosti Roztrideni TTridiciMatice zatříděné kanálů do skupin BarvyFazi array [0..2] of TColor barvy reprezentující skupiny fází LabelFaze array [0..2] of string názvy reprezentující fáze

Temp_12 boolean logická hodnota výsledku, zda byl použit modul Temp_12

TEMP_12Min integer minimální kritická hodnota elektromotoru TEMP_12Max integer maximální kritická hodnota elektromotoru Tabulka 5 : Struktura typu TPocatecniHodnotyMereni

Řetězec name obsahuje název měření, které je dále využito při ukládání měření do souboru. Celočíselné části, minimum a maximum, mají vliv na počáteční nastavení vertikální osy grafu. Část pocetCidel obsahuje počet čidel použitých při měření.

Prumerovani a delkaPrumerovani zajišťují využití filtru a nastavují řád průměrovacího filtru. Dále struktura obsahuje reálné části konstant pro přepočítávání telegramů z modulu jako tempConst, timeConst. TempConst je využita při přepočtení naměřené hodnoty na stupně Celsia a timeConst na přepočtení času mezi jednotlivými měřeními.

Další reálná část accuracy představuje předvolenou přesnost pro práci s hodnotami.

Celočíselné části TEMP_12Min, TEMP_12Max slouží k uložení kritických hodnot motoru, dále využitých v komponentě EMotor a logická část Temp_12 k využití vizuální komponenty. Část offset slouží k uložení jednotlivých offsetových hodnot pro

(21)

jednotlivé kanály, proto byl vytvořen typ TOffset. Část nacteno zajišťuje omezení, která se vztahují k hodnotám načteným ze souboru. Části barvyFazi a labelFaze jsou využity k uložení informace o barvě a názvu skupin fází. Poslední nejmenovanou částí je roztrideni, které využívá typu TTridiciMatice, který alokuje místo v paměť pro uložení roztřídění měřících kanálů do skupin fází.

3.3.2 Dělení měřených kanálů do skupin - TTridiciMatice

Rozdělení jednotlivých měřených kanálů do skupin fází statorového vinutí uchovává typ TTridiciMatice. Je to dvourozměrné dynamické pole logického typu boolean. Pro případ 12-ti čidel je pole rozděleno do dvanácti řádků reprezentujících měřené kanály, a tří sloupců reprezentující fáze. V každém řádku se tedy nachází právě jedna hodnota true a to ve sloupci, kterému byl kanál přidělen.

3.3.3 Offsetové hodnoty - TOffset

Tento typ dynamického pole hodnot typu real byl vytvořen pro ukládání hodnot offsetů měřených kanálů. Zde bylo opět zapotřebí vytvořit nový typ kvůli snadnějšímu předávání hodnot potomkům.

3.4 Ovládání potomků z rodičovského okna aplikace

Všechny důležité ovládací prvky potomků lze ovládat i za pomoci tlačítek nástrojové lišty hlavního okna aplikace. Napomáhá tomu také fakt, že většina procedur v programu je naprogramována jako akce. Akce mají tu dobrou vlastnost, že obsahují navíc událost OnUpdate, která se spouští v případě nečinnosti aplikace. V této události se testuje, zda akci zpřístupnit. Ve zjednodušeném pohledu to znamená, že funkční tlačítka v nástrojové liště hlavní aplikace jsou aktivní pouze v případě, kdy je aktivní právě potomek, jehož funkci zastupují.

Každý formulář potomka hlavní aplikace si při vytváření do proměnné Tag ukládá číslo (Tabulka 6), podle kterého je v programu rozlišován.

Formulář Hodnota proměnné Tag

„Comunicator“ 1

„Process“ 2

Tabulka 6 : Proměnná Tag potomka

V události OnUpdate akce, která zastupuje některou funkci potomka, se skrývá níže uvedený testovací kód. Tento kód ověřuje, zda existuje a zároveň je aktivní

(22)

potomek, který akci umožňuje. Pokud je tato podmínka splněna, nástroj, který zastupuje akci, je zpřístupněn.

procedure TMainForm.AProcessRunExecute(Sender: TObject);

begin

if ActiveMDIChild.tag = 2 then

TfrmProcess(ActiveMDIChild).ARun.Execute;

end;

procedure TMainForm.AProcessRunUpdate(Sender: TObject);

begin

TAction(Sender).Enabled := ( MDIChildCount > 0 ) and ( ActiveMDIChild.tag = 2 ) and (

TfrmProcess(ActiveMDIChild).ComPort1.Connected ) end;

3.5 Funkce

V hlavní jednotce programu bylo ponecháno několik funkcí, které jsou společné pro všechny potomky aplikace.

3.5.1 Funkce pro vypočtení průměru - function Prumer

Funkce Prumer byla napsána z důvodu využití stejného postupu jak při počítání offsetových hodnot tak při filtrování vstupních hodnot. Argumentem funkce je pole celých čísel. Navržena je tak, že není omezená velikostí zpracovávaného pole, protože z jednotlivých potomků mohou přicházet různě dlouhé pole hodnot. Velikost polí je závislá na tom, jaká byla v jednotlivých měřeních nastavena délka průměrování. Tato funkce všechny prvky pole sečte a vydělí počtem prvků v poli. Vypočtenou průměrnou hodnotu vrací zpět.

3.5.2 Dekódování naměřené hodnoty - function Dekoduj

Z modulu přichází naměřené hodnoty na termočláncích v kódovaném tvaru, proto je zapotřebí nejprve část telegramu správně rozkódovat (Obrázek 3). Kódování se využívá pro to, aby se minimalizovala ztráta informace po sériové lince.

Aby bylo možné zkontrolovat úplnost doručeného telegramu vysílaného zařízením Temp_12, je doplněn kontrolními znaky „Ab“ na začátku a „cD“ na konci telegramu.

(23)

Obrázek 3 : Princip rozkódování telegramu

Naměřená hodnota modulem je obsažena v třetím až osmém bajtu příchozího telegramu. Z těchto bajtů se získá číselné vyjádření znaku ASCII tabulky (Příloha A) pomocí funkce Ord. Pro zpětném ověření telegramu, zda je doručen kompletní, bylo zapotřebí, aby se bajty zakódované hodnoty pohybovaly v zobrazitelných znacích. Při kódování byla tedy ke každému bajtu přičtena proměnná shift, která nese hodnotu 33 a musí být při dekódování odečtena.

Před použitím příchozích dat jsou u všech bajtů vynulovány horní čtyři bity nejnižšího bajtu. To se provádí proto, aby se zamezilo chybě, která by se mohla vyskytnout při přenosu, kdyby se změnil některý z horních čtyřech nulových bitů.

Složení nejnižšího bajtu výsledné čtyř-bajtové veličiny probíhá způsobem, že nejnižší 4 bity třetího bajtu telegramu se logickým součtem spojí se čtyřmi nejnižšími bity šestého bajtu telegramu posunutými o 4 bity doleva. Obdobným způsobem se pokračuje se čtvrtým a sedmým následně pátým a osmým bajtem vstupního telegramu. Z takto vytvořených proměnných se opět odstraní nepotřebné horní tři bajty a vše se spojí logickým součtem ve výslednou hodnotu naměřenou modulem. Ta se dále převádí na stupně Celsia rozšířením konstantou tempConst.

3.5.3 Převod z desítkové soustavy do dvojkové - function IntToBinStr

Pro kontrolu příchozího telegramu bylo také zapotřebí vytvořit funkci, která by zobrazila jednotlivé bajty příchozí naměřené hodnoty v binárním tvaru.

Funkce převádí celá čísla do binárního tvaru tak, že celočíselně dělí argument dvěma a testuje, zda-li je výsledná hodnota bezezbytku, v případě, že tomu tak je,

(24)

připíše na konec řetězce 0, v opačném případě 1. Tento cyklus pokračuje do té doby, dokud se nezíská při celočíselném dělení výsledek 0.

Dále funkce změní pořadí číslic v řetězci tak, aby se výsledný řetězec četl zprava doleva a doplní ho nulami do délky jednoho bajtu.

Výsledek je vrácen jako řetězec znaků typu String.

3.5.4 Test využívání portu - function NekdeOtevrenPort

Touto funkcí byla řešena potřeba testování, zda je již port, na který se snaží aplikace připojit, používán. V této funkci se prochází všemi potomky hlavního formuláře a vrácena je hodnota typu boolean, která je logickým výsledkem toho zda je či není požadovaný port využíván. Pokud je port využíván, spustí se procedura PortOpenedDlg, která na základě dialogu s uživatelem port odpojí nebo jeho spojení zachová.

3.6 Procedury

Většina procedur je naprogramována jako akce pro jejich snadnější využití v programování a jejich užitečnou událostí OnUpdate. Některé ale zůstaly klasickými procedurami jako například procedura PortOpenedDlg.

3.6.1 Dialog otevřeného portu - procedure PortOpenedDlg

Procedura PortOpenedDlg zajišťuje obsluhu portu. Zjišťuje, zda-li některý potomek požadovaný port nevyužívá, pokud tomu tak není, spojení s portem se naváže.

V případě že je již port využíván, pomocí dialogového okna se zeptá, jestli může port odpojit. Podle volby uživatele se port od potomka, který port využívá, odpojí a propojí ho s aktivním potomkem, nebo komunikaci nepřeruší a aktivní potomek, který se o spojení dožadoval, je ponechán bez připojení.

V praxi je to naprogramováno tak, že jsou otestovány všechny potomci hlavní aplikace. Pokud některý potomek port využívá, je zjištěn jeho index. Pokud uživatel souhlasí s přerušením měření, uzavře se propojení s potomkem nalezeného indexu a aktivní potomek, který žádal o spojení, spojení s portem naváže.

Tato procedura obsahuje část kódu, který zamezí připojení k portu v případě,že hodnoty zobrazené na potomku, byly načteny ze souboru. Omezení je zde proto, že by nastala kolize s indexací pole hodnot. To by šlo vyřešit, ovšem z hlediska věrohodnosti

(25)

naměřených hodnot a konzistenci dat není tato možnost potřebná ani žádoucí.

3.7 Ukládání souborů měření

Data získaná při měření a uživatelem nastavené hodnoty před a v průběhu měření se ukládají do dvou binárních souborů speciálního typu a jednoho textového souboru (Tabulka 7). Soubory se liší pro rozlišení koncovkou a také svým obsahem.

koncovka typ Obsah

cid binární naměřené hodnoty cidi binární počáteční podmínky měření cidn textový poznámky z „Notepad“

Tabulka 7 : Typy souborů aplikace

Cidi je koncovka pro binární soubor obsahující hodnoty nastavené před započetím měření. Do tohoto souboru se ukládají data jako typ TPHkUlození, který je podobný typu TPocatecniHodnoty, ale dynamická část záznamu TridiciMatice je převedena na statickou s omezením pro dvanáct měřených kanálů.

Soubor s koncovkou Cid obsahuje naměřená data. Tento binární soubor je typu TZaznamCidla a do něho se ukládají všechny v paměti uložené naměřené hodnoty stejného typu.

Pro uložení dat do souboru nelze použít strukturovaného typu, který obsahuje dynamické pole. Proto byl vytvořen další typ TPHkUlozeni, který má podobnou strukturu jako typ TPocatecniHodnoty, ale obsahuje pouze hodnoty důležité pro správné zobrazení naměřených hodnot ve vizualizačních prvcích a dynamické pole (TTridiciMatice) je nahrazeno statickým. Toto náhradní pole je dvojrozměrné o maximální velikosti 12 x 3. Zde je příčina omezení aplikace na 12 měřených kanálů.

Cidn je koncovka textového souboru, který obsahuje poznámky zapsané uživatelem do poznámkového bloku „Notepad“. Soubor není formátován a je uložen ve stejném formátu, jakým je uživatelem napsán.

3.7.1 Export do *.xls

Exportování naměřených hodnot do souboru Microsoft Excel zastává funkce SaveAsExcelFile Tato funkce konvertuje všechny hodnoty z tabulky formuláře

„Process“ do tabulky ve formátu programu Excel za podmínky, že má uživatel program Excel nainstalován. Daný konvertor jsem nalezl na internetu [5].

(26)

3.7.2 Export do *.txt

Pro možnost zobrazení naměřených hodnot v obecném editoru lze také využít exportu do textového souboru. V hlavičce souboru je zapsán text, který uživatel napsal do poznámkového bloku „Notepad“ a dále jsou zapsány naměřené hodnoty spolu s časem naměření. Hodnoty jsou od sebe odděleny tabelátorem.

3.8 Načítání souborů měření

Načítání dat ze souborů se provádí také ze tří samostatných souborů. Je nutnou podmínkou, aby existovaly oba dva binární soubory měření ( .cid, .cidi ). Bez souboru s koncovkou cidi není možné správné zobrazení naměřených hodnot, a proto je tato možnost vyloučena. Aby nebylo možno pokračovat v měření na takovém formuláři, kde byly zobrazeny hodnoty ze souboru, změní se hodnota nacteno v počátečních podmínkách na true. Tímto se zamezí připojení portu k formuláři a tím pádem i měření.

(27)

4 Formuláře potomků

V programu jsou použity dva typy formulářů. První z nich „Comunicator“, byl vytvořen pro odlaďování komunikace mezi PC a modulem. Druhý, „Process“, který byl vytvořen jako hlavní formulář pro vizualizaci měření a pro práci s naměřenými hodnotami.

4.1 Formulář „Process“

Speciálně vytvořený formulář „Process“, hraje klíčovou úlohu při měření.

Zajišťuje přijímání telegramů z modulu, jejich následné rozkódování, vykreslení v grafických prvcích formuláře a zapsání do tabulky naměřených hodnot. Umožňuje též práci s naměřenými hodnotami.

4.2 Počáteční hodnoty měření – formulář „Settings“

Zadávání počátečních podmínek měření je zajištěno pomocí formuláře

„Settings“. Postupem času byl přes různé pokusy o vytvoření příjemného uživatelského rozhraní vytvořen takový druh formuláře (Obrázek 4), kde po levé straně je zobrazen strom záložek a po pravé straně jsou zobrazeny volené karty.

Tento formulář je logicky rozdělen do šesti hlavních skupin (počáteční hodnoty, fáze, filtry, port, moduly, offset) a dvou podskupin (počáteční konstanty, názvy a barvy).

Menší komplikace nastaly při nastavování počtu čidel zapojených do měření.

V případě, že se na kartě „Initial Values“ změní počet kanálu zapojených do měření, musí se v kartě „Offset“ změnit počet řádků v tabulce offsetů jednotlivých kanálů.

Spolu s tím musí být změněn i počet skupin tlačítek fází v kartě „Phases“.

Problém nastal při volbě události, ve které se mají změnou zasažené objekty v nově zadaném počtu vytvořit znovu. Zda při události změny jejich počtu v editačním okně nebo při zobrazení karty s offsety, popřípadě s fázemi. Pokud se kód změny umístil do události zobrazení karty, na které se měla změna projevit (karty „Phases“ a

„Offset“), nastalo viditelné překreslování formuláře. Jako nejlepší řešení se tedy jevilo provést tuto změnu právě při události opuštění karty „Initial Values“, kdy jsou ostatní karty neviditelné.

(28)

Proces, který proběhne po opuštění katy „Initial Values“, se skládá z odstranění objektu tabulky v právě neviditelné kartě „Offset“ a znovuvytvoření tabulky s nově zvoleným počtem nulově ohodnocených řádků a dále pak odstraněním všech objektů RadioGroup, reprezentujících zatřídění jednotlivých kanálů do fází, po kterém se znovu vytvoří celá sada těchto objektů o novém počtu. Vše se ovšem děje až po kladném vyhodnocení podmínky, že se změnil počet měřených kanálů.

Obrázek 4 : Formulář „Settings“

Aby se zjednodušilo zdlouhavé nastavování počátečních podmínek před vlastním měřením, využívá se jejich podobnosti. Všechny nastavitelné hodnoty se mohou ukládat do inicializačního ini souboru. O využití tohoto ini souboru je rozhodnuti při vytváření formuláře „Settings“. V případě existence ini souboru je automaticky načten a formulář vyplněn uloženými hodnotami.

Pro uchování změn provedených v nastavení bylo zvoleno zaškrtávací pole

„Default“ v levém dolním rohu formuláře. Pokud je zaškrtnuto, při opuštění formuláře tlačítkem „OK“ se uloží všechny nastavené hodnoty do inicializačního souboru. Pokud tomu tak není, zapíší se hodnoty pouze do objektu pocatecniHodnoty typu TPocatecniHodnotyMereni.

(29)

4.2.1 Počáteční hodnoty

V této záložce se zadává název měření, který je dále využívá v názvu formuláře potomka a je využit při navržení názvu souboru pro uložení naměřených hodnot.

Nastavuje se počet čidel zapojených do měření a minimální a maximální hodnoty zobrazitelné v grafech. Tyto hodnoty se uloží jako implicitní a při práci s grafem se na ně uživatel může zpětně odvolat. V případě překročení rozsahu zobrazitelných hodnot v grafu je možno upravit tento rozsah pomocí škálování, které je součástí grafu.

4.2.1.1 Počáteční konstanty

Konstanty se přímo vztahují na použitý modul. Jsou použity k přepočítání hodnot na stupně Celsia nebo na sekundy a ukládány jako typ real. Pro modul Temp_12 jimi jsou hodnoty z tabulky (Tabulka 8).

Nazev Hodnota 1,53145 x 10-5

Temp_const

9,191176 x 10-3 Time_const

Tabulka 8 : Konstanty pro modul Temp_12

4.2.2 Fáze

Rozdělení měřících kanálů do skupin podle fáze statorového vinutí je zprostředkováno pomocí objektů skupin tlačítek typu TRadioGroup. Tyto skupiny jsou vytvořeny při vlastní tvorbě formuláře nebo znovu při změně počtu kanálů. Řešení pomocí skupin tlačítek ulehčilo práci s ověřováním, zda-li není některý kanál zařazen do dvou skupin fází současně. Dále se tento typ jednoduše zaznamenává do třídící matice.

4.2.2.1 Názvy a barvy

Pro větší přehlednost v aplikaci se dají jednotlivé fáze pojmenovat a každé fázi přidělit vlastní barva. Nejdříve tedy budou všechny průběhy teplot na vinutích stejné fáze zobrazovány stejnou barvou. Nastavení z karty „Colors & Labels“ je uloženo do dvou statických polí o třech prvcích. První typu TColor pro uložení barvy a druhé typu String pro název. Tyto nastavení se aplikují při tvorbě formuláře „Process“, kdy v cyklu vytváření skupin se načítají hodnoty z polí barev a názvů právě takového indexu, kolikátým cyklem je právě procházeno. Tímto způsobem jsou barvy a názvy aplikovány do správných objektů a jejich vlastností.

(30)

4.2.3 Filtry

Z důvodu potlačení různých šumů, působících na měřící systém, bylo zapotřebí zapojit do měření softwarový filtr. Jako dostačující byl zvolen průměrovací kauzální filtr.Tento filtr využívá průměrovací funkci, která v závislosti na zadané délce účinně potlačuje šum. Na této záložce se daný filtr připojuje do měření a také se nastavuje jeho řád, který udává kolik hodnot zpětně se do průměrování započítá.

4.2.4 Port

Tato záložka umožňuje základní nastavení portu. Implicitně jsou nastaveny hodnoty parity, kontroly toku, stop bitů a datových bitů (Tabulka 9).

Parita Není

Flow control Není

Stop bity 1

Datové bity 8

Tabulka 9 : Implicitní nastavení portu

4.2.5 Moduly

Pro možnost rozšíření aplikace o měření na různých zařízeních, kterým je například Temp_12, byla vytvořena karta „Modules“. Tato karta slouží k možnosti využití právě modulu Temp_12 a také k využití vizualizačního prvku komponenty EMotor. Na této kartě jsou také nastavovány mezní teploty komponenty EMotor, které hrají důležitou roli při promítání naměřených hodnot na barevnou škálu.

4.2.6 Kalibrace

Aby se eliminovaly chybné odečty, bylo též zapotřebí zajistit, aby na všech kanálech při ustáleném klidovém stavu motoru, byla naměřena stejná počáteční teplota okolního prostředí. Pokusným měřením se tedy na jednotlivých kanálech změří předem zadaný počet hodnot, z nichž se vypočte průměr. Tato průměrná hodnota se odečte od pokojové teploty, čímž vznikne hodnota offsetu pro daný kanál.

Pro uložení těchto hodnot byl vytvořen typ TOffset, který je dynamickým polem typu real. Offsetové hodnoty jsou předávány nově vytvářenému potomku prostřednictvím počátečních podmínek.

(31)

4.3 Ladící rozhraní – formulář „Comunicator“

Další možností programu je kroková komunikace se zařízením Temp_12. K tomuto byl vytvořen komunikační formulář „Comunicator“ (Obrázek 5).

Obrázek 5 : Formulář "Comunicator"

Prostřednictvím tohoto formuláře je možné posílat libovolné ASCII znaky, inicializovat zařízení nebo žádat o další naměřenou hodnotu následujícího kanálu.

Základní řídící znaky „i“ a „x“ lze pro zjednodušení posílat i prostřednictvím tlačítek

„Inicialisation“ a „Next“. Inicializace zařízení, tedy odeslání řídícího znaku „i“, znamená, že se začíná s měřením opět na měřícím kanále s nejnižším indexem.

Výstupem tohoto formuláře jsou jednotlivé části telegramu a dekódovaná naměřená hodnota. Částmi telegramu jsou reprezentovány trojice bajtů ADC_L, ADC_M. ADC_H, které se funkcí IntToBinStr převádí do binárního tvaru. Jejich složením vzniká hodnota ADC zobrazená v desítkové soustavě. Dále je tu zobrazena výsledná hodnota, která je získána rozšířením hodnoty ADC konstantou „Constant“.

Tato výsledná hodnota by měla představovat naměřenou teplotu ve stupních celsia, pokud tedy byla použitá přepočtová konstanta zvolena správně.

(32)

5 Vlastní měření

Měření na zařízení TEMP_12 prostřednictvím formuláře „Process“ probíhá obdobným způsobem jako komunikace formulářem „Comunicator“. Zařízení Temp_12 komunikuje tak, že čeká na inicializační znak „i“. Po jeho přijetí zařízení odesílá zpět telegram s informacemi o prvním měření. Dále zařízení vyčkává na potvrzení znakem

„x“, že telegram byl přijat kompletní. Obsahem telegramu vyslaného ihned po přijetí potvrzení je hodnota naměřená na následujícím vstupním kanálu zařízení.

Dalším ovládacím znakem zařízení Temp_12 je znak „k“. Příchozí znak „k“

ukončí vysílání telegramů a nastaví zařízení do stavu, kdy čeká na novou inicializaci.

Tento znak je používán pouze při ukončení měření. Kvůli nutnosti nové inicializace zařízení není řídící znak „k“ vhodný pro pozastavení měření. V tomto případe, jak bylo výše uvedeno, se začíná měřit na kanále s nejnižším indexem.

Hodnoty, které by byly naměřeny na kanálech s vyšším indexem, než byl ten, na kterém proběhlo měření před přerušením, by v záznamu měření chyběly. Zastavení měření probíhá způsobem, že se zamezí odeslání řídícího znaku „x“, který je nutnou podmínkou pro vyslání následného telegramu z modulu.

Z komponenty ComPort je využito události reagující na příchozí signál rozhraní RS 232. Uvnitř této události se volá funkce ReadStr, předávající načtený řetězec z tohoto signálu.

Procedura načítá příchozí řetězce tak dlouho, dokud není doručen kompletní telegram s kontrolními znaky zmíněnými v kapitole 3.5.2 Dekódování naměřené hodnoty - function Dekoduj. Ověřování úplnosti telegramu bylo nutné vytvořit, protože se telegram po náhodné době nějakým způsobem deformoval. Tím pádem občas docházelo z důvodu rozkódování chybného telegramu k přetékání paměti. V programu je totiž využívána indexace pole podle čísla měřeného kanálu, které je získáváno právě z telegramu. Nastal tedy případ, kdy bylo získáno chybné číslo měřeného kanálu.

V tomto případě se program pokoušel o zápis do paměti, kam nemá přístup, protože index pole byl mimo jeho definovaný rozsah.

Je-li telegram doručen kompletní, využije se funkce Dekoduj pro získání naměřené hodnoty a získá se index měřeného kanálu. Následuje ukládání do dynamického pole typu TZaznamCidla, které se vždy při příchodu dalšího platného telegramu zvětší o jedna, a tak vytvoří prostor pro uložení další naměřené hodnoty.

(33)

5.1 Vizualizace naměřených hodnot

Zobrazování teplotních průběhů do grafického rozhraní se provádí okamžitě po tom, co byla naměřená data uložena do paměti. Pro názornost byly vytvořeny celkem čtyři vizualizační prvky:

• lineární graf

• sloupcový graf

• řez motorem (komponenta EMotor)

• tabulka

5.1.1 Lineární graf

Pro názorné zobrazení průběhů teplot je asi nejvíce vhodný lineární graf (Obrázek 6). Byla tedy použita komponenta TChart, která tento druh vizualizace umožňuje. Komponenta TChart obsahuje užitečné funkce, které jsou aplikovatelné na práci se zobrazenými průběhy. Příkladem může být funkce zoom, což je možnost přiblížení či oddálení vybraného úseku grafu.

Pro příjemné procházení naměřených hodnot byla vytvořena pomůcka nazvaná GaphLine. Ta se v místě dvojitého poklikání na graf zobrazí jako vertikální osa (Obrázek 6), která reprezentuje zvolený časový okamžik. Pouhé zobrazení této osy není hlavní funkcí. Díky tomuto nástroji lze zobrazit hodnoty, které byly naměřeny v daném čase, ale i v ostatních vizualizačních prvcích.

(34)

Obrázek 6 : Lineární graf s graphLine

Nástroj graphLine byl řešen tak, že při události, která nastane po dvojitém poklikání na graf, se využijí hodnoty souřadnic pozice myši na grafu. X-ová souřadnice grafu se přepočítá funkcí CalcXPosValue na hodnotu času, která s touto souřadnicí koresponduje. Dále se prohledá pole typu TPoleZaznamu, kde jsou uchovány naměřené hodnoty spolu s ostatními informacemi. V tomto poli se hledá záznam obsahující informaci o čase, která je podobná vypočtené hodnotě na ose x. Aby se nemuselo prohledávat celé pole, dělí se na půl a zjišťuje se, do které poloviny hledaný záznam patří. Poté se k hledanému záznamu přibližuje cyklem while buď odspodu, nebo shora v závislosti na tom, v jaké polovině pole se nacházel. Z obsahu záznamu je zjištěn cyklus, ve kterém byly hodnoty v hledaném čase naměřeny. Najde se první v řadě záznamů, který obsahuje nalezenou informaci o cyklu. Postupně jsou všechny záznamy, které byly naměřeny v daném cyklu (obsahující stejnou informaci o cyklu), zobrazeny pomocí příslušných procedur v tabulce, sloupcovém grafu a v řezu.

GraphLine je objekt třídy TGraphLine, která je odvozena od třídy TShape. Jeho vizuální podoba je vertikální modrá čára zobrazená v obrázku výše (Obrázek 6). Třída TGraphLine je oproti TShape schopna uchovávat navíc dvě různé proměnné typu integer a double a je rozšířena o některé funkce. Tyto dvě proměnné jsou připraveny pro

(35)

uchování informace o x-ové souřadnic grafu (integer) a o informaci času (double). Tyto dvě hodnoty jsou zapotřebí při použití funkcí zoomu. V tomto případě se objekt graphLine překreslí v grafu na příslušné místo, aby zobrazoval požadovaný čas správně.

5.1.1.1 Změna vlastností vizualizace - Panel manager Další vizualizační pomůckou pro čtení dat z grafu je „manager“ (Obrázek 7), který umožňuje skrývání a zobrazování vybraných průběhů s možností změny jejich zobrazované barvy. Tyto volby lze provádět i po skupinách, do kterých byly při nastavování počátečních podmínek jednotlivé kanály zatříděny.

Panel je součástí formuláře „Process“ a je vytvářen spolu s ním.

Tvorba panelu je spojena s třídící maticí, podle které se jednotlivé objekty ovládacích prvků měřených kanálů rozdělují. Zajímavou částí kódu je níže uvedená procedura PhaseChecking, kdy se má zobrazit nebo skrýt celá skupina průběhů podle stavu jejího CheckBoxu (zaškrtávacího pole). Prochází se zde celý sloupec třídící matice, jehož index odpovídá hodnotě tag

objektu (Sender), od kterého přišel požadavek. Příslušnost objektu ke skupině je zjištěna na základě hodnoty true v řádku, kteréhož index je i indexem objektu. Předává se stejná logická hodnota zaškrtávacího pole checked zatupujícího skupinu všem vlastnostem objektů CheckBox patřících do upravované skupiny. Tento panel lze skrývat pomocí tlačítka „Panel“ nástrojové lišty, nebo z Popup menu formuláře.

Obrázek 7 : Panel "Manager"

(36)

5.1.1.2 Škálování

V případě chybných předpokladů nebo z nedostatku informací se může stát, že uživatel při zadávání počátečních hodnot správně neodhadne maximální nebo minimální zobrazené hodnoty grafu. Tento problém se řeší pomocí škálování. Škálováním se rozumí upravení rozsahu vertikální osy grafu.

procedure TfrmProcess.PhaseChecking(Sender: TObject);

var

i: integer;

begin

for i:= low(input.roztrideni) to high(input.roztrideni) do begin

if input.roztrideni[i,(sender as TCheckBox).Tag] then begin

CheckBox[i].Checked:= phaseCheckbox[(Sender as TCheckBox).Tag].Checked;

end;

end;

end;

Způsob úpravy těchto údajů byl zvolen tak, že uživatel má k dispozici pro každou osu dvě obslužná tlačítka (Obrázek 8). Jedno pro zvýšení a druhé pro snížení minimální či maximální hodnoty rozsahu vertikální osy. Velikost změny škálováním lze upravit v editačním okně „Step“, kde se zadává hodnota inkrementace či dekrementace.

Obrázek 8 : Škálování

5.1.2 Sloupcový graf

Dalším vizualizačním prvkem pro zobrazení dat je sloupcový graf (Obrázek 9).

Zde jsou zobrazeny pouze poslední naměřené hodnoty jednotlivých kanálů. Rozsah vertikální osy grafu je závislý na změnách škálovaní a počátečních hodnot nastavených před započetím měření.

(37)

Prostřednictvím procedury ZobrazDoSloupce jsou naměřené hodnoty zobrazovány do grafu. Jejím argumentem je číslo kanálu a hodnota na něm naměřená.

Procedura má za úkol smazat zobrazení předchozí naměřené hodnoty v grafu a nahradit ho novým.

Obrázek 9 : Sloupcový graf

5.1.3 Tabulka

Tabulka je asi nejpřirozenější způsob roztřídění hodnot do sloupců a řádků podle společných vlastností, které tyto hodnoty spojují.

V prvním sloupci tabulky (Obrázek 10) je zobrazena informace o čase, kdy byla naměřena poslední hodnota příslušného řádku. Sloupce tabulky třídí hodnoty podle vstupních kanálů a řádky představují cykly, v nichž byly hodnoty měřeny.

Hlavička tabulky a její formát jsou nastaveny již při tvorbě formuláře TFrmProcess, kdy proběhne nastavení počtu sloupců a jejich názvů.

(38)

Správné zatřídění naměřených hodnot do tabulky provádí procedura ZapisDoTabulky pomocí jejích argumentů X, Y, Z a Hodnota. Význam argumentů je dále vysvětlen.

Parametr X předává informaci o indexu měřeného kanálu, který určuje patřičný sloupec tabulky. Parametr Y slouží k předání informace o času, kdy byla hodnota naměřena. Čas je zapsán vždy do prvního sloupce, je tedy neustále aktualizován až do zapsání poslední hodnoty daného řádku - cyklu. Aktuální index cyklu měření předává parametr Z. Ten také určuje patřičný řádek v tabulce. Z výše uvedených argument X a Z je jasně určena odpovídající buňka tabulky, do které je zapsána naměřená hodnota předávaná posledním parametrem Hodnota.

Obrázek 10 : Tabulka naměřených hodnot

5.1.3.1 Vlastnosti tabulky

Tabulku si může uživatel přizpůsobit podle vlastních představ pomocí. změny fontu nebo barvy fixovaných částí tabulky. Této změny lze docílit pomocí PopUp menu formuláře „Process“ pod položkou „Table“. Podrobnější popis PopUp menu se nachází na straně 40 v kapitole 5.1.5 PopUp menu.

(39)

5.1.4 Řez motorem

K názornému barevnému zobrazení teplot na statorovém vinutí elektromotoru byla vytvořena komponenta EMotor, o které pojednává kapitola 2 Komponenta EMotor na straně 14. Ta je použita jako další vizualizační nástroj formuláře „Process“..

5.1.5 PopUp menu

K ovládání formuláře „Process“ je také k dispozici PopUp menu (z angl.

vyskakovaní menu), které je zobrazeno po kliknutí pravým tlačítkem myši v jeho oblasti. Menu obsahuje základní ovládací prvky pro měření a správu vizualizačních nástrojů. V tabulce lze měnit druh použitého písma a barvu fixovaných částí. V grafech se lze vracet k původnímu nastavení rozsahu vertikální osy, nebo zvolit automatický rozsah vertikální osy grafu. Automatický rozsah je nastaven tak, aby byly zobrazeny všechny naměřené hodnoty. Znamená to, že minimální hodnota rozsahu je i minimální naměřenou hodnotou v průběhu měření a stejně tak maximální hodnota rozsahu je i maximální naměřenou hodnotou.

Výhodou ovládání aplikace pomocí PopUp menu je, že uživatel vždy ovládá formulář, na který klikl, a proto není zapotřebí mít na paměti, který formulář je právě aktivní.

References

Related documents

Pro tuto bakalářskou práci byl vybrán typ úchopu kleště a to z toho důvodu, že stavebnice Bioloid premium kit, pomocí které má být uchopovač vytvořen, je pro tento

HP Pro 3130 Mini-tower Business PC är en kraftfull men flexibel lösning för små och medelstora företag som behöver stabil teknik till ett överkomligt pris.. HP Pro 3130 är också

När det finns ett laddat batteri i datorn och den inte är ansluten till extern nätström, drivs den med batteriström.. När datorn är ansluten till extern ström via nätadaptern

Du öppnar kontrollpanelen för Quick Launch Buttons från Start-knappen eller från en ikon som du kan visa i meddelandefältet, längst till höger i Aktivitetsfältet eller på

Na základě těchto klíčových slov bylo nalezeno přibližně 20 výsledků, z toho 4 relevantní zdroje týkající se zmíněné problematiky (viz. V současnosti

Jelikož se u různých řad měničů liší čísla parametrů, ale princip komunikace zůstává stejný, mělo by být možné použít tuto aplikaci pro parametrizaci

Primární jmenný server načte data z lokálního disku, sekundární jmenný server získá pro spravované zóny dotazem zone transfer data z primárního jmenného

TABULKY NAMĚŘENÝCH