XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
298
Automatizační programy pro signálový analyzátor LabShop PULSE POPEK, Jiří Ing.
Katedra ATŘ-352, VŠB-TU Ostrava, 17. listopadu 15, Ostrava - Poruba, 708 33
Abstract: Cílem této práce je seznámení s problematikou tvorby automatizačních programů pomocí technologie OLE (OLE2). Automatizační programy slouží k ovládání signálového analyzátoru PULSE firmy Brűel & Kjaer. Smyslem takovýchto automatizačních programů je doplnění analyzátoru o nové funkce, které v původním systému chybí nebo jsou součástí jiného software, který je pro svou cenu pro účely výuky nedostupný. Rovněž lze tímto způsobem rozšířit funkce stávající. Firma Brűel & Kjaer takovýmto potřebám vychází vstříc a své softwarové produkty navrhuje a vytváří tak, aby zmíněná rozšíření byla možná. V této práci je využito nástrojů Microsoft Visual Studio 6.0, konkrétně jazyka Visual Basic, a je také popsána práce se softwarovými nástroji řady Microsoft Office, jmenovitě MS Graph, který je využit k prezentaci 2D a 3D grafů. Komponenta MS Graph je ovládána shodně jako grafy v programu Excel, což je příspěvkem k intuitivnímu ovládání programu bez podrobného studia návodů k obsluze. Přístup k objektům softwarové části analyzátoru PULSE, který je tvořen programem LabShop, z prostředí Visual Basicu pro vzájemnou výměnu dat a synchronizaci jejich funkce notifikačním systémem je umožněn díky jeho moderní koncepci. Touto koncepcí je myšleno pojetí sady jako otevřeného programového systému. Takovýmto otevřeným programovým vybavením je např. také samotný Microsoft Office. Otevřeným programovým vybavením není myšleno uvolnění zdrojových kódů, ale vytvoření takovéhoto programového vybavení jako dobře zdokumentovaného balíku komponentového software. Blíže o této problematice pojednává např. [2]. Prezentovaných výsledků bylo dosaženo při řešení výzkumného záměru MSM 272300012. Keywords: signál, analyzátor, program, šablona, automatizace
1 Signálový analyzátor PULSE Multianalyzátorový systém PULSE představuje komplexní řešení integrující problematiku měření hluku a vibrací dohromady se zpracováním dat těchto měření. Systém PULSE je určen pro použití na platformě Microsoft Windows NT. Díky tomu může využít výhod, které tento operační systém nabízí, např. spolupráce s jinými aplikacemi, jednoduché sdílení dat atd. V systému PULSE je plně integrována podpora technologií firmy Microsoft a je tak programovatelný (ovladatelný) např. pomocí technologie ActiveX (OLE Automation). Tuto vlastnost lze využít pro ovládání systému PULSE a v kombinaci s vhodnými postupy konfigurace a měření automatizovat rutinní postupy a řešit tak individuální problémy měření a zpracování dat dané úlohy. Systém PULSE je široce konfigurovatelný. Firma Brűel & Kjaer poskytuje širokou škálu možností konfigurace systému a zákaznickou podporu, díky které se dostala na špičku ve svém oboru. K dispozici je výběr různých kombinací jednotlivých částí systému PULSE, jako jsou např. různé druhy hardwarových rozhraní (Front-End) s různými počty kanálů. Vysoká modularita systému PULSE je dána rovněž širokou škálou softwarových nástrojů, které lze přidávat nebo ubírat v jakémkoliv pořadí a kombinacích. PULSE nabízí vyčerpávající škálu analyzátorů, kdy např. analyzátory FFT, 1/n oktávový, Overall Level jsou
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
299
standardní součástí už základní konfigurace, stejně jako generátor signálů. Dále je možné systém doplnit rozšiřujícími nástroji a aplikacemi, jako např. analyzátory Order Tracking, Sound Power, Sound Quality, Noise Source Identification, Modal Analysis. Systém PULSE, v konfiguraci jaká je zakoupena na katedře ATŘ, je znázorněn na Obr. 1. Celý systém PULSE, jak již bylo v předchozích odstavcích zmíněno, se skládá ze dvou základních částí – hardwarové a softwarové. Hardwarovou část tvoří především zařízení, které je nazýváno Front-End. Základní softwarovou část pak tvoří program LabShop, jejíž ovládáním pomocí technologie OLE2 se zabývá tato práce.
Obr. 1: Schéma systému PULSE Na Obr. 1 jsou modrou barvou znázorněny součásti systému PULSE. Žlutě pak ostatní programové vybavení. Jak je dále vidět na obrázku 1 a 2, systém PULSE přistupuje k zařízení nazývanému Front-End, určenému ke sběru dat (fyzickému připojení snímačů, případně k transformaci signálu), prostřednictvím operačního systému Microsoft Windows NT. Tato komunikace se zařízením Front-End je realizována skrze počítačovou síť typu Ethernet. Zařízení Front-End je z hlediska umístění v počítačové síti zkonstruováno jako autonomní. To lze považovat jako nespornou výhodu, jelikož je využito stávajících univerzálních rozhraní, namísto vývoje jiných, více či méně účelových, a jejich následné implementace do počítače řady PC. K posílání dat z měření lze tak využít i stávající rozvod počítačová sítě.
2 OLE a automatizace OLE a její rozšíření OLE2 jsou technologie, které jsou interně postaveny na technologii COM. Tyto technologie umožňují vzájemnou interakci mezi částmi (komponentami) jednoho nebo více uživatelských programů. Program LabShop složen z mnoha takovýchto komponent, které také můžeme nazývat objekty. Ty nám umožňují přizpůsobit multianalyzátorový systém PULSE pro potřebu vykonávání předdefinované množiny operací. Programy využívající technologii OLE mohou zautomatizovat jednu nebo více zadaných úloh tím, že pomocí této technologie ovládají součásti jiného software, ve kterém je OLE taktéž implementována. Programy řídící činnost programu LabShop mohou ovládat vše od začátku měření (nastavení parametrů jednotlivých částí projektu), přes zobrazování výsledků, až po generování zpráv. OLE umožňuje relativně rychle a jednoduše přizpůsobit nastavení měřicí úlohy danému problému, kdy je využito již vlastněného produktu, což značně snižuje náklady na vývoj jiného specializovaného programového vybavení, určeného pro danou úlohu. Implementací
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
300
technologie OLE se ze systému PULSE stává zcela univerzální nástroj. Zákazník si nyní může svůj systém nejen rozšířit, ale dokonce i jeho ovládání přizpůsobit natolik, že tento složitý sytém bude moci ovládat i obsluha, která pro tento systém neprošla zdlouhavým školením. Při běhu automatizačních programů dokonce uživatel ani nemusí vědět, že nějaký program LabShop existuje. Nejen jeho spuštění, ale dokonce i veškeré operace může tento program provádět na pozadí a nechat se „vést“ automatizačním programem. Jednou z možností, jak lze vyřešit přenos mnohdy různorodých dat mezi programy, je použití tzv. dokumentů OLE. Dokumenty OLE, jindy také nazývané smíšené nebo kombinované dokumenty, představují integraci většiny datových typů a komponent. Typickým příkladem komponent, které lze nalézt v OLE dokumentech jsou zvuky, grafy či obrázky. Jestliže při vytváření aplikace implementujeme podporu OLE, umožníme tak jednoduchým způsobem sdílení dat, aniž bychom se museli obávat jejich porušení. Právě technologie OLE se postará o zapouzdření dat při přenášení mezi dokumenty nebo aplikacemi, takže v konečném důsledku je způsob přenosu dat stejný pro různé datové typy a objekty.
3 Objekty programu LabShop PULSE Objekty programu LabShop jsou navrženy a vzájemně uspořádány tak, že vytvářejí rozsáhlou hierarchickou strukturu, jejíž popis je obsahem [3]. Toto rozdělení je zcela logické a vychází z ověřené konvence struktury objektů, jako je tomu i u většiny ostatních produktů. Tímto způsobem zůstává zachována jednak přehlednost celé struktury, jednak tím dovolí programátorovi s objekty známým způsobem pracovat. Objekty jsou v této struktuře logicky rozděleny a uspořádány do hierarchické struktury, která je současně navržena s ohledem na jednotlivé logické částí programu LabShop PULSE podle funkčnosti. Voláním metod a vlastností lze číst nebo nastavovat vlastnosti odpovídajícího objektu a tím měnit i chování celého programu.
4 Přenos dat z aplikace LabShop Problém přenosu dat z aplikace LabShop do automatizačního programu se pomocí technologie OLE stává relativně jednoduchou záležitostí, zvláště při použití prostředí MS Visual Basic, ve kterém je vytvořena i následující ukázka. Před samotným přenesením dat je ale nejdříve nutné provést řadu přípravných kroků: 1. Spuštění aplikace LabShop – je nutné vytvořit objekt třídy Application např. následujícím způsobem: Dim PulseApplication As PulseLabShop.Application Set PulseApplication = CreateObject("Pulse.LabShop.Application") 2. Otevření projektu – pro načtení dat z aplikace LabShop je nutné tato data nějakým způsobem otevřít. Jelikož úkolem prvního automatizačního programu je zpracování naměřených dat, je nutné do aplikace LabShop načíst projekt s daty z měření. Tento úkol lze provést např. provedením následujícího kódu: Dim myProject As PulseLabShop.Project Set myProject = PulseApplication.OpenProject( _ "c:\VibracePS-Panely.pls", True) Vykonáním tohoto kódu dojde k otevření projektu s měřenými daty, která jsou uložena v souboru na disku C: s názvem VibracePS-Panely.pls (Přípona pls je vyhrazena pro soubory obsahující projekty aplikace LabShop). 3. Vytvoření objektu BKDataSet – k tomu, aby bylo možné přečíst pole dat z otevřeného projektu aplikace LabShop je nutné blíže specifikovat, která data po aplikaci žádáme. Projekty obsahují data uložená ve formě multibufferů ke kterým je přístup např.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
301
prostřednictvím tzv. organizéru funkcí – Function Organiser. Ten obsahuje skupiny funkcí – Function Groups a ty se pak dělí na jednotlivé funkce (Functions). Každá funkce může navíc obsahovat řezy – Slices (Obr. 2).
Obr. 2: Část hierarchie funkcí v organizéru funkcí
4. Samotná data jsou pak obsažena v objektu FunctionData. Pak lze vytvořit objekt třídy BKDataSet, který samotná data zapouzdřuje: Dim PulseData As PulseLabShop.BKDataSet Set PulseData = myProject.FunctionOrganiser.FunctionGroups ("Autospectra Group").Functions("Autospectrum(Vibrace1) - _ Input").FunctionData 5. Nyní lze volat metodu RealValues, která vrací vektor naměřených hodnot: Dim Entries As Integer Dim ValueArr As Variant Dim indx As Integer Entries = PulseData.NumberOfXAxisEntries ReDim ValueArr(Entries - 1) As Double PulseData.RealValues ValueArr, indx kde Entries znamená počet prvků pole (vektoru), který získáme voláním metody PulseData.NumberOfXAxisEntries.ValueArr, v tomto případě představuje pole pro uložení těchto hodnot, které je ovšem nutno předimenzovat pomocí funkce ReDim na požadovanou velikost (Entries-1) a pro uložení hodnot typu Double. Nyní metodě PulseData.RealValues předáme jako první parametr odkaz na toto pole, do kterého má metoda data uložit a jako druhý parametr index žádaného pole, tj. pořadí záznamu v multibufferu.
5 Notifikační systém Mezi vlastnosti dnešních operačních systémů patří zvýšená bezpečnost, podpora počítačových sítí, možnost spuštění více úloh najednou (multithreading) a mnoho dalších. S rozvojem uživatelského rozhraní směrem k intuitivnějšímu ovládání (pomocí řízení běhu programů např. tím, že uživatel zmáčkne tlačítko myši umístěné nad určitým objektem) se u moderních operačních systémů vyvinula nová metoda interakce mezi jednotlivými objekty a byl tak
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
302
definován nový programový přístup. Nazýváme jej událostmi řízené programování (event driven programming). Událostmi řízené programování představuje zcela jiný způsob řízení běhu programu. U klasických konzolových aplikací je běh programu řízen pouze způsobem větvení programu a řízení běhu se tak provádí pomocí definování podmínek, cyklů a skoků. U moderních programů, které využívají výhody grafického rozhraní (GUI), je běh programu řízen pomocí zasílání zpráv. Tyto zprávy vznikají při určité události (event). Takovou událostí může být např. kliknutí myši, ale lze je vyvolat i programově. Zprávy jsou jakési struktury, ve kterých je obsažen identifikátor vzniklé události a řada jiných parametrů, které slouží pro specifikaci zpracování daným objektem. Blíže o této problematice pojednává např. [4]. Toto událostmi řízené programování je využito i při tvorbě automatizačních programů. Některé objekty, tak jak to jejich logická funkce vyžaduje, mohou být zdroji různých zpráv. Celému systému objektů, které mohou být zdrojem zpráv a sytému jejich zachycení a zpracování se říká Notifikační systém. Program LabShop je také schopen posílat stavové informace řady svých objektů formou zpráv, kterým se říká Notifications. Ve verzi 5 programu LabShop byl notifikační sytém pozměněn tak, aby práce s ním byla jednodušší. V současnosti jsou tak v programu LabShop implementovány dva druhy notifikačního systému. Starší systém je zachován kvůli zpětné kompatibilitě a je označován jako Notify. Novější je pak označen jako Notify2 a využívá distribuovaného (rozloženého) notifikačního sytému, který usnadňuje filtrovaní zpráv. Rozhraní systému Notify2 je jednoduše vytvořeno změnou deklarace objektu systému PULSE tak, jak tomu je naznačeno např. v následující deklaraci: Public WithEvents PulseApplication as PulseLabshop.Application
kde klíčové slovo WithEvents znamená, že deklarovaný objekt je zdrojem zpráv. Zpracování zpráv tohoto objektu pak je možno provést v proceduře nazvané PulseApplication_Notify2. V této proceduře je ještě nutné dopsat část kódu, která potřebné zprávy odfiltruje, což se provádí formou podmíněného větvení příkazem If ...Then, Select Case apod. Výčet objektů, v jejíchž implementaci je použit nový druh notifikačního systému se v různých verzích liší. Pro přesné informace je třeba použít dokumentaci dodanou s verzí programu LabShop, se kterou je pracováno. Filtrování zpráv se řeší pomocí větvení. Zprávy jsou rozděleny do skupin podle objektů, ke kterým logicky přísluší. Identifikátory zpráv jsou typu Long a práce s nimi (jejich identifikace) je zpřehledněna pomocí konstanty, jejichž názvy začínají BK..., např. BKApplicationVisible s hodnotou 16842752. Touto hodnotou jsou identifikovány zprávy týkající se viditelnosti aplikace LabShop. Samotná hodnota pak je obsažena v parametru této zprávy a v tomto případě může nabývat hodnot BKVisible (1) nebo BKInvisible (0). Kód celého zpracování pak může vypadat třeba následovně: Private Sub PulseApplication_Notify2(ByVal NotifierObject As Object, ByVal Message As Long, ByVal Parameter As Long) If Message = BKApplicationVisible Then If Parameter = BKVisible Then ‘ ošetření události přesunutí aplikace LabShop na popředí ElseIf Parameter = BKInvisible Then ‘ ošetření události přesunutí aplikace LabShop na pozadí End If End If If Message = BKApplicationProject Then If Parameter = BKProjectOpened Then ‘ ošetření události otevření projektu ElseIf Parameter = BKProjectClosed Then ‘ ošetření události zavření projektu End If End If End Sub
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
303
Zpracování jednotlivých zpráv si s sebou ovšem nese určitou časovou provizi. Při příchodu více zpráv v krátkém časovém intervalu nemusí být program schopen všechny ošetřit. Jelikož se nám programovací nástroj nestará o korektní zpracování zpráv tak, jak je tomu například v knihovně MFC, je nutné si zprávy nejprve ukládat do předem připravené fronty zpráv (ta je realizována speciální strukturou využívající kolekci). Toto ukládání má minimální časovou provizi a zamezíme tak případné ztrátě některých zpráv. K výběru jednotlivých zpráv je pak zvlášť vytvořena smyčka zpráv, jejíž takt je určen instancí objektu třídy Timer. Touto smyčkou jsou pak v předem nastaveném časovém intervalu jednotlivé zprávy postupně z fronty vybírány, aby mohly být korektně zpracovány. K celému notifikačnímu systému ovšem existuje velmi nedokonalá dokumentace a kdyby nebylo možné krokování běhu ukázkového programu, nebylo by možné ani funkčnost notifikačního systému popsat. Pro získání identifikátoru dané zprávy ke snadnější orientaci v napsaném kódu, bylo nutné tuto zprávu vyvolat (např. otevřením projektu) a na základě zachycené hodnoty najít odpovídající název konstanty. K získání identifikátorů (jmen) těchto konstant (na základě zachycení číselné hodnoty) bylo nutno použít typovou knihovnu s názvem pulse.tlb. Deklarace konstant v této typové knihovně lze zobrazit například pomocí nástroje Object Browser, který je součástí sady Microsoft Visual Studio. Důvodem požití notifikačního systému je především zpřehlednění kódu a zajištění bezpečného chodu celé aplikace. Např. při ukončení program LabShop vyšle zprávu o svém uzavření. Pokud je toto uzavření provedeno vnějším zásahem, můžeme zprávu zachytit a zpracovat v proceduře, která se postará o korektní ukončení práce automatizačního programu nebo znovu program LabShop spustí. Může také provést jiné kroky, které zabraňují podivnému chování programu nebo dokonce jeho násilnému ukončení systémem.
6 Využití prostředků rodiny Microsoft® Office Po vyřešení problému s přenosem dat do klientské aplikace je možno tato data potřebným způsobem zpracovat a prezentovat v grafické podobě. K tomu je možno využít tzv. vložitelné objekty, jakými jsou např. graf programu Microsoft Graph nebo graf tabulkového kalkulátoru Microsoft Excel. Na těchto komponentách již dlouhou dobu pracuje mnoho programátorů, kteří je zdokonalili tak, že ovládání grafu je velmi pohodlné, jednoduché a maximálně univerzální. Komponentu lze přizpůsobit podle většiny požadavků kladených na vykreslení různých typů grafů. Protože si jsou objekty grafů aplikací MS GRAPH a MS EXCEL po stránce programového ovládání shodné, lze je ovládat shodným kódem. Ani zkušený uživatel nepozná mezi těmito grafy rozdíl.
6.1 Programová realizace V prostředí programovacího jazyka Visual Basic existují dvě možnosti, jak jednoduše vložit OLE objekt do vytvořeného formuláře. První možností je přímé vložení objektu třídy GRAPH klepnutím na tlačítko s ikonou umístěnou na implicitně na levém panelu nástrojů v editoru Visual Basic 6.0. Pokud zde taková ikona není umístěna, znamená to, že jsme do seznamu komponent nevybrali komponentu Graf aplikace Microsoft Graph v okně Components (Obr. 3: Okno Components pro výběr komponent projektu Visual Basic), které se otevře po vybrání položky Components kontextového menu vyvolaného klepnutím pravým tlačítkem myši na panel nástrojů nebo z menu Project. Nyní již je možné vykreslit objekt grafu aplikace Microsoft Graph na zvolené místo do formuláře tak, jak.je to znázorněno na Obr. 4: Vložení objektu aplikace Microsoft Graph.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
304
Obr. 3: Okno Components pro výběr komponent projektu Visual Basic
Obr. 4: Vložení objektu aplikace Microsoft Graph Tímto postupem se ovšem připravíme o možnost provádět zpracování zpráv vyvolaných např. kliknutím kurzoru myši na plochu grafu. Tato metoda vkládání objektů grafů byla použita v programu Automatizace 1.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
305
Druhá možnost vložení objektu do formuláře, je vytvoření kontejneru OLE. Ovládací prvek kontejner OLE umožňuje přidávat do formulářů v aplikacích programu Visual Basic vložitelné objekty. S ovládacím prvkem kontejnerem OLE lze provádět tyto činnosti: Vytvořit v aplikaci zástupný symbol pro vložitelný objekt. Při běhu lze vytvořit objekt, který je zobrazen v ovládacím prvku kontejner OLE, nebo změnit objekt umístěný v kontejneru OLE při návrhu. •
Vytvořit v aplikaci propojený objekt.
•
Vázat ovládací prvek kontejner OLE k databázi pomocí ovládacího prvku Data.
Obecně existují dvě možnosti, jak do formuláře vložit OLE objekt. První možnost spočívá ve vytvoření objektu při návrhu pomocí dialogového okna Insert Object (které obsahuje příkazy Insert Object, Paste Special a podobné), nebo při běhu nastavením odpovídajících vlastností. Ovládací prvek kontejner OLE lze při návrhu vytvořit ve formuláři klepnutím na tlačítko s ikonou , které je již implicitně při spuštění editoru jazyka Visual Basic přítomno na levém panelu nástrojů. Po umístění kontejneru OLE na příslušné místo do formuláře, se otevře okno, ve kterém je nabídnuta možnost výběru z několika druhů vložitelných objektů. Tímto druhým způsobem je možné zpracovávat události, které nabízí ovládací prvek kontejner OLE. Při vytváření nového objektu musí být aplikace týkající se názvu třídy (například Excel.exe) správně registrována v prostředí operačního systému. Instalační program aplikace by měl komponenty správně zaregistrovat. Samotné předání dat do komponenty MS Graph pak lze provést hned několika způsoby. Data lze do objektu třídy Microsoft Graph vkládat např. postupným iterováním po příslušných buňkách v datovém listu (DataSheet) příslušné instance. Tento způsob je však zdlouhavý, protože každé přesunutí na další buňku si s sebou nese nemalou časovou ztrátu. Jako nejrychlejší způsob se, po řadě pokusů, jeví předání dat formou předem připraveného textového řetězce objektu v kontejneru OLE voláním metody DataText s následující syntaxí: object.DataText [ = string] OLE1.DataText = string
- v případě, že kontejner OLE má název OLE1
kde string je předem upravený textový řetězec. Chceme-li řetězec poslat do objektu, musíme nejdříve nastavit vlastnost OLE1.Format na formát, který je objektem podporován. Data můžeme objektu poslat i v jiném formátu, než je textový řetězec. Pro získání seznamu formátů podporovaných objektem lze volat Vlastnosti ObjectGetFormats a ObjectAcceptFormats. Pokud data z objektu získáváme, činíme tak čtením vlastnosti DataText, která z objektu vrací řetězec zakončený znakem Null. Délka řetězce DataText je omezena velikostí dostupné paměti. Následující kus zdrojového kódu znázorňuje nastavení vlastností kontejneru OLE vytvořeného vložením objektu do formuláře při návrhu: Dim Msg, NL, TB TB = Chr(9) NL = Chr(10)
' Deklarace proměnných ' Znak tabelátor ' Znak nový řádek
OLE1.Format = "CF_TEXT" ' Nastavení formátu souboru na text OLE1.SizeMode = 1 ' Automatická změna velikosti objektu OLE1.CreateEmbed "", "MSGRAPH" ‘ vytvoření vloženého objektu ' Vytvoření dat pro nahrazení výchozích dat aplikace Graph Msg = TB + "Drew" & TB & "Teresa" & TB & "Bob" Msg = Msg + NL & "Eric" & TB & "1" & TB & "2" & TB & "3" Msg = Msg + NL & "Ted" & TB & "11" & TB & "22" & TB & "33"
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
306
Msg = Msg + NL & "Arthur" & TB & "21" & TB & "32" & TB & "23" If OLE1.AppIsRunning Then ' test, zda je aplikace již spuštěna ' nastavení řetězce pro objekt OLE1.DataText = Msg ' Aktualizace objektu OLE1.Update Else MsgBox "Graf není aktivní." End If
Úprava řetězce se provádí vkládáním znaků tabulátor a konec řádku tak, abychom vytvořili patřičnou strukturu představující datové řady v pracovním sešitu. Pohyb mezi jednotlivými buňkami je realizován vložením znaku tabulátor a konec řádku v listu (DataSheet), kdy znak tabulátor má význam přechodu na další buňku směrem doprava a znak konec řádku znamená přechod na další řádek v sešitu. Stejně jako u objektů systému PULSE, také objekty programu Microsoft Graph tvoří hierarchickou strukturu. Jednotlivé objekty jsou opět rozděleny podle příslušnosti k jednotlivým logickým částem objektu grafu. Základní odkaz (Anchor) na instanci objektu grafu můžeme získat např. pomocí následujícího úryvku kódu: Public MyChart As Graph.Application Set MyChart = OLE1.object.Application
kde OLE1 je název kontejneru OLE a MyChart je objekt třídy Graph.Application. Tímto způsobem bude vytvořen odkaz na instanci objektu v ovládacím prvku kontejner OLE s názvem OLE1. Nyní lze použitím tečkové konvence zápisu skrze tento odkaz volat metody a číst nebo nastavovat vlastnosti či získávat odkazy na podřízené objekty. Další rychlou metodou přenosu dat do vloženého objektu je použití objektu schránky (Clipboard). Tento nástroj je integrovanou součástí operačních systémů Microsoft Windows a je určen pro přenášení různorodých dat mezi jednotlivými aplikacemi. Objekt třídy Clipboard se používá pro manipulaci s textem a grafikou ve schránce. Pomocí tohoto objektu je umožněno uživateli kopírovat, vyjímat a vkládat do aplikace různorodá data. Před kopírováním do objektu Clipboard je nutné vymazat jeho obsah metodou Clear, tj. Clipboard.Clear. Nesmíme zapomenout, že objekt Clipboard je sdílen všemi aplikacemi a jeho obsah se proto může změnit při každém přepnutí do jiné aplikace. Proto je vhodné před vymazáním obsahu tohoto objektu data zkopírovat do pomocné proměnné a po skončení práce se schránkou je vrátit zpět. Objekt Clipboard může najednou obsahovat více datových typů, ale pouze v případě, že každá část dat je jiného formátu. Můžete například použít metodu SetData() pro vložení bitové mapy do objektu Clipboard ve formátu vbCFDIB a potom metodu SetText() pro vložení textu do objektu Clipboard ve formátu vbCFText. Potom můžete použít metodu GetText() pro vyhledání textu nebo metodu GetData() pro vyhledání grafiky. Jakmile je do objektu Clipboard pomocí kódu nebo příkazu nabídky umístěna jiná sada dat stejného formátu, jsou původní data v objektu Clipboard ztracena. Jestliže je třeba přenést data do pracovního sešitu aplikace Microsoft Graph nebo Excel, je opět nutné si data připravit do textového řetězce stejným způsobem, jaký byl již popsán v předchozích odstavcích. Pomocí metody schránky Clipboard.SetText() pak lze tento text do schránky uložit. Pak lze tato data vložit do pracovního sešitu pomocí metody ObjSheet.Range(“0:0”).Paste, kde proměnná ObjSheet představuje objekt třídy DataSheet, který je součástí vloženého objektu MS Graph nebo EXCEL a lze k němu (např. přes objekt MS GRAPH v kontejneru OLE) přistoupit takto: Set ObjSheet = OLE1.object.Application.DataSheet
307
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
Metodou Range určíme rozsah buněk pro vložení, v daném případě se jedná o první buňku v prvním řádku a prvním sloupci, od které bude oblast buněk plněna.
7 Sestavení dvou aplikačních úloh Úkolem prvního programu je načtení dat (naměřených hodnot) z aplikace LabShop jejich hromadné zpracování. Druhý program pak slouží pro nastavování parametrů zdroje signálu. Název prvního programu Automatizace 1, druhého pak Automatizace 2.
8 Návrh vnitřní struktury programů Při vytváření programů je nutné pečlivě zvážit nejen výběr vhodného programovacího nástroje (jazyka), ale i vnitřní strukturu celého programu. U objektově orientovaných jazyků je vhodné využít výhod objektového programování, jako je např. zapouzdření, které má za následek zvýšenou bezpečnost. Častou příčinou chyb bývá také nevhodná volba rozsahu a doby platnosti proměnných. Jiný důvod návrhu struktury programu může být zvýšení přehlednosti a modulárnosti (univerzálnosti) kódu. Jestliže je program rozšiřován o nové funkce, přehlednost kódu může znatelně usnadnit orientaci při doplňování nových procedur. Struktura programu je rozdělena do jednotlivých logických částí podle svého významu a funkčnosti, které jsou zapouzdřeny do řady tříd. Schéma popisující vztahy mezi základními objekty těchto tříd je znázorněno na Obr. 5. Orámováním jsou rozlišeny objekty a proměnné na tyto objekty odkazující. Přiřazení proměnných a objektů znázorňuje spojnice se šipkou.
ParentObject MyApplication MyMain
MyMain PulseController
ParentObject PulseController Anchor
MDI Form
LabShop
PulseApplication
Legenda : Objekt Proměnná (reference na objekt) Odkaz Obr. 5: Základní vztahy mezi jednotlivými objekty Použití této struktury má hned několik výhod: • kód zajišťující aplikační logiku je oddělen od kódu zajišťujícího komunikaci s objekty aplikace LabShop
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
308
• lepší přehlednost kódu • modulárnost • vyšší bezpečnost Při spuštění programu vytvořeného na základě této struktury dochází k postupnému vytváření instancí několika objektů a vazeb mezi nimi v následujících krocích: 1. Nejdříve je vytvořena instance proměnné (Anchor), která odkazuje na instanci objektu třídy MyApplication. 2. V metodě MyApplication.Initialize je následně vytvořena instance objektu třídy MyMain. 3. Voláním metody MyMain.Initialize() je vytvořena instance objektu třídy PulseController, která zajišťuje komunikaci aplikací LabShop a objektu třídy MDIForm, což je rodičovské okno všech následujících oken starajících se o komunikaci s uživatelem. Členská proměnná ParentObject odkazuje zpět na rodičovský objekt. Jednotlivé třídy jsou deklarovány v oddělených souborech. Úkolem třídy MyApplication je vytvořenní instance třídy MainClass, která inicializuje základní okno (MDI). Jednotlivá objekty při vytváření jiných objektů nastavují vlastnost ParentObject a vytvářejí tak patřičnou hierarchii. Potomci těchto tříd se pak mohou na tyto své rodiče odvolávat. Třída PulseControllerClass je pro danou aplikaci klíčovou třídou. Jejím úkolem je komunikace s programem LabShop. Veškerá komunikace s tímto programem pak může probíhat pouze prostřednictvím metod a vlastností této třídy. V této třídě je také implementováno zpracování zpráv notifikačního systému programu LabShop. Dočasné uložení notifikací je účelem třídy PulseNotificationColClass. Tato třída také zapouzdřuje strukturu pro uložení jednotlivých zpráv. Interně jsou tyto notifikace ukládány do kolekce.
9 Program Automatizace 1 K vyhodnocení dat z jakéhokoliv měření je třeba tato data nejdříve přenést do programu, pomocí něhož se budou vyhodnocovat. V případě automatizačních programů jsem tento problém realizoval pomocí mechanismu popsaného v předchozí kapitole. Program Automatizace 1 je určen k vyhodnocení měření Vibrací na plochách z 28.6.2001. Jedná se o měření 48 frekvenčních spekter v rozsahu 0 až 1600Hz na odlišných druzích panelů. Toto měření bylo uloženo do souboru projektu VibracePS-Panely.pls (Obr. 6).
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
309
Obr. 6: Otevřený projekt v aplikaci LabShop, uspořádání naměřených dat
1
2
7
8
48
Obr. 7: Postup měření na plochách Data jsou, jak je zřejmé z Obr. 6, lineárně uložena do tzv. multibufferů. V podstatě se jedná o matici dat, jejíž řady tvoří jednotlivé vektory dat představující spektra vibrací v jednotlivých bodech měření. Toto uspořádání ovšem nerespektuje geometrii plochy, na které byly vibrace snímány. Toto měření totiž bylo realizováno na panelech v síti, kdy se snímač postupně posouval z levého horního rohu po řadách vpravo tak, jak je to znázorněno na Obr. 7. Odpovídající rozložení vibrací, jak bylo prezentováno automatizačním programem je zřejmé z Obr. 8.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
310
Obr. 8: Výstupní graf z automatizačního programu
10 Postup vyhodnocení Pomocí již zmíněného objektu BKDataSet a voláním jeho metody RealValues můžeme tedy získat 48 vektorů spekter. Tato data představují druhou mocninu efektivní hodnoty výkonu v jednotkách [m/s2]2. V automatizačním programu Automatizace 1 je možno zvolit jednotky pro vibrace ve výkonu nebo vibrace v rychlosti a vibrace ve zrychlení. Pro přepočet z výkonu na zrychlení je třeba všechna data odmocnit. Pro univerzálnost aplikace jsou odmocňovány absolutní hodnoty dat. Tímto postupem jsme získali hodnoty vibrací ve zrychlení. Pro doplnění přepočtem na rychlost musíme navíc hodnoty vibrací ve zrychlení vydělit úhlovou rychlostí ω=2πf. Následně jsou data ještě vynásobena váhovým koeficientem, který charakterizuje citlivost lidského ucha na velikost (amplitudu) dané frekvence. Z takto upravených dat lze vykreslit spektra vibrací ve zrychlení a v rychlosti. Aplikace byla vytvořena s využitím architektury MDI (Multiple Document Interface), což znamená, že jednotlivá okna (formuláře) tvoří potomky rodičovského okna (formuláře MDIForm). Mezi těmito potomky je možné se přepínat klepnutím na dané okno, či vybráním okna jako položky v menu a poklepáním vyvolat editor grafu a upravit např. sešit s daty. Jakákoliv změna v aktivních buňkách sešitu se ihned projeví i ve vykresleném grafu. Při spuštění automatizačního programu Automatizace 1 je nejdříve nutné otevřít projekt a to např. kliknutím na první tlačítko na panelu nástrojů s ikonou . Pak lze vybrat data pro práci zvolením multibufferu reprezentovaného formou odpovídající funkce v organizéru funkcí a to např. kliknutím na druhé tlačítko s ikonou v panelu nástrojů. Tím se otevře okno umožňující výběr funkce z organizéru funkcí (Obr. 9). Pro tento účel byla zvolena komponenta TreeView, která umožňuje také odpovídající zobrazení a uspořádání funkcí formou stromové struktury podobně, jako v programu LabShop.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
311
Obr. 9: Výběr funkce z organizéru funkcí
11 Program Automatizace 2 Automatizační programy jsou také vhodné pro nastavování parametrů jednotlivých nástrojů programu LabShop. Program Automatizace 2 byl sestaven, aby bylo možné v reálném čase nastavovat základní parametry generátoru signálu. Dále je možno otevřením dceřinného okna Měřené signály monitorovat vybranou funkci opět v reálném čase s volitelnou obnovovací frekvencí. Příklad výstupu z programu Automatizace 2 je uveden na Obr. 10.
Obr. 10:Uživatelské rozhraní programu Automatizace 2 Druhá úloha je navržena pro nastavování typu budící funkce, která je reprezentována signálem objektu generátoru v projektu aplikace LabShop PULSE. Výstup tohoto generátoru může sloužit jako zdroj signálu např. výkonového zesilovače TIRA, který budí vibátor.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
312
12 Přínos vytvořených programů pro zpracování měření Na katedře ATŘ byla data z měření zpracovávána ručně s využitím tabulkového kalkulátoru MS EXCEL. Naměřená data se ovšem musela nejdříve ručně pomocí systémové schránky zkopírovat do sešitu programu EXCEL, až pak se mohla začít zpracovávat. K tomu se používala různá makra jako předstupeň automatizace zpracování naměřených dat. Naměřená data jsou v programu LabShop uložena v tzv. Multibufferech (multispektrech), což jsou matice dat, jak je to znázorněno např. na Obr. 6. Z těchto dat nelze zjistit nic o geometrii měření. Například je-li měření postupně prováděno v síti 48 bodů na ploše tak že se začalo v levém horním rohu a po řadách se postupovalo směrem dolů, jako je tomu v projektu VibracePS-Panely.pls, jsou dala znázorněna jako 48 po sobě jdoucích vektorů dat. Programem Automatizace 1 jsou data uspořádána do prostorových grafů, ze kterých je přímo zřejmé fyzické rozložení amplitud vibrací. Automatizační program Automatizace 2 má použití v úlohách, ve kterých je nutné provádět časté změny parametrů generátoru signálu. Řeší ovládání generátoru signálů k buzení vibrátoru a ve zvoleném časovém intervalu zobrazuje data zvolené funkce. Jeho použití je např. v identifikaci dynamických vlastností mechanických soustav a životnosti součástek. Předností vytvořených automatizačních programů je především fakt, že obsluha nemusí být dokonale obeznámena s ovládáním programu LabShop. Je také sníženo riziko vzniku náhodných chyb při množství rutinních operací.
13 Literatura [1] POPEK, J. Automatizační programy pro signálový analyzátor LabShop PULSE. Ostrava : katedra ATŘ-352 VŠB-TU, 2002. 46 s. Diplomová práce, vedoucí: Tůma, J. [2] KAČMÁŘ D. Programujeme v COM a COM+, ISBN 80-7226-381-1 [3] BRŰEL & KJAER, OLE2 Help, PULSE Help. Soubor nápovědy systému PULSE. [4] MICROSOFT, Microsoft Developer Network library, 2CD, Redmond USA 1998 [5] BRŰEL & KJAER, PULSE Visual Basic Course 14-16 November 2000, PULSE CUSTOMIZED SOLUTIONS, sbírka prezentací a vzorových příkladů [6] BRŰEL & KJAER, PULSE Visual Basic Course April 2002, PULSE CUSTOMIZED SOLUTIONS, sbírka prezentací a vzorových příkladů [7] FARANA, R. & TŮMA, J. Databázová podpora provozních měření. In Sborník Workshop ‘2000’ Fakulty strojní, VŠB-TU Ostrava, 18. ledna 2000. 1. vyd. Ostrava : VŠB TU Ostrava, 2000. s. 1109-111. ISBN 80-7078-745-7. [8] TŮMA, J. & FARANA, R. OLE 2.0 as a tool for controlling PULSETM the Brűel & Kjær signal analyzer. In Proceedings of International Carpathian Control Conference, High Tatras, Podbanské, Slovak Republic. 1st ed. Košice : BERG Faculty, May 23 - 26, 2000. pp. 143-146. ISBN 80-7099-510-6.