ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická
BAKALÁŘSKÁ PRÁCE
2008
Márcis Šic
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Katedra měření
BAKALÁŘSKÁ PRÁCE Programové vybavení pro řízení měřících aparatur s rozhraním IEEE 488
Vedoucí práce :
Autor:
Ing. Jan Kučera
Márcis Šic Praha 2008
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady (literaturu, projekty, SW atd.) uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu § 60 Zákona č.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne ……………………….
……………………………………. podpis
Poděkování Touto cestou bych chtěl poděkovat všem, jež mi pomáhali při tvorbě této práce. Obzvláště bych rád poděkoval svému vedoucímu bakalářské práce Ing. Janu Kučerovi za trpělivost a cenné rady, které mi v průběhu tvorby poskytoval.
Anotace Bakalářská práce se zabývá tvorbou programu pro ovládání měřících aparatur v laboratoři metrologie elektrických veličin pomocí sběrnice GPIB. Tento program by měl nahradit stávající verzi s využitím sady příkazů VISA (The Virtual Instrument Software Architecture). Program je vyvíjen v prostředí VBA (Visual Basic for Applications), který je součásti kancelářského balíku MS Office. Celý program je navržen tak, aby bylo dosaženo co největší univerzálnosti a aby bylo možno využít co nejvíce funkcí použitých zařízení a sběrnice.
Annotation The Bachelor work is dealing with a design of program for controlling measuring equipments in laboratories of metrology electric characteristics, using GPIB bus. This program should replace the current version by using a new set of VISA (The Virtual Instrument Software Architecture) instructions. The program is developed in the development system VBA (Visual Basic for Applications), which is included in office software package MS Office. The whole program is designed to gain maximum generality and to use as many functions of used devices and bus as possible.
1
Obsah 1
Úvod ..................................................................................................................... 4 1.1 Požadavky na zpracování ............................................................................... 5 2 Sběrnice IEEE 488 .............................................................................................. 6 2.1 Topologie sběrnice ......................................................................................... 6 2.2 Fyzická vrstva sběrnice .................................................................................. 7 2.2.1 Základní parametry ................................................................................. 7 2.2.2 Fyzické zapojení a signály ...................................................................... 8 2.3 Principy komunikace .................................................................................... 10 2.3.1 Možnosti komunikace po sběrnici ........................................................ 11 2.4 Standardy sběrnice IEEE 488 ....................................................................... 12 2.5 Vrstva ovladačů a software .......................................................................... 14 2.5.1 Knihovna VISA ..................................................................................... 14 2.5.1.1 Základní operace ............................................................................. 15 2.6 Struktura příkazů GPIB ................................................................................ 16 3 Vývojové prostředí VBA .................................................................................. 18 3.1 Úvod do VBA ............................................................................................... 18 3.2 Orientace ve VBE ......................................................................................... 18 3.3 Použití VBA ................................................................................................. 20 3.3.1 Příkaz OnTime ...................................................................................... 21 3.3.2 Absolutní adresování ............................................................................. 22 4 Software pro ovládání měřících aparatur po sběrnici IEEE 488 ................. 23 4.1 Uživatelské rozhraní aplikace ....................................................................... 23 4.1.1 Seznam zařízení .................................................................................... 25 4.1.2 Protokol o průběhu ................................................................................ 27 4.1.3 Ovládací prvky programu ..................................................................... 27 4.1.4 Typy měření a jejich nastavení ............................................................. 28 4.1.5 Oblast výsledků ..................................................................................... 31 4.2 Konstanty a proměnné .................................................................................. 32 4.3 Funkce programu .......................................................................................... 35 4.3.1 GUI INIT ............................................................................................... 35 4.3.2 Najít zařízení ......................................................................................... 36 4.3.3 Test připojení ........................................................................................ 37 4.3.4 Spustit měření........................................................................................ 38 4.3.5 Ostatní funkce ....................................................................................... 39 4.3.6 Uživatelské příkazy ............................................................................... 40 4.3.6.1 Vkládání hodnot z buňky do příkazu .............................................. 40 4.3.6.2 Čekání před odměrem ..................................................................... 41 4.3.7 Ohlašování chyb komunikace ............................................................... 41 5 Závěr .................................................................................................................. 42 Literatura .................................................................................................................. 43 Obsah CD .................................................................................................................. 44
2
Seznam obrázků Obr. 2.1 a) Lineární konfigurace, b) Hvězdicová konfigurace .................................... 6 Obr. 2.2 Struktura IEEE 488 ........................................................................................ 8 Obr. 2.3 Stavový model ............................................................................................. 11 Obr. 2.4 STB – Status byte (stavový bajt) ................................................................. 12 Obr. 2.5 Stromová struktuta příkazů .......................................................................... 16 Obr. 3.1 Integrované vývojové prostředí (IDE) ve VBA ........................................... 19 Obr. 3.2 a) Položka References v menu VBE, b) Okno References .......................... 21 Obr. 4.1 Uživatelské rozhraní aplikace ...................................................................... 24 Obr. 4.2 Sloupce seznamu přístrojů ........................................................................... 25 Obr. 4.3 Ukázka protokolu o běhu programu ............................................................ 27 Obr. 4.4 Výběr typu měření ....................................................................................... 29 Obr. 4.5 Iterační vyvažování ...................................................................................... 30 Obr. 4.6 Parametry pro Závislost v čase .................................................................... 30 Obr. 4.7 Výpis odměřených hodnot ........................................................................... 31 Obr. 4.8 Řádek pole MeasureSet................................................................................ 34 Obr. 4.9 Vývojový diagram pro tlačítko GUI INIT ................................................... 35 Obr. 4.10 Příklad výsledku funkce Najít zařízení ...................................................... 36 Obr. 4.11 Vývojový diagram pro tlačítko Najít zařízení ........................................... 37 Obr. 4.12 Vývojový diagram pro tlačítko Test připojeni ........................................... 37 Obr. 4.13 Vývojový diagram pro tlačítko Spustit měření ......................................... 38
3
1 Úvod Úkolem této bakalářské práce je vytvořit program, který bude schopen ovládat měřící aparatury přes sběrnici IEEE 488 za použití knihovny příkazů VISA. Program je určen pro všestranné užití podle čehož je vytvořena celá jeho struktura. Aplikace bude využívána na Katedře měření v laboratořích metrologie elektrických veličin. Sběrnice IEEE 488 je velice často používána pro měření v laboratorních podmínkách. Prakticky jedinou podmínkou pro využívání tohoto rozhraní je mít centrální řídící jednotku, tedy v drtivé většině PC vybavené přídavnou kartou s tímto rozhraním a zařízení podporující toto rozhraní, kterých je velké množství. Program je vytvořen jako sešit v aplikaci MS Excel za použití vývojového prostředí VBA (Visual Basic for Applications) do něhož byl vložen modul pro příkazy VISA. Od programu se očekává, že bude schopen dlouhodobého měření bez potřeby interakce uživatele a zároveň možnost souběžného využívání aplikace MS Excel pro další účely. Díky použité sadě příkazů by měl být rychlejší, stabilnější a měl by zachovávat kompatibilitu i se staršími přístroji. Dále je program možno lépe upravovat z hlediska uživatelského rozhraní, což v praxi znamená, že nebude nutno zasahovat do zdrojového kódu v případě, že budeme chtít posunout vstupní buňky na jinou pozici než výchozí pozici. Práce je tematicky členěna do hlavních částí. První část je věnována seznámení se s vývojovým prostředím, sběrnicí a instrukční sadou. Druhá část je věnována samotné implementaci programu a třetí část se zabývá testováním programu.
4
1.1 Požadavky na zpracování Funkce Nastavování přístrojů po sběrnici – Přístroje bude možno nastavit pomocí příkazů zadaných uživatelem. Měření po sběrnici – Program bude schopen měření požadovaných hodnot. Typ požadované hodnoty bude specifikován uživatelem. Výpis odměřených hodnot – Program bude zajišťovat výpis hodnot přehledným způsobem vzhledem k způsobu měření.
Možnosti měření Jeden odměr do řádku – Při tomto měření se bude provádět právě jeden odměr a výpis bude prováděn do jednoho řádku. Hodnoty v tomto řádku budou odpovídat údajům získaným při posledním měření Více odměrů pod sebe – Toto měření bude prováděno stejným způsobem jako měření typu „Jeden odměr do řádku“, ale výsledky budou vypisovány vždy do nového řádku, který bude bezprostředně následovat za posledním, jenž je naplněn hodnotami. Závislost na čase – S tímto měřením je možno měřit, aniž by byla nutná asistence uživatele. Pouze na začátku měření je nutno zadat dobu měření a vzorkovací periodu. Po zahájení měření již bude měření prováděno automaticky.
Uživatelské příkazy – Do programu by měly být implementovány uživatelské příkazy, umožňující větší interakci mezi uživatelem a aplikací.
5
2 Sběrnice IEEE 488 V první části této kapitoly je popsána sběrnice IEEE 488, známa také jako GPIB (General Purpose Interface Bus) nebo HP-IB(Hewlett-Packard Instrument Bus), dále jen GPIB, z hlediska jejího fyzického zapojení. Dále také vyšší vrstvy, jako jsou například ovladače, jednotlivé protokoly a jejich rozdíly. Poslední část této kapitoly bude věnována programovacímu rozhranní VISA.
2.1 Topologie sběrnice Měřící systémy založené na standardu sběrnice GPIB jsou složeny z na sobě nezávislých funkčních jednotek (dále jen FJ) a sběrnicí jsou pouze spojeny. Tento systém se nejvíce rozšířil pro využití v laboratorním prostředí. Konfigurace měřícího systému z hlediska topologie se dělí na dvě hlavní varianty a to na lineární a hvězdicovou konfiguraci (obr. 2.1). Třetí možností je kombinace dvou předchozích dohromady. Tyto možnosti zapojení celého systému nám umožňují vytvoření prakticky libovolného měřícího obvodu splňujícího naše požadavky.
Obr. 2.1 a) Lineární konfigurace, b) Hvězdicová konfigurace
6
2.2 Fyzická vrstva sběrnice Tato kapitola popisuje jednotlivé části fyzické vrstvy a jejich vlastnosti.
2.2.1
Základní parametry
Při používání sběrnice GPIB je nutno dodržet jisté podmínky a omezení, které jsou dány vlastnostmi sběrnice. Hlavními limitujícími parametry jsou hodnoty uvedené v tab. 2.1. Tab. 2.1 Srovnání parametru sběrnice podle použití HS488
Parametr Počet FJ Max. délka sběrnice
IEEE 488
IEEE 488 s HS488
15
15
20 m
15 m
Max. vzdálenost mezi FJ
4 m (průměrně na sběrnici 2 m)
1m
Max. přenosová rychlost
1 MB (typicky – 250 až 500 kB/s)
8 MB/s
Existují tři typy zařízení, která se dají ke sběrnici připojit. Prvním typem jsou tzv. Posluchači, jenž jsou schopni pouze přijímat data, pokud jsou k tomu instruováni. Druhým typem je Mluvčí, jenž je schopen data posílat a posledním typem zařízením Kontrolér. Kontrolér je schopen řídit operace probíhající na sběrnici. V převážné většině se však vyrábí zařízení, která jsou kombinaci dvou a více typů. Minimálním požadavkem pro to, aby bylo možno po sběrnici správně komunikovat je, aby obsahovala alespoň jeden Kontrolér a alespoň jedno zařízení typu Posluchač nebo Mluvčí. Pokud je připojeno více Kontrolérů, tak je vždy aktivní pouze jeden a ten je schopen řízení předat dalšímu. Některé limitující hodnoty lze zvýšit použitím zařízení pro rozšíření sběrnice.
Samotná sběrnice je založena na negativně pravdivostní logice, což definuje vztah mezi logickou a elektrickou hodnotou (tab. 2.2). Elektrické hodnoty odpovídají úrovním TTL a díky použité logice je sběrnice částečně chráněna vůči šumu.
7
Tab. 2.2 Elektrické a logické úrovně
2.2.2
Logická hodnota
Elektrická hodnota
O (FALSE)
2.0 V (High)
1 (TRUE)
0.8 V (Low)
Fyzické zapojení a signály
Samotná sběrnice je tvořena 24 vodiči (obr. 2.1) v stíněném pouzdře, z nichž je 8 datových (DIO1– DIO8) 5 pro vysílání jednovodičových zpráv (ATN, IFC, REN, SRQ, EOI) 3 pro řízení přenosu dat (DAV,NRFD,NDAC), tzv. Handshake lines 8 zemních vodičů Konektor
pro
připojení je navržen tak, aby bylo možno zapojit více FJ do jednoho uzlu. Toho je dosaženo tím, že je
každý
konektor
průchozí. Z jedné strany se zapojuje do FJ nebo do jiného konektoru a na druhé straně se konektor
Obr. 2.2 Struktura IEEE 488
používá
pro
připojení
jiného
propojovacího
kabelu. Datové linky DIO (Data Input/Output bits) – Datové vodiče jsou určeny pro data, nebo interfacové zprávy (stykové zprávy). Podle stavu na lince ATN se určí, zda jde o data nebo tyto zprávy. Všechny zprávy a i většina dat používá 7 bitový ASCII či ISO kód.
Linky pro řízení přenosu dat Tyto vodiče jsou určeny pro zajištění bezchybného přenosu a zaručují přizpůsobení nejpomalejšímu připojenému zařízení. Tyto linky fungují asynchronně. Použití těchto signálů je například při korespondenci nazývané Handshake.
8
NRFD (Not Ready For Data) – Indikuje, zda je zařízení připraveno přijmout byte zprávy. Linka je buzena všemi zařízeními pří přijímání zprávy, Posluchači při přijímání datových zpráv a Mluvčími při použití HS488 (kap. 2.2.1). NDAC (Not Data ACcepted) – Tato linka nám signalizuje, jestli zařízení přijalo nebo naopak nepřijalo data. Linku budí všechna zařízení, která přijímají příkazy a také všemi Posluchači, jenž přijímají data. DAV (Data Valid) – Pomocí této řídící linky se určuje, zda jsou data stabilní a mohou tedy být zařízením přijata. Linka je buzena Kontrolérem, pokud posílá povely, nebo Mluvčím ve chvíli kdy posílá datové zprávy.
Linky pro řízení sběrnice Vodiče tohoto typu jsou určeny pro řízení sběrnice jako takové. Každá jednotlivá linka svým stavem určuje nějaký stav sběrnice a ten je dále využit při návrhu obslužného software. ATN (ATteNtion) – Je určeno pro oznamování, že na datových vodičích (DIO) se nachází instrukce a ne data. Pokud je tedy ATN nastaveno na TRUE, na vodičích se vyskytují interfacové zprávy (kap. 2.3) a pokud je FALSE, tak jsou na linkách přístrojové zprávy (kap. 2.3). Linka ATN je používána i se signálem EOI při provádění paralelních hlášení (Parallel poll, kap.2.3.1). IFC (InterFace Clear) – Systémový Kontrolér používá tuto linku pro resetování sběrnice a nastavení sama sebe na tzv. „Kontrolér ve službě“ (Controller-in-Charge). Tato linka se využívá při inicializaci sběrnice. REN (Remote ENable) – Linka je buzena Kontrolérem a umožňuje zařízením přejít do místního či vzdáleného režimu. Pokud je na této lince TRUE, zařízení přejde do vzdáleného módu ve chvíli, kdy je adresováno Kontrolérem. Jestliže je linka nastavena na FALSE všechna zařízení se vrátí do místního módu. Do tohoto módu lze přejít i stiskem určitého tlačítka na přístroji. SRQ (Service ReQuest) – Zařízení budí tuto linku ve chvíli, kdy požadují, aby je systémový Kontrolér obsloužil. Kontrolér se poté dotazuje každého zařízení připojeného ke sběrnici, dokud nenajde to, které požadovalo obsluhu. Následně provede veškeré nutné operace. EOI (End-Or-Identify) – Tento signál je používán pro označení konce přenosu dat. Linka je buzena posledním bajtem dat v průběhu přenosu. A jak již bylo řečeno u signálové linky ATN, je používán při paralelním hlášení.
9
2.3 Principy komunikace Abychom byli schopni správně komunikovat, musí byt zajištěno, aby bylo možno každé zařízení jednoznačně identifikovat. K tomu se využívá adresování, jež zaručuje, že každému zařízení je přidělena unikátní adresa v rozsahu 1–30. Tato adresa se nastavuje pomocí ovládacích prvků na každém přístroji. U některých přístrojů lze nastavit i sekundární adresu. To jestli zařízení tuto možnost umožňuje, najdeme v manuálu k danému přístroji. Adresu je samozřejmě možné změnit i přes sběrnici. Jak již bylo řečeno v kap. 2.2.1, v každém provozu schopném systému se musí nacházet alespoň jeden systémový Kontrolér, který řídí komunikaci na sběrnici. Samotná komunikace probíhá mezi jednou vysílací jednotkou a jednou nebo několika přijímacími jednotkami. Směr přenosu jako takový není rozlišen. Směr je určován tak, že každá jednotka má přiřazeny dvě adresy. Jedna je přijímací (MLA) a druhá vysílací (MTA). Adresy jsou odlišeny pomocí dvou bitů a to konkrétně pomocí 6. a 7.. Prvních pět bitů je stejných.
Na sběrnici se komunikuje pomocí dvou druhů zpráv, jimiž jsou Interfacové zprávy a Přístrojové zprávy, které jsou rozlišovány pomocí signálové linky ATN.
Interfacové Zprávy Interfacové zprávy mohou obsahovat jednak adresy funkčních jednotek, ale i univerzální příkazy, sekundární příkazy a adresované příkazy. Univerzální příkazy jsou určeny pro vykonání určité činnosti ve všech přístrojích připojených na sběrnici GPIB najednou, bez toho aniž by musela být tato zařízení adresována. Adresované příkazy jsou určeny pro jednotlivá zařízení a tudíž je nutno zařízení adresovat. Z tohoto důvodu je nastavování přístrojů tímto způsobem pomalejší. Univerzálních příkazů je však méně a nedají se tudíž použít na detailnější ovládání přístrojů.
Přístrojové zprávy Zprávy tohoto typu se dělí na programovací příkazy, naměřená hodnoty a vnitřní stavy přístroje. Více o těchto zprávách není nutno hovořit, neboť jejich názvy mluví za vše.
10
2.3.1
Možnosti komunikace po sběrnici
Možnosti komunikace po sběrnici jsou dvě. Nazýváme je Sériové hlášení (Serial poll) a Paralelní hlášení (Parallel poll). Aby bylo možno komunikaci provádět, existují v přístrojích různé registry, které určují jejich aktuální stav. Tyto registry lze nastavovat nebo mohou být čteny. Každý z přístrojů je z tohoto hlediska popsán Stavovým modelem.
Stavový model Stavový model nám umožňuje zjišťovat stav přístroje pomocí registrů, které jsou zabudovány v každém
přístroji
a
jejich
struktura a význam je předem dán standardem 2.4).
IEEE-488.1(kap.
Avšak
každý
registr
obsahuje povinné části a části, které jsou dány výrobcem a jejich význam je tedy nutno hledat v manuálu k danému přístroji. Na obr. 2.3 vidíme základní strukturu registrů. U každého stavového registru je ještě pomocný registr, kterým
je
jednotlivé
možno bity.
maskovat
Pokud
tedy
nechceme, aby kontrolér reagoval Obr. 2.3 Stavový model
na
některé
události,
tak
to
učiníme nastavením právě tohoto registru a logickým násobením s původním stavovým. Tyto pomocné registry mají v názvu obsaženo slovo Enable.
Sériové hlášení Tento typ komunikace nám umožňuje získávání specifických informací z přístrojů, která požadují obsluhu a vyhledávání těchto přístrojů. Mechanismus sériového hlášení
11
je založen na stavu STB (obr. 2.4) a na žádosti přístroje o obsluhu (SRQ). Pokud tedy přístroj vyšle signál SRQ a řídící kontrolér tento Obr. 2.4 STB – Status byte (stavový bajt)
signál detekuje. Je tento přístroj adresován a je přečten jeho STB,
kde je ověřován bit RQS. Podle vyhodnocení je provedena adekvátní akce. Pokud chceme určovat důvod signalizování SRQ detailněji můžeme použít Event Register Byte. Díky způsobu komunikace je tento způsob hlášení pomalejší.
Paralelní hlášení Schopností tohoto typu komunikace je možnost zjišťování stavu několika přístrojů současně. Stavová informace se nachází v jediném bitu a tudíž je možné získávat paralelní hlášení i z osmi přístrojů najednou v rámci jednoho volání. Každý přístroj má přidělen Individuální stavový bit (IST – Individual Status Bit). Hodnotou tohoto bitu se určuje směr, kterým jsou data přenášena. Každé zařízení musí být před použitím paralelního hlášení nastaveno. Při nastavení je přístroji přidělena jedna linka z DIO1– DIO8 na níž bude moci odpovídat. Pro ukončení paralelního hlášení je nutno tuto schopnost opět vypnout. Výhodou tohoto typu komunikace je rychlost, avšak je omezen pouze na některé operace.
2.4 Standardy sběrnice IEEE 488 Proto, aby bylo možno sběrnici GPIB používat různými výrobci a tedy aby byla zaručena jednoznačnost jednotlivých parametrů. Bylo nutno zavézt určité standardy. Vzhledem k vývoji techniky se postupně vytvořilo několik těchto standardů, které specifikují jednotlivé vrstvy sběrnice. Každá z těchto verzí doplňuje či upravuje tu předchozí.
IEEE-488 Tato varianta standardu byla zcela první, která byla publikována. Specifikovala především parametry, které jsou uvedeny v tab. 2.1 a definovala jednotlivé vodiče sběrnice (kap. 2.2.2). To by obecně nestačilo pro možnost širšího použití, a proto byly
12
přidány další vrstvy standardu. Tyto vrstvy umožňovaly větší univerzálnost. Tento standard se používal především u prvotní verze sběrnice, označované HP-IB.
IEEE-488.1 V celém znění se tento standard označuje jako ANSI/IEEE 488.1 [IEC 60625-1] IEEE Standard Digital Interface for Programmable Instrumentation. V této verzi je definována fyzická a elektrická vrstva. Dále pak signálové a komunikační protokoly, respektive jejich nižší úrovně. Konkrétně je specifikován způsob adresování, předávání řízení a Handshaking. Jsou zde také specifikovány čtyři základní typy zařízení, jako je Mluvčí, Posluchač, Kontrolér a Systémový kontrolér společně s jejich možnostmi. Oblasti, jež tato verze standardu nezahrnuje, se týkají především kompatibility zařízení a poškození dat. Z hlediska kompatibility přístrojů, zde nebyly definovány především minimální požadavky na jednotlivé typy zařízení, díky čemuž může zařízení obsahovat veškeré funkce nebo jen vybrané. Tím je dána možnost vzniku systému se zařízeními, která mají různé schopnostní úrovně. Z tohoto důvod není také zaručena schopnost komunikace a při jejím vykonávání může dojít k selhání. Pokud se podíváme na oblast dat, tak zde byl hlavním problémem formát dat. To jak byla data formátována, záleželo především na výrobci daného zařízení. Také zde nebyl zcela definován signál EOI (kap. 2.2.2), který mohl být téměř libovolný. Další velkou mezerou byla nepřítomnost specifikace sledu příkazů a odpovědí na ně. V tomto standardu je definován i stavový bajt obecně s přesnou definicí pouze jednoho bitu. Ostatní bity mohou mít různé významy, což záleželo opět na výrobci. S tím také souviselo to, že nebyly specifikovány vztahy mezi jednotlivými stavovými registry uvnitř přístroje Zde popsané mezery v definici standardu se řešili individuálně pro každý měřící systém a ošetřovaly se v programovém kódu. Později byl vytvořen standard IEEE488.2, který tyto mezery ve specifikacích odstranil.
IEEE-488.2 Tento standard byl navržen, aby usnadnil základní proces komunikace s přístroji. Specifikuje standardy kódů, formáty dat, protokoly a snaží se zahrnout oblasti, které byly v IEEE-488.1 opomenuty. Součástí je i specifikace SCPI (kap. 2.6)
13
HS488 V rámci rostoucích nároků na přenosovou rychlost byla sběrnice opatřena protokolem pro vysokorychlostní přenos nazývaným HS488 (High–Speed Data Transfers), který umožňuje ve spojení s příkazy, pro tento protokol určenými, dosáhnou mnoho násobně vyšší rychlosti (tab. 2.1).
2.5 Vrstva ovladačů a software Ovladače jsou nejzákladnější softwarovou vrstvou spojující hardware a uživatelské aplikace. Tvoří rozhraní, díky němuž není nutno, aby programátor nebo uživatel musel znát detailně hardware, ale stačí, aby používal příkazy k tomuto účelu určené. Implementace ovladače je závislá na typu operačního systému což je v našem případě MS Windows©. Pro používání zařízení na sběrnici GPIB je nutné mít tyto ovladače přítomné v našem systému. Tyto ovladače jsou do systému zaváděny dynamicky, což znamená, že při detekci zařízení je ovladač zaveden do paměti a při odpojeni z pamětí odstraněn. O samotných ovladačích není nutno příliš hovořit. Podstatnější částí vzhledem k tématu práce je VISA knihovna, která bude popsána v následující kapitole (kap. 2.5.1).
2.5.1
Knihovna VISA
Pro programování je vhodnější mít k dispozici funkce zařízení a ne jen vlastnosti rozhraní sběrnice. V rámci toho je potřeba udržet kompatibilitu mezi jednotlivými zařízeními a rozhraními sběrnic. Tohoto je dosaženo právě pomocí VISA. Výsledkem je struktura jednodušší na pochopení, která zároveň redukuje počet funkcí, jež se musí uživatel naučit nebo pochopit. Tím se i krátí čas potřebný pro vývoj aplikací pro různá rozhraní. Jinak řečeno, VISA zajišťuje transparentní komunikaci mezi zařízeními a programem. Těchto výhod je dosaženo vytvořením velice malé instrukční sady, jež obsahuje takové příkazy, jež plně postačují na obsluhu a využití všech funkcí přístrojů. Při používání VISA knihovny využíváme tři základní části, jimiž jsou atributy, události a operace. Atributy jsou parametry, kterými lze nastavit vlastnosti, chování zařízení nebo relací. Atributy lze podle potřeby použít jako lokální či globální. Události známe spíše
14
pod pojmem asynchronní komunikace, což v praxi znamená, že nejsou závislé na procesu (programu) a musíme určit, jak budou ošetřeny stavy, které mohou nastat. Operace jsou samotnými funkcemi, které používáme pro komunikaci s přístroji popřípadě řadičem sběrnice. Vysvětlovat zde jednotlivé operace by bylo mimo téma této práce, ale pro lepší pochopení samotné práce je nutno popsat alespoň základní funkce (kap. 2.5.1.1) použité v programu, jež je úkolem této práce. Detailnější informace lze najít v [1], [2].
2.5.1.1 Základní operace Základními operacemi, jež jsou při vývoji aplikací pomocí VISA používány, jsou viOpen () viClose () viWrite () viRead () viSetAttribute () Každá funkce v rámci knihovny vrací číselnou hodnotu, která značí, jestli byla operace úspěšná či ne.
viOpen / viClose Jak je z názvů těchto dvou funkcí patrné, slouží k otevření resp. k ukončení spojení mezi uživatelskou aplikací a používaným zařízením. Ještě před samotným vytvořením spojení, tedy voláním viOpen() je nutno vytvořit spojení se správcem zdrojů pomocí funkce viOpenDefaultRM(). Toto spojení je možno ukončit funkcí viClose(). Např. status = viOpenDefaultRM(defaultRM) status = viOpen(defaultRM, "GPIB0::1::INSTR", VI_NULL, VI_NULL, session) status = viClose (session)
viWrite / viRead Funkce jsou určeny pro zápis instrukcí do zařízení a pro čtení dat ze zařízení. Např. status = viWrite(session, buffer, Length(buffer), retCount) status = viRead(session, buffer, MAX_CNT, retCount)
15
viSetAttribute Funkce slouží k nastavování atributů zařízení. Nejčastějším použitím je nastavení timeoutu, jež nám značí, jak dlouho jsou data čí instrukce platné. Opačnou funkcí k této je viGetAttribute(), která nám vrátí stav požadovaného atributu pro vybrané zařízení. Např. status = viSetAttribute(session, VI_ATTR_TMO_VALUE, 5000)
Význam jednotlivých parametru ve funkcích je možno najít např. v [2].
2.6 Struktura příkazů GPIB Standardem pro komunikaci po sběrnici je SCPI (Standard Commands for Programmable Instruments, [6]). SCPI je souhrnem pravidel, kterak má probíhat komunikace přístroje s řídící jednotkou a jak mají být formátovány příkazy pro zařízení. Tato pravidla musí být navržena tak, aby nezáleželo na přenosovém protokolu a ani technickém řešení. Příkazy se pro jednotlivé přístroje mohou lišit, ale musí být dodržena určitá struktura. Hierarchii znázornit
příkazu
pomocí
lze
stromové
struktury, jako třeba na obr. 2.5. Do jakých skupin jsou příkazy pro daný přístroj řazeny, se můžeme
dočíst
v příslušném
manuálu. Obr. 2.5 Stromová struktuta příkazů
Samotným příkazem přístroji říkáme jak se má v tomto stromě pohybovat. Standard SCPI proto také definuje dvě oddělovací značky, určující směr pohybu. Značka „ : “ nám říká, že máme pokračovat směrem k listům stromu, kdežto „ ; “, že máme zůstat v aktuální větvi. Použití těchto značek vidíme na příkladech :MEAS:CURR:DC? 2, 0.01 SAMP:COUN20;:TRIG:SOUR EXT
kde první příkaz provede odměr (MEASure) stejnosměrného (DC) proudu (CURRent) na rozsahu 2 A s přesností 0,01 A. Druhy by při externím trigrování
16
(TRIGger: SOURce EXTernal) provedl čtení dvaceti vzorků (SAMPle: COUNt20). Každý z těchto příkazů má také jiný účel, z hlediska zasílaní dat. První obsahuje znak „?“ říkající přístroji, že má získané hodnoty poslat. To znamená, že bude po řídícím prvku systému požadovat obsluhu, nahozením bitu SRQ (Service ReQuest). Druhý příklad tento symbol neobsahuje a je tedy pouze nastavovací. Odměr musí být proveden například posláním příkazu „READ?“.
17
3 Vývojové prostředí VBA V této kapitole je popsáno samotné vývojové prostředí a práce v něm. Jsou zde ukázány jednoduché úkony, jež nám prostředí poskytuje. Úkolem této kapitoly není naučit čtenáře prácí s celým VBA, ale pouze ukázat některé často používané postupy a možnosti, jež by měli zpřehlednit samotný zdrojový kód a ukázat jak bylo při tvorbě programu postupováno.
3.1 Úvod do VBA VBA neboli Visual Basic for Applications, je prostředkem pro tvorbu programového kódu v rámci jiné aplikace. VBA je součástí kancelářského balíku MS Office. VBA jako takové je odvozeno od programovacího jazyka Visual Basic, avšak jeho instrukční sada byla upravena tak, aby bylo možno co nejlépe využívat jeho funkcí v aplikaci, v které bude vytvořený program spouštěn. V případě této práce se jedná o program Excel.
3.2 Orientace ve VBE VBE je zkratkou pro Visual Basic Editor a je takto označováno takzvané IDE (Integrated Development Environment), což je prostředí, ve kterém je program psán a slouží zároveň i pro překlad a ladění programu. To jak vypadá okno VBE je vidět na obr. 3.1. Nejdůležitějšími částmi prostředí jsou okna, vyznačená v obrázku čísli. Do samotného IDE se dostaneme pomocí tlačítka
v nástrojové liště Excelu.
Okno Projektu Na obr. 3.1 je toto okno označeno „1“. Okno slouží k orientaci mezi jednotlivými projekty a mezi jejich částmi. Částmi zde rozumíme Formuláře (Forms), Moduly (Modules) a Moduly tříd (Class Modules). V rámci formulářů lze vytvořit klasická okna s tlačítky a jinými komponentami, jak jsme zvyklí z jiných aplikací. V našem programu je pomocí formuláře vytvořeno okno nápovědy. Moduly slouží jako místo, kde můžeme psát kód aplikace. Pokud máme v naší aplikaci více tlačítek, můžeme pro každé tlačítko
18
vytvořit samostatný modul a jeho kód psát do něho, čímž dosáhneme přenositelnosti kódu, neboť moduly lze snadno exportovat do jiných pracovních sešitů Excel.
Obr. 3.1 Integrované vývojové prostředí (IDE) ve VBA
Zároveň je možno tento kód následně použít ve více listech jednoho sešitu, aniž bychom ztratili přehlednost a nehrozí nám nechtěné smazání kódu v případě odstranění příslušného listu. Poslední jmenované, tedy moduly tříd, slouží k vytváření vzorů objektů, jež mohou mít nějaké vlastnosti a metody. Objektem muže byt cokoliv, třídou to, co můžeme popsat pomocí námi definovaných pojmů. Hlavím rozdílem je skutečnost, že třída nic nedělá a nezabírá paměť. Abychom s třídou mohli pracovat, musíme ji inicializovat jako objekt.
Okno vlastností Slouží pro zobrazení vlastností modulu nebo jiných komponent. Tyto vlastnosti lze měnit a v rámci aplikace bylo toto okno používáno především pro změnu jména modulu, neboť automaticky přidělované jméno nám jednoznačně neříkalo, ke kterému tlačítku patří a tím byla do jisté míry zhoršena přehlednost kódu. Na obrázku obr. 3.1 je toto okno označeno „3“.
19
Okno zdrojového kódu Toto okno má pouze jediný účel a to zápis zdrojového kódu a orientaci v něm. V horní části tohoto okna vidíme dva rozbalovací seznamy. Seznam vpravo nám slouží k zobrazení a přechodu mezi funkcemi v daném modulu. Funkce napsaná ve VBA je většinou označována jako tzv. makro, ale v rámci této práce je budeme označovat jako funkce nebo procedury. V obrázku obr. 3.1 vidíme okno pro zápis kódu pod číslem „2“.
Panel nástrojů V horní části obrazovky na obr. 3.1 jsou umístěny panely nástrojů. Zde stojí za zmínku hlavně tlačítka pro spuštění, pozastavení a zastavení běžícího programu respektive makra. Využití těchto tlačítek je především při ladění.
3.3 Použití VBA Jazyk jako takový je standardním programovacím jazykem a z toho důvodu se nijak podstatně neodlišuje od jiných. Bohužel jsou zde použity některé konvence, které se v jiných jazycích již nepoužívají. Jako příklad lze uvést přiřazování hodnot do proměnných a porovnávání obsahu dvou proměnných. Prakticky ve všech dnes používaných jazycích se používá pro porovnávání znak „==“ a avšak zde mezi těmito operacemi není rozdíl a používají pouze jedno rovnítko. To jaká operce se má provést se rozlišuje pomocí rozhodovacích příkazů jako je if () nebo while (). Pokud pomineme některé malé nedostatky (např. tečková notace je neúplná), je používání poměrně intuitivní a s trochou cviku je i pohodlné. Vhledem k návrhu naší aplikace je třeba umět plánovat spouštění částí kódu a napevno definovat (adresovat) některé buňky. K tomu nám slouží funkce, které jsou popsané v kapitolách kap. 3.3.1 (plánování spouštění) a kap. 3.3.2 (adresování buněk). Abychom mohli v rámci VBA používat operace z knihovny VISA, je nutné mít nainstalované ovladače a musíme vložit referenci na knihovnu s těmito metodami. Vložení reference na knihovnu se provede přes menu VBE,do něhož se dostaneme tak, jak je ukázáno na obr. 3.2a) a v okně, které se nám následně otevře obr. 3.2b) stiskneme tlačítko „Browse…“, načež se nám otevře klasická nabídka pro otevření souboru, jak ji
20
známe z jiných aplikací. Pomocí tohoto okna najdeme soubor visa32.dll. Poté je již možno plně využívat funkcí této knihovny. Provedení celé této operace může být požadováno po prvním otevření souboru na počítači, na kterém nebyl předtím používán, či byl použit na jiném PC. Jednoduše řečeno, soubor při přenášení mezi počítači referenci ztrácí.
Obr. 3.2 a) Položka References v menu VBE, b) Okno References
3.3.1
Příkaz OnTime
Tento příkaz slouží k plánování spouštění procedur. Syntaxe příkazu je Application.OnTime(EarliestTime, “Procedure”, LatestTime, Schedule)
kde parametr EarliestTime udává, kdy má být procedura Procedure spuštěna a LatestTime do jaké doby je povolení spuštění platné. Parametr Schedule slouží pro aktivaci nebo deaktivaci naplánované úlohy. Pokud chceme naplánovanou úlohu deaktivovat, musí být zadány stejné parametry jako při aktivaci, ale s tím rozdílem, že parametr Schedule = false oproti aktivaci, kdy je true. Formát jednotlivých parametrů lze najit na [5]. Důležité však je, pamatovat si, že funkce, jež má být volána, nesmí mít parametry.
21
3.3.2
Absolutní adresování
Pojem absolutní adresování je spojen se samotným prostředím Excel. Ve VBA se s takto určovanou buňkou pracuje téměř stejně jako s komponentou. V Excelu existují dva způsoby, jak lze adresovat buňky. Prvním je absolutní adresování, které je pro náš účel výhodné a budeme ho proto používat. Druhým je relativní adresování, jež má také svoje výhody, ale v rámci naší implementace pro nás nejsou přínosem. Absolutní určování pozice buňky má tu výhodu, že pokud dojde k vložení řádku nebo sloupce před takto adresovanou buňku je pozice námi požadované buňky aktualizována všude, kde je použita. Toho lze dosáhnout dvěma způsoby. Jako první si uvedeme postup, kdy použijeme standardní označení buňky. Toto označení se skládá ze sloupce a řádku (např. „D4“). Pokud před označení sloupce a řádku vložíme symbol „$“ dosáhneme tím absolutního adresování. Obecně to lze zapsat ve tvaru $<sloupec>$<řádek>. Druhou metodou jak dosáhnout našeho cíle, je pojmenování cílové buňky. Pokud tak učiníme, buňka je jednoznačně určena a lze se na ni kdykoliv odkazovat, bez ohledu na to co se v sešitě provádělo.
Konkrétní postupy a vlastnosti užité přímo v aplikaci budou popsány v následující kapitole, neboť jejich význam pro tuto aplikaci je lépe pochopitelný v souvislosti s jejich použitím. Celkově lze říci, že VBA je poměrně dobrým nástrojem pro vytváření doplňků do hostitelských aplikací, avšak jeho možnosti jsou omezené. Aplikace by neměly být příliš rozsáhlé, a pokud tomu tak je, musí se v kódu udržovat přehlednost a modularita.
22
4 Software pro ovládání měřících aparatur po sběrnici IEEE 488 Tato kapitola bude pojednávat o tvorbě, vlastnostech, postupech použitých při tvorbě programu a především o práci s tímto programem. Tento program byl vytvářen jako novější verze již existujícího. Tomu odpovídají jeho funkce, které jsou z existující odvozeny, avšak program byl vytvářen nezávisle. Pro lepší přechod uživatele ze starší verze na novou bylo uživatelské rozhranní navrženo tak, aby se podobalo starší verzi. Hlavním cílem bylo přepracování programu do podoby využívající příkazy VISA a nebyla zde používána kombinace se starší verzí instrukcí. Program byl primárně vytvářen ve verzi Excel 2003 tak, aby byl spustitelný jak v této verzi, tak i ve verzi Excel 2007. Tento postup byl zvolen kvůli kompatibilitě grafických prvků, neboť při opačném postupu by mohlo dojít špatnému zobrazování těchto prvků ve starších verzích Excel. Pro snadnější orientaci v kódu je tlačítku s určitým názvem přiřazen modul, jehož jméno se shoduje. Podrobněji je tato vlastnost popsána v kap. 4.1.3.
4.1 Uživatelské rozhraní aplikace Hned na začátku je nutné si popsat prvky, které vidíme po spuštění našeho programu. Vzhled aplikace po spuštění vidíme na obr. 4.1, kde jsou také zvýrazněny ty komponenty, které je nutno znát, abychom byly schopni správně ovládat aplikaci. Jak vidíme, tak aplikace má vzhled standardního listu sešitu Excel s přidanými komponentami. Jsou zde jednak tlačítka určená pro samotné ovládání aplikace, ale také pasivní prvky určené pro sledování stavu běhu programu. Účel jednotlivých komponent bude vysvětlen v následujících kapitolách. Veškeré použité komponenty jsou standardního typu. Excel nabízí ještě komponenty typu ActiveX, ale pro větší bezpečnost a stabilitu programu se používá právě zmíněných standardních prvků. Se sešitem je nadále možno pracovat jako s normálním souborem Excelu bez jakýchkoliv omezení. Veškeré zde používané hodnoty jsou uvažovány v základním nastavení, tedy po prvním spuštění originálního souboru. Všude kde je to nutné, bude tato informace v textu připomenuta.
23
Obr. 4.1 Uživatelské rozhraní aplikace
Vzhledem k výše uvedenému faktu, je i příprava před zahájením samotného měření z velké části tvořena standardními úkony, běžně používanými při práci s Excelem. V krátkosti si tento postup popíšeme – Otevřeme sešit Excelu – Vyplníme hodnoty v seznamu přístrojů a vybereme typ měření
Pokud nevíme, na kterých adresách jsou přístroje, lze využít funkce tlačítka Najít zařízení (kap. 4.3.2)
– Provedeme inicializaci uživatelského rozhraní tlačítkem GUI INIT (kap. 4.3.1) –
Pokud proběhl GUI INIT v pořádku, pokračujeme načtením hodnot ze Seznamu zařízení a posláním inicializačních příkazů přístrojům. To vše pomocí tlačítka Test připojení (kap. 4.3.3)
–
Vybereme, zda mají či nemají být posílány zakončovací příkazy (FINISHcmds). To učiníme zaškrtnutím, případně odškrtnutím, zaškrtávacího boxu označeného Posílat FINISHcmds (kap. 4.3.5).
24
–
Provedením všech předchozích kroků v daném pořadí jsme připravili vše potřebné pro zahájení měření, jehož provádění je zahájeno po stisku tlačítka Spustit měření (kap. 4.3.4)
4.1.1
Seznam zařízení
Na obr. 4.1 je tato část rozhraní označena „1“. Nadpis každého sloupce (obr. 4.2) nám říká význam hodnoty, jež musí, nebo může buňka v tomto sloupci obsahovat. Některé z těchto položek
Obr. 4.2 Sloupce seznamu přístrojů
jsou povinné a musí tedy být vyplněni. Za povinné jsou považovány především hodnoty Aktivní/Neaktivní Adresa Sloupec výsledku cmds Zadání těchto hodnot je kontrolováno při inicializaci (viz kap. 4.3.1).
Formát seznamu Velmi důležitou věcí, kterou musí uživatel znát, je jak program určuje, kde se seznam nachází a jak musí být vyplněn. Určení počátku seznamu je řešeno pomocí absolutního adresování buněk (kap. 3.3.2). Jméno buňky určující seznam přístrojů musí byt nastaveno na _devicesList a v aktivním listu musí být právě jedna tato buňka. Pokud tomu tak není nelze načíst konstanty ani příkazy pro přístroje, v důsledku čehož nelze dále pokračovat v měření a program se stane nefunkčním. Nepřítomnost buňky s tímto názvem je detekována, ale dále se s touto informací nepracuje. Z tohoto důvodu je na uživateli, aby zajistil její přítomnost. V základním nastavení sešitu je tato buňka umístěna na začátku seznamu přístrojů a obsahem buňky je text označující sloupec „Seznam přístrojů“. Pokud budeme buňku přesouvat, musíme dávat pozor na následné umístění dalších sloupců, jinak může dojít ke stavu, kdy například hodnotě Adresa bude odpovídat hodnota Sloupec výsledku a podobně, což je nežádoucí a může dojít k chybě. Pokud
25
bychom chtěli předělat pořadí jednotlivých hodnot, tak to lze, ale je již třeba tuto úpravu provézt přímo ve VBA pomocí konstant k tomuto účelu určených (kap. 4.2). Další podmínkou, kterou je nutno splnit, je zadávání hodnot do sloupce Aktivní/Neaktivní. Hodnoty v jednotlivých řádcích musí navazovat. Nesmí tedy nastat situace, kdy v buňce není zadána hodnota a přitom v následujících řádcích zadány jsou. Program sice správně určí počet zařízení a kolik jich je aktivních, ale nemusí již správně určit, které hodnoty se mají načítat. Pokud jde o povinné položky seznamu, tak většina z nich musí být vyplněna pouze v případě, že zařízení je nastaveno jako aktivní. V opačném případě o jejich nevyplnění nebude uživatel informován a nepřítomnost jejích hodnot nebude brána v potaz.
Hodnoty v seznamu V následující tabulce (tab. 4.1) jsou uvedeny jednotlivé sloupce seznamu a formát, v kterém musí být zadány. Tab. 4.1 Sloupce a jejich hodnoty
Sloupec Seznam přístrojů Aktivni/Neaktivni Adresa Sloupec výsledku INITcmds cmds FINISHcmds
Typ text číslo číslo číslo text text text
Hodnota libovolná 0 nebo 1 1 až 30 1 až 65535 příkaz příkaz příkaz
Povinný NE ANO ANO (pokud aktivní) ANO (pokud aktivní) NE ANO (pokud aktivní) NE
Omezení sloupců výsledků je dáno specifikacemi MS Excel. Stejnou hodnotou je omezen i počet řádků výsledku. Dodržováním této hodnoty bude zaručena zpětná kompatibilita se staršími verzemi Excel. Pouze nejnovější verze MS Excel podporuje vyšší hodnoty. Hodnotou příkaz je myšlen text obsahující příkazy pro zařízení a případně definované uživatelské příkazy a to uzavřené mezi znaky „ / “.
Pokud tedy jde o používání tohoto seznamu, lze říci, že je jednoduché a snadné, při dodržení jistých pravidel. Tato pravidla jsou nastavena tak, aby udržovala konzistenci dat, ale zároveň umožnila jistou volnost v přizpůsobení uživatelem.
26
4.1.2
Protokol o průběhu
Okno protokolu slouží jako pasivní zobrazovací prvek. To znamená, že jeho pomocí nelze ovládat běh programu, ale pouze v něm můžeme sledovat, co právě program provádí a v jakém stavu se nachází. V dalším textu budeme tento prvek pro zjednodušení označovat jako log. Okno logu nalezneme v pravé části obrazovky, jak je ukázáno na obr. 4.1 a označeno číslem „2“. Jelikož výpis do logu je poměrně nákladnou operací z hlediska běhu programu, je ovládání tohoto prvku navrženo
tak,
že
nepotřebujeme,
aby
prováděn,
jej
lze
byl
pokud výpis
deaktivovat.
Deaktivace výpisu je závislá na tom, zda je log zobrazen či nikoliv. Zobrazení nebo skrytí logu je umožněno
pomocí
tlačítka
s označením LOG (více viz kap. 4.3.5). To nám umožňuje poněkud urychlit běh programu. Ukázku Obr. 4.3 Ukázka protokolu o běhu programu
toho, co se do logu vypisuje vidíme na obr. 4.3. Je zde vidět průběh
inicializace (kap. 4.3.1) a testu připojení (kap. 4.3.3). Mazání obsahu logu je možné dvěma způsoby. Jedním je ruční mazání pokud si chceme uchovat jen nějaké informace a smazat ty, které nejsou v tu chvíli podstatné. Další možností je smazání veškerého obsahu logu, pomocí tlačítka k tomuto účelu vytvořenému s nápisem Clear LOG (kap. 4.3.5).
4.1.3
Ovládací prvky programu
Ovládacími prvky jsou v našem případě myšlena tlačítka (CommandButton), kterých se v naší aplikaci vyskytuje osm a jeden zaškrtávací box (CheckBox). Ovládacími proto, že je jimi možno ovládat běh programu. Na obr. 4.1 jsou tyto prvky označeny číslem „3“. Tlačítka jsou rozdělena do dvou skupin, aby byla zajištěna přehlednost.
27
Každému tlačítku je přiřazena jedna funkce, jejíž vykonávání je zahájeno po stisku příslušného prvku. Více o funkcích jednotlivých tlačítek je uvedeno v kap. 4.3. Pro pořádek si však uvedeme názvy tlačítek, které odpovídají názvům modulů, do kterých je kód programu rozdělen. Názvy jsou uvedeny v tabulce tab. 4.2. Tab. 4.2 Ovládací prvky a jejich název, typ a volaná funkce
Označení komponenty GUI INIT Najít zařízení Test připojení Spustit měření LOG Clear LOG Stop Help Posílat FINISHcmd
Název komponenty/modulu bt_GUI_INIT bt_search_devices bt_connection_test bt_measure bt_log bt_log_clear bt_stop bt_help chb_FinCmdSet
Typ komponenty CommandButton CommandButton CommandButton CommandButton CommandButton CommandButton CommandButton CommandButton CheckBox
Volaná funkce GUIInit SearchDevices ConnectionTest RunMeasuring Log LogClear StopMeasuring Frm_Help.Show ---
V tabulce vidíme, že u tlačítka bt_help se nevolá obecná funkce, ale přímo metoda pro zviditelnění formuláře. U zaškrtávacího boxu chb_FinCmdSet není volána žádná funkce. Důvodem je to, že se zde nevykonává žádná významná akce při změně stavu. Je pouze vypsána informace o změně hodnoty do logu. Všechny volané funkce uvedené v tab. 4.2 jsou procedury, které jsou volané základní metodou vytvořenou VBA podle druhu akce provedené na ovládacím prvku (v našem případě akce Click). Avšak z hlediska modularity jsou pro nás důležitější právě funkce uvedené, neboť v případě, že budeme chtít funkčnost jednoho tlačítka použít v jiném listu, stačí pouze nově vytvořené komponentě říci, aby volala právě jednu z uvedených metod.
4.1.4
Typy měření a jejich nastavení
Dalšími velmi významnými součástmi našeho programu jsou prvky označené na obr. 4.1 číslem „4“. Vzhledem k průběhu měření je nejdůležitější komponentou z této skupiny rozbalovací seznam cb_choice (obr. 4.4). Jsou vytvořeny tři typy měření. Každý z nich má svůj účel a použití. Názvy jednotlivých typů měření by měli uživateli
28
říci jak bude přibližně odměr vypadat. Avšak pro lepší pochopení si je podrobněji
rozebereme.
Společnou
vlastností všech druhů odměru je to, že Obr. 4.4 Výběr typu měření
respektují
zadané
inicializační
a
zakončovací příkazy. Podmínkou pro zahájení odměru je vybrání jednoho platného typu měření. Bez jeho vybrání není program schopen dále pokračovat, neboť neví, jakým způsobem má provádět odměr a výpis jeho výsledků.
Jeden odměr do řádku Tento typ odměru je nejzákladnější a je vytvořen pro provedení jednoho odměru, bez jakékoliv další návaznosti. Výpis výsledků měření je prováděn do prvního řádku oblasti výsledků (kap. 4.1.5) a s provedením každého dalšího odměru je tento řádek přepisován novějšími hodnotami. Užití této varianty měření je hlavně pro provádění informativního odměru, nebo odzkoušení funkčnosti navrženého měřícího systému. Samozřejmě ji můžeme používat pro standardní měření, ale vzhledem k způsobu provádění výpisu výsledku není příliš výhodnou.
Více odměrů pod sebe Je obdobou předchozího způsobu provádění odměru, ale je zde upraven způsob, jakým jsou vypisovány výsledky. Ty jsou zde zobrazovány pod sebe a tudíž se nám zachovává historie hodnot získaných předchozími odměry. Díky této vlastnosti má tato varianta mnohem více možností použití. Využít této varianty měření zahrnuje možnosti předchozího typu a dále ho rozšiřuje. Hlavními možnostmi použití je měření charakteristik a dlouhodobé sledování měřených veličin v případě, kdy potřebujeme provádět odměry v různých časových intervalech v námi určené okamžiky. Dále může být použit pro iterační vyvažování.
29
Postup
iteračního
vyvažování typu
v rámci
měření
tohoto
může
být
následující (obr. 4.5). Pro
fyzické
provádění
nastavování nám postačí jeden voltmetr a generátor. V rámci Oblasti výsledků vložíme např. do sloupce „D“ dvě počáteční hodnoty
pro
nastavení
generátoru, jež je vstupem můstku.
Generátorem
hodnoty
nastavíme
tyto a
na
voltmetru odečteme stav na výstupu můstku po provedení Obr. 4.5 Iterační vyvažování
změny
vstupní
hodnoty
a
vypíšeme jej do sloupce „C“. Do dalších řádků sloupce „D“ již vložíme některý ze vzorců používaný pro výpočet vyvážení (Excel umí pracovat i s komplexními čísli). S postupujícím počtem odměrů se budeme blížit nulové odchylce.
Závislost na čase Poslední typ měření, jež je v naší aplikaci implementován. Tento způsob je již zcela automatizován a od uživatele požaduje pro svoji činnost nastavení hodnot, které najdeme hned pod rozbalovacím seznamem (obr. 4.6). Pro nastavení parametrů je potřeba znát pouze dobu, po kterou chceme měření provádět a interval po kterém se mají jednotlivé odměry provézt.
Obr. 4.6 Parametry pro Závislost v čase
Počet odměrů je spočítán automaticky podle vztahu (1) ,
(1)
30
kde X je počet odměrů a Tměření, Tvzorkování jsou celková doba měření a interval provádění odměrů v sekundách. Měnit hodnotu v řádku určujícím počet odměru je tedy zbytečné a nežádoucí. Výpočet si provádí program sám podle zadaných parametru a zobrazená hodnota je pouze informativní. Vzhledem k tomu, že není nijak hlídán vstup těchto hodnot do výpočtu, je nutné zadávat kladné hodnoty. Program je však vytvořen tak, aby nemohlo dojít ke kolizi v případě, že zadaná hodnota intervalu je kratší než doba nutná pro provedení odměrů. Nastavení hodnoty určující čas provedení dalšího měření je proto prováděno po ukončení všech nutných měřících akcí.
4.1.5
Oblast výsledků
Abychom mohli dále využívat výsledky měření, musí být tyto hodnoty někam vypisovány. K tomuto účelu nám slouží právě Oblast výsledků, primárně navržena pro tento účel. Aby byl program schopen tuto oblast určit, je zde použit stejný způsob jako při určování pozice Seznamu zařízení (kap. 4.1.1) s tím rozdílem, že zde je nutno mít zadán název počáteční buňky oblasti jako _resultList. Při prvním spuštění originálního souboru se buňka s tímto názvem nachází na pozici „A39“. Pro změnu její pozice platí opět stejná pravidla jako v případě Seznamu zařízení. Abychom mohli oblast výsledků správně používat, je třeba se držet několika pravidel.
Důležité
je
pamatovat na to, že první sloupec oblasti je vždy vyhrazen pro výpis času provedení odměru. Pokud si tedy do tohoto sloupce Obr. 4.7 Výpis odměřených hodnot
vložíme nějaké hodnoty, tak
budou
pokaždé
přepsány tímto údajem. Pokud budeme z nějakého zařízení odečítat více hodnot při jednom odměru, musíme si dobře nastavit hodnotu v Seznamu zařízení určující, v kterém sloupci má být výsledek vypsán. Program nekontroluje, zda je buňka prázdná a tak může dojít při špatném nastavení k přepisování údajů z jednotlivých zařízení.
31
Stejná situace může nastat i v případě, že použijeme některý sloupec pro nastavování hodnot v příkazu pro zařízení. Na obr. 4.7 je ukázán příklad výpisu.
4.2 Konstanty a proměnné V programu je používáno poměrně velké množství konstant potřebných pro správný průběh měření i jiných operací. Jako konstanty jsou využívány takové údaje, které se v kódu často opakují a zápis pouhou hodnotou by učinil program nepřehledným a význam těchto dat by byl nejasný. Dále jsou takto použity hodnoty, jež jsou v rámci programu nastavovány jen jednou nebo opakovaně v rámci jedné funkce, ale v průběhu měření se nemění. Veškeré konstanty používané v rámci celého programu jsou deklarovány v modulu PublicFunctions a jejich význam udává komentář. To nám umožňuje v případě nutnosti pozměnit formátování či funkčnost aplikace změnou hodnoty na jednom místě, načež se tato změna dále distribuuje do ostatních částí programu. V této kapitole budou popsány především ty konstanty, které může uživatel za nějakým účelem měnit, ale budou ukázány i konstanty, které měnit nelze ale je dobré je znát. Veškeré konstanty, které používá více modulů programu, jsou deklarovány jako veřejné (Public), aby k nim mohlo být přistupováno.
SelectedBook a SelectedList Tyto dvě hodnoty jsou příkladem konstant, které nelze měnit. Jsou však hlavními konstantami, potřebnými v průběhu používání všech funkcí. Z počátku byly používány jako typ String (textový řetězec) a obsahovaly název sešitu (SelectedBook) a listu (SelectedList), se kterým se bude pracovat při vykonávání programu. Bohužel toto se neosvědčilo a konstanty byly předělány na typ Object (struktura hodnot), který obsahoval sadu hodnot blíže určující vybraný list respektive sešit. Správné nastavení těchto hodnot je velice podstatné. Pokud se špatně nastaví, program není schopen další činnosti. Způsob jak může uživatel ovlivnit nastavení těchto konstant, je použití tlačítka GUI INIT, v rámci jehož funkce se tyto konstanty nastavují.
32
Timeout Pomocí této konstanty je možno globálně nastavit parametr posílaný do přístroje, určující jak dlouho se má čekat na vyřízení žádosti (příkazu). Nastavování tohoto času globálně, by se mohlo zdát nešikovné, ale opak je pravdou. Touto konstantou můžeme nastavit základní dobu čekání a můžeme ji volit poměrně malou (postačí i 500 ms). Pokud tato doba nestačí, například při odměru hodnot, program využívá jiné mechanizmy, dovolující čekání na provedení akce.
SeparationSign a UserCmd Slouží k rozpoznávání jednotlivých příkazů pro zařízení (SeparationSign) a vnořených uživatelských (UserCmd). Jsou vybrány tak, aby nekolidovaly s příkazy přístrojů. To znamená, že žádný známý příkaz pro zařízení je neobsahuje. Pokud by se ale takovýto příkaz přeci jen našel, je možno změnou hodnot těchto konstant docílit další funkčnosti.
BUS_INTERFACE U počítače, na kterém bude tento program spouštěn, se předpokládá přítomnost GPIB karty. Pokud je v systému zapojena pouze jedna karta, není třeba hodnotu této konstanty měnit (počáteční hodnota je „GPIB0“). Pokud ovšem do systému vložíme další GPIB kartu, bude její označení jiné (např. druhá karta v systému má označení „GPIB1“). Určení karty, která má být použita se provede právě změnou této konstanty. Z toho plyne, že program je schopen pracovat zároveň pouze s jedním interfacem. Program nebyl vytvořen pro používání více rozhraní naráz proto, že se nepředpokládá, že bude použito tak velké množství jednotek.
MeasureSet V případě této proměnné se již nejedná zcela o konstantu. MeasureSet je dvojrozměrné pole, uchovávající veškeré informace získané z oblasti Seznam zařízení. Obsah jednoho řádku pole nám ukazuje obr. 4.8.
33
Obr. 4.8 Řádek pole MeasureSet
Přímo s tímto polem souvisí další konstanta offset. Tato konstanta nám říká, o kolik položek jsou posunuty první příkazy. Pole bylo původně navrženo tak, aby dynamicky měnilo svou velikost podle aktuálního množství aktivních zařízení a maximálního počtu příkazu. Avšak při změně velikosti občas docházelo k výskytu chyby a proto se přešlo k statické velikosti tohoto pole. To je nastaveno na 30 řádků (resp. zařízení) a 50 sloupců (45 příkazů pro zařízení). Ač jsou hodnoty z tohoto pole používány ve více modulech a tím pádem musí byt definováno jako Public, je deklarace pole provedena ve speciálním modulu ComunitaionValues, vytvořenému výhradně pro toto pole a funkce s ním pracující. Procedury mimo tento modul z pole pouze čtou. Tab. 4.3 Seznam některých konstant a proměnných
Název
TIME_CHARACTERISTIC SeparationSign
Hodnota Jeden odměr do řádku Více odměrů pod sebe Závislost na čase /
UserCmd
#
DataSeparation
,
MAX_DEVICES
30
timeout
1000
DevicesNameColumn DevicesActiveColumn DevicesAddressColumn DevicesResultColumn DevicesCmdsColumn ListOffset offset
0 1 2 3 4 2 2
BUS_INTERFACE
GPIB0
WAITX
#wait
ADDX
#add
ONE_TO_LINE MORE_TO_MULTIPLE_LINES
Popis
konstanty určující typ metení
znak oddělující jednotlivé příkazy určuje znak určený pro identifikaci uživatelských příkazů znak oddělující jednotlivé hodnoty v případě že jich přístroj vrací více maximální počet adres zařízení touto konstantou lze změnit dobu TIMEOUTu nastavovanou pro všechny přístroje určují pořadí jednotlivých sloupců, jež se načítají do pole dat offset pozic hodnot v seznamu zařízení offset v poli MeasureSet nastavení interfacu sběrnice pokud je v PC vice karet GPIB uživatelský příkaz pro čekání X ms uživatelský příkaz zaměňující se za sloupec určený jeho parametrem
34
Ostatní konstanty Další konstanty jsou uvedeny v tabulce tab. 4.3. Jejich účel není nutno popisovat příliš detailně. Nepředpokládá se, že budou měněny i když je to možné. Pokud by bylo přeci jen nutné je měnit, jejich význam je v tabulce dostatečně vysvětlen.
4.3 Funkce programu Program má z hlediska cíle implementace pouze jednu funkci a to ovládání měřících aparatur. Tato funkce je v programu rozdělena do několika kroků. Každý z nich má pro zajištění správného běhu programu důležitý úkol. V této kapitole budou popsány právě tyto jednotlivé kroky, které jsou rozděleny do několika funkcí a jejich vykonávání je rozděleno mezi několik ovládacích prvků v uživatelském rozhraní.
4.3.1 GUI INIT Stisknutím tlačítka s označením GUI INIT se spustí procedura, jejímž úkolem je načtení proměnných a konstant (kap. 4.2), jež jsou nutné pro správný běh celého programu. Vývojový diagram na obr. 4.9 ukazuje přibližnou strukturu běhu jednotlivých funkcí. Přibližnou z toho důvodu, že například funkce ReportIt je volána několikrát v průběhu inicializace. Tato funkce má však za úkol pouze vypisovat informace pro uživatele a z hlediska ovládání zařízení není až tak podstatná. Nejsou zde také uvedený funkce kontrolující konzistenci zadaných hodnot. Jako první je volána funkce SetConstants, jejímž úkolem je nastavení veškerých hodnot nutných pro funkčnost uživatelského rozhraní a část proměnných zajišťujících průběh měření. Samotná tato funkce nastavuje pouze konstanty SelectedBook a SelectedList. Další hodnoty jsou nastavovány v speciálních funkcích, které tato Obr. 4.9 Vývojový diagram pro tlačítko GUI INIT
metoda volá. Druhou volanou procedurou je GetDeviceCount. Tato metoda je volána funkcí SetConstants a má za úkol zjistit počet přístrojů
vyplněných v Seznamu zařízeni a kolik z nich je nastaveno jako aktivní. Tyto údaje jsou
35
udržovány v proměnných DevicesCount a ActiveDevicesCount. Funkce si hlídá, zda je alespoň jedno zařízení nastaveno jako aktivní, pokud tomu tak není, zablokuje tlačítka pracující s přístroji. Třetí funkcí je GetMeasueType, opět volanou pomocí SetConstants. Procedura naplňuje proměnnou SelectedMeasureType. Ta nám říká, jaký typ měření je vybrán. Je zde ověřováno, zda byl nějaký typ měření vybrán. Poslední volanou metodou je GetMeasureDelay, informující program v případě měření typu Závislost na čase, jaká je prodleva mezi odměry. Hodnota této prodlevy je uložena v poli TimeValues. Průběh celého procesu inicializace není spojen s nastavováním zařízení na sběrnici a proto není ošetřen proti několika spuštěním naráz. Neošetření této situace je umožněno také tím, že v průběhu provádění této operace není použito příkazu Application.OnTime (kap. 3.3.1). Inicializace konstant obsahuje mechanizmus vyhodnocující, zda jsou tyto hodnoty zadány a případně jestli je toto zadání korektní z hlediska jejich formátu. To znamená, jestli je kupříkladu v sloupci Adresa zadaná hodnota číslo. V případě příkazů pro zařízení je pouze ověřováno, zda jsou nějaké příkazy zadány a pokud ne je to vyhodnocováno pouze jako varování. Jako varování je to vyhodnocováno proto, že nemůžeme vědět, zda si uživatel přeje konkrétní typ příkazů posílat.
4.3.2
Najít zařízení
Pokud zapneme přístroj, je na jeho displeji po krátkou dobu zobrazena adresa, pod kterou ho můžeme na sběrnici nalézt. Avšak pokud z nějakého důvodu na přístroj nevidíme, či jsme si adresu nestihly zapamatovat, můžeme využít schopnosti tlačítka Najít zařízení. Funkce tohoto tlačítka je, najít zapnutá zařízení na všech připojených GPIB kartách a zobrazit výsledky hledání do logu. Příklad výsledku hledání můžeme vidět na obr. 4.10. Funkce používá pro nalezení zařízení Obr. 4.10 Příklad výsledku funkce Najít zařízení
operaci z knihovny VISA
36
status
=
viFindRsrc(defaultRM,
BusBuff,
fList,
nList, desc)
Vysvětlení parametrů lze nalézt v [1],[2]. Načtení názvu přístrojů je prováděno pomocí zasílání příkazu „*IDN?“ každému nalezenému zařízení. Pokud zařízení tento příkaz nezná je ve výpisu pod adresou zobrazen pouze text „Neznámé zařízení“. Funkce ClearString má za úkol vrátit ze speciálního řetězce vráceného operací viFindRsrc adresu přístroje. Samotná adresa se skládá ze tří číslic, kde první určuje GPIB kartu v systému a poslední dvě adresu přístroje. Protože toto tlačítko již pracuje se sběrnicí, je zde kontrolováno,
zda
Obr. 4.11 Vývojový diagram pro tlačítko Najít zařízení
již
sběrnice není používána. Vývojový diagram vidíme na obr. 4.11. Před použitím tohoto tlačítka musí být také provedena inicializace uživatelského rozhraní.
4.3.3 Test připojení Operace prováděné tímto tlačítkem (obr. 4.12) jsou jak nastavovací, tak i měřící. Jako první je volána funkce ConnectionTest. Úkolem této funkce je ověřit, zda byla korektně provedena operace GUIInit, což nám signalizuje řídící proměnná INIT_OK. Pokud nastala chyba, je uživatel požádán o nové provedení GUI INIT. Teprve poté co proběhne inicializace v pořádku, je volána metoda SetMeasureValues. Obr. 4.12 Vývojový diagram pro tlačítko Test připojeni
Funkce SetMeasureValues se nachází v modulu CommunicationValues a jejím úkolem je nastavit
37
veškeré hodnoty v poli MeasureSet (kap. 4.2). Po povedení naplnění pole MeasureSetI, jsou v něm již připravený příkazy pro přístroje a proto již může být volána funkce SendInitFinishCmds, zajišťující zaslání inicializačních (resp. zakončovacích) příkazu do zařízení. Funkce slouží k zasílání obou typu příkazů proto, že jsou zasílány nezávisle na průběhu měření. To jaký typ příkazu má být zasílán, je určováno řídící proměnnou FINISH_COMMAND a to jestli mají být zakončovací příkazy posílány vůbec, se řídí podle stavu komponenty označené Posílat FINISHcmds. Na závěr jsou vypsány informace o provedení operací.
4.3.4 Spustit měření Jak nadpis tlačítka napovídá (Spustit měření), je toto tlačítko určeno pro spouštění samotného měření.
Struktura
části
kódu
provádějící
odměřování je poměrně složitá a z tohoto důvodu, je
vývojový diagram
zjednodušen, aby byl
(obr.
4.13)
přehledný.
poněkud Informace
graficky neznázorněné budou vysvětleny písemně. Funkce RunMeasuring má za úkol spustit měření takovým způsobem, aby byl brán ohled na vybraný
typ
měření,
čehož
je
dosaženo
nastavením některých parametrů. Další
volanou
procedurou
je
CompleteMeasuring. Tato metoda je v rámci odměru volána několikrát a pokaždé s jiným účelem. To jak se má zachovat je určeno parametrem se kterým je volána (tab. 4.4). Ihned po zavolání funkcí RunMeasuring je navázáno spojení s prvním přístrojem. Pokud vše proběhne v pořádku, provede se poslání prvního příkazu (cmds). Po jeho úspěšném odeslání je přístroji dán čas na jeho vykonání. Poté co se počká určenou dobu (MeasureDelay) je přístroj otestován, jestli Obr. 4.13 Vývojový diagram pro tlačítko Spustit měření
38
je operace dokončena (VerifySTB). To, jak se bude přístroj testovat, se určí z příkazu mu zasílanému (funkce CmdType). V případě, že se jedná o nastavovací příkaz, je testována hodnota OPC (OPeration Complete). Pokud má být provedena operace, jejímž následkem má být odměření hodnot a jejich následné odeslání do počítače, testuje se stav STB (STatus Byte) přístroje. Pokud je operace dokončena, je volána opět funkce CompleteMeasuring s příslušným parametrem („2“, „5“). Funkce nyní přečte data (měřící příkazy) a následně vyhodnotí, zda jsou další příkazy k odeslání. Pokud ano, pokračuje voláním sama sebe s parametrem „1“ a dále podle již popsaného postupu. V případě, že další příkazy nejsou, je provedeno ukončení spojení s aktuálně používaným zařízením a jestliže existuje další přístroj k obsloužení je navázáno spojení s ním (volání CompleteMeasure s param. „0“). V okamžiku, kdy již žádné takové zařízení neexistuje, jsou poslány zakončovací příkazy (je-li to požadováno) a ukončeno měření. Pokud je vybrán typ měření Závislost na čase je před ukončením naplánováno další spuštění. Funkce je opět opatřena mechanizmem zabraňujícím mnohonásobnému spuštění. Tab. 4.4 Parametry funkce CompleteMeasuring
Parametr 0 1 2 3 4 5
4.3.5
Akce Navázání spojení Zaslání příkazu Čtení dat z přístroje (měřící příkazy) Ukončení spojení s přístrojem Určení dalšího postupu pro měření Alternativa čtení dat pro param. 2 (nastavovací příkazy)
Ostatní funkce
Následující operace jsou pouze podpůrnými prostředky pro ovládání aplikace. Proto jim bude věnována menší pozornost a popíšeme je pouze heslovitě v tab. 4.5.
39
Tab. 4.5 Ostatní funkce
Tlačítko
Funkce
Stop
Slouží k zastavení běhu programu a zamezení spouštění dalšího čekání na dokončení operace přístrojem.
Help
Zobrazí okno nápovědy obsahující informace o formátování příkazů a možnostech nastavení některých přístrojů.
LOG Umožňuje zobrazit či skrýt okno s protokolem o průběhu Clear LOG Smaže obsah logu
4.3.6
Uživatelské příkazy
Do aplikace jsou implementovány dva uživatelské příkazy, umožňující nám lepe ovládat měření. Způsob jejich zápisu musí být striktně dodržen, jinak není program schopen je rozeznat a v důsledku toho dojde k chybám při posílání příkazů přístrojům. Všechny uživatelské příkazy jsou aplikací identifikovány pomocí symbolu „#“ následovaného identifikátorem určujícím konkrétní funkci.
4.3.6.1 Vkládání hodnot z buňky do příkazu Abychom byli schopni měřit charakteristiky, kde měníme vstupní veličinu a odečítáme hodnotu výstupní, musíme umět říci programu, jakou hodnotu má přístroji (např. generátoru) nastavit. K tomu nám slouží právě tento uživatelský příkaz. Identifikátor této funkce je nastaven na „add“. Písmeno označující sloupec, z kterého má být hodnota brána, je zapsán bez mezery hned za tento řetězec. Rozsah sloupců, který je takto možno zadat je A až Z. Řádek v sloupci je určován podle aktuální hodnoty proměnné, určující pozici, kam se má vypisovat výsledek. Na příkladu můžeme vidět finální podobu celého příkazu i se zakomponováním /APPL:SIN #addC KHZ, #addA VPP, 0.01 V/
40
4.3.6.2 Čekání před odměrem Někdy je potřeba, aby se před provedením odměru přístrojem počkalo, až se veličiny v obvodu ustálili (teplota, napětí apod.). Této prodlevy lze dosáhnout za pomoci tohoto uživatelského příkazu. Funkce je v rámci GPIB příkazu identifikována řetězcem „wait“, následovaného číselnou hodnotou. Tato hodnota musí být zadána v milisekundách bezprostředně za identifikátor funkce a udává, jak dlouho se má čekat. Takto zformátovaný řetězec vložíme na konec GPIB příkazu, po kterém chceme čekat. Na ukázce vidíme příklad použití /MEASURE:VOLT:AC #wait2000/
4.3.7
Ohlašování chyb komunikace
V programu je zabudována funkce ReportError, jejímž úkolem je signalizování chyb, které nastanou během komunikace s přístrojem. Tato procedura je významná proto, že pracuje s externím souborem. Načítání tohoto souboru je prováděno vždy, pří zavolání výše zmíněné metody. Díky tomu musí být této funkcí věnována při spuštění na novém počítači pozornost. Je nutné v takovém případě provézt změnu proměnné FILE v modulu ErrorCodes obsahující cestu k tomuto souboru. Pokud je však program používán na jednom PC, je potřeba provézt změnu pouze jednou a to v případě, že je soubor umístěn v nějakém centrálním adresáři. Soubor, o kterém zde hovoříme, obsahuje kódy chyb a jejich popis, který je vypisován do logu.
41
5 Závěr Úkolem této bakalářské práce bylo vytvořit program pro ovládání měřících aparatur s rozhraním IEEE 488. Při tvorbě uživatelského rozhraní bylo vzcházeno z programu GPIBData, jak bylo požadováno, avšak v rámci požadavků na funkčnost aplikace bylo nutno některé prvky přidat. Požadované měřící moduly byly vytvořeny tak, aby s nimi bylo možno realizovat jakýkoliv měřící postup. Program byl navržen tak, aby byl co nejvíce přehledy a bylo v něm možno dále provádět úpravy. Doplňování kódu je navíc usnadněno několika předpřipravenými funkcemi a konstrukcemi, umožňujícími snadnou implementaci nové funkcionality. V průběhu vytváření aplikace byl použit postup, kdy velké množství nastavení je tvořeno konstantami a proměnnými, jež je možno dále upravovat podle individuálních požadavků. To je pro uživatele výhodné, ale aplikace je díky tomu velice citlivá na formát vstupních dat a je na uživateli, aby byly zadávané hodnoty správné. Při návrhu aplikace byla vyvíjena snaha o možnost zachytávání informace o dokončeném odměru pomocí asynchronních událostí, jež jsou knihovnou VISA podporovány. Bohužel se po několika pokusech o tuto funkcionalitu ukázalo, že z prostředí VBA k těmto událostem nelze přistupovat a byl zvolen méně elegantní způsob, používající kontrolu stavových registrů. Programu byla přidána funkce pro samostatné zasílání ukončovacích příkazů do zařízení a schopnost přerušit běh měření. Pro rychlejší práci s protokolem o průběhu prováděných akcí, bylo přidáno tlačítko pro smazání celého jeho obsahu. Iterační vyvažování nebylo implementováno formou modulu, ale v programu je ho možno snadno použít pomocí postupu uvedeného v kap. 4.1.4, jež je ve výsledku mnohem flexibilnější než původně požadovaný modul. Schopnosti měření byly testovány, tak aby se ověřila univerzálnost. V rámci tohoto testu bylo k rozhraní GPIB připojeno větší množství zařízení s různými schopnostmi. Bylo také ověřováno, zda je možno pracovat s Excelem i v průběhu provádění měření. Tato schopnost programu je funkční do takové míry, jakou nám dovoluje Excel. Z výše uvedeného vyplývá, že požadavky uvedené v zadání byly splněny a podařilo se přidat několik menších vylepšení. Program byl otestován a byl shledán funkčním.
42
Literatura [1]
NI-VISA User Manual, National Instruments, 2001
[2]
NI-VISA Programmer Reference Manual, National Instruments, 2003
[3]
Haasz, V., Roztočil, J., Novák J.: Číslicové měřicí systémy. Vydavatelství ČVUT, Praha 2000
[4]
Standard Commands for Programmable Instruments, SCPI Consorcium, 1999
[5]
Visual Basic, nápověda k programovacímu jazyku,
[6]
Steven Roman, Ph.D.: Writing Excel Macros with VBA, 2nd Edition. O'Reilly & Associates, 2002
[7]
34401A Multimeter, 7th Edition, uživatelská příručka, Agilent Technologies, 2007,
[8]
NI-VISA Help, National Instruments, 2005,
[9]
Overview of IEEE 488, informace o sběrnici,
[10] Přiřazení maker tlačítkům, návod, [11] Úvod do VBA, tutoriál, [12] VBA – Makra, návod, [13] IEEE-488, informace o sběrnici, [14] IEEE-488,popis sběrnice, [15] GPIB Tutorial, popis sběrnice, [16] Roztočil, J.: Programování měřicích systémů pomocí technologie, document pdf,
43
Obsah CD Přiložené CD obsahuje text této bakalářské práce a sešit Excelu obsahující vytvořený program. Data jsou členěna do těchto adresářů:
/BP/
-
obsahuje tuto práci ve formátu PDF
/GPIBData2/
-
soubor s programem ve formátu XLS a XLSM, soubor s
chybovými kódy /ZALOHA/
-
záložní kopie všech dat na CD v komprimovaném stavu
44
45