• No results found

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).

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

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).

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).

( )

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.

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.

Related documents