ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická
BAKALÁŘSKÁ PRÁCE
2009
Jan Růžička
1
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Katedra měření
Systém pro měření magneticky tvrdých materiálů
Doc. Ing. Petr Kašpar, CSc
Jan Růžička
Praha 2009
2
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
3
---VLOŽIT ZADÁNÍ BAKALÁŘSKÉ PRÁCE--(originál nebo kopie)
4
Anotace Účelem tohoto měřícího systému je změřit a zobrazit hysterézní smyčku magneticky tvrdého materiálu a to celou smyčku nebo jen důležitý 2. kvadrant. Dále zobrazit charakteristické parametry tohoto materiálu, to jest: Hc (koercitivní intenzita), Br (remanentní indukce) a |BHmax| (maximální energetický součin). Softwarově je problém řešen simultánním odečtem napětí z dvou multimetrů po HP-IB (IEEE 488) sběrnici. Multimetry čtou napětí z analogového výstupu gaussmetru - UH a fluxmetru - UB. Napětí UB je korigováno na integrační drift a počáteční
podmínky
integrátoru.
Po
přenásobení
příslušnou
převodní
konstantou a přepočtu, odpovídá napětí UH intenzitě H a napětí UB indukci B. Indukce B je dále korigována na tok vzduchem. Systém umožňuje ukládání nebo načítání korigovaných a nekorigovaných dat společně s údaji o materiálu do souboru s příponou .csv.
Annotation Purpose of this measurement system is measuring and displaying of hysteresis loop of hard magnetic material respectively all loop or only important second quadrant. Further display characteristic parameters of this material namely : Hc (coercive intensity), Br (remanent flux density) and
|BHmax|
(maximum
energetic product ). At software level is problem solved by simultaneous read voltage from two multimeters at HP-IB (IEEE 488) bus. Where multimeters read voltages from analog output of gaussmeter - UH and fluxmeter - UB. Voltage UB is corrected on integration drift and initial condition of integrator. After multiplying conversion factor and recalculation, corresponding voltage UH intensity H and voltage UB induction B. Voltage from fluxmeter is software corrected on integration drift and initial condition of integrator. Induction B is corrected on flux by air. System makes it possible to save or load corrected and uncorrected dates together with specifications about material to the file with filename extension .csv.
5
Poděkování Tímto bych chtěl poděkovat vedoucímu mé bakalářské práce na Katedře měření Doc. Ing. Petru Kašparovi, Csc. za jeho cenné rady, konzultace a připomínky k této bakalářské práci. Dále bych chtěl poděkovat Ing. Antonínu Platilovi, Ph.D. za jeho připomínky a rady k programu.
6
Obsah Anotace (Annotation)
5
Poděkování
6
1
2
3
Úvod 1.1
Zadání práce.................................................................................8
1.2
Pár slov na úvod...........................................................................8
Magneticky tvrdé materiály (MTM) 2.1
Charakteristické parametry MTM...................................………….9
2.2
Problematika měření MTM a její srovnání s MMM......................11
2.3
Analýza GUI a zdrojového kódu MMMM.....................................13
2.4
Schéma měřícího systému a princip měření MTM.....................18
MTMProgram 3.1
Volba vývojového prostředí a programovacího jazyka................22
3.2
GUI a ovládání programu............................................................22 3.2.1 Rozbor GUI a ovládání programu.....................................22 3.2.2 Řešení orientované na uživatele.......................................32 3.2.2.1
Pomoc uživateli v nesnázích..............................32
3.2.3 Adaptibilita GUI.................................................................33 3.3
Jednotky a platná místa...............................................................33
3.4
Rozbor programu.........................................................................34 3.4.1 Dynamická struktura programu.........................................34 3.4.2 Schéma programu a jeho funkce......................................34
3.5 4
Měříme s programem…………………………………………….....45
Závěr
46
Reference
47
7
1
Úvod
1.1
Zadání práce Cílem této práce je napsat program (aplikaci) pro nastavení, řízení a
zpracování odměrů napětí z analogového výstupu gaussmetru - UH a fluxmetru - UB s využitím multimetrů (ve funkci voltmetrů). V programu u napětí UB korigovat integrační drift a počáteční podmínky integrátoru. Přepočítat napětí UH na intenzitu H a napětí UB na indukci B. V případě indukce B provést korekci toku vzduchem. Zobrazit statickou hysterézní smyčku magneticky tvrdých materialů, dále již jen MTM ve všech 4. kvadrantech, nebo jen v důležitém 2. kvadrantu a vypsat základní parametry MTM: Hc (koercitivní intenzita), Br (remanentní indukce) a |BHmax| (maximální energetický součin). V souvislosti s parametrem |BHmax| vykreslit |BH| = f(B) do 1. kvadrantu. Dále aby program umožňoval ukládání nebo načítání korigovaných a nekorigovaných dat společně s údaji o měření a materiálu do souboru s příponou .csv. Na závěr je zde celkový požadavek na jednoduché ovládání programu přes grafické uživatelské rozhraní, dále již jen GUI. Informování uživatele a případně zabránění uživateli provést neplatné kroky,
jenž by vedly k neočekávaným
událostem. V programu také implementovat (realizovat) nápovědu. 1.2
Pár slov na úvod Přáním vedoucího mé bakalářské
práce bylo, abych před samotným
psaním mého programu, provedl analýzu zdrojového kódu pana Milana Rozsívala z jeho bakalářské práce Měření magneticky měkkých materiálů, dále již jen MMMM [7], u které byl vedoucím práce. Mým úkolem bylo, abych funkce u nichž byl spokojen s výsledkem, otestoval - zda-li se dají použít v mé aplikaci a pakliže to bude nutné, je přepsal, případně upravil. Stál jsem tedy před úkolem, který je pro každého programátora obtížný, vyznat se v cizím zdrojovém kódu. Odměnou mi však bylo usnadnění práce.
8
2
Magneticky tvrdé materiály (MTM)
2.1
Charakteristické parametry MTM
U magneticky tvrdých materiálů (MTM) má smysl měřit pouze při stejnosměrném magnetování. To znamená, že nás zajímá křivka prvotního magnetování a statická hysterézní smyčka. Křivka prvotního magnetování - vyjadřuje závislost B = f (H) materiálu, který ještě nebyl magnetován, respektive byl dokonale odmagnetován (viz. obr. 1, část 0-A). Statická hysterézní smyčka – vyjadřuje závislost B = f (H) při pomalých změnách H a to v rozsahu +Hm až –Hm (Hm - maximální intenzita) a zpět. U MTM nás zajímá především její 2. kvadrant, ve kterém se zjišťují důležité základní parametry : Hc, Br a |BHmax| (obr. 2) . Hc [A/m] - koercitivní intenzita je dána průsečíkem B = f(H) s osou H. Br [T] - remanentní indukce je dána průsečíkem smyčky B = f(H) s osou B. |BHmax| [J/m3] - energetický součin (též také maximální energetický součin) stanovíme jej jako maximum funkce BH = f(B) ve 2. kvadrantu, to znamená na demagnetovací části statické hysterézní smyčky. Zakresluje se do 1. kvadrantu jako |BH| = f(B) (obr. 2), případně do 2. kvadrantu. [1] V případě MMMM je stejně jako u MTM důležitým parametrem statická hysterézní smyčka, která se však zakresluje do všech 4. kvadrantů a jejími základními parametry jsou také Hc a Br.
9
Obrázek 1 : Stejnosměrné magnetování - hysterézní smyčka. Převzato z [1]
Obrázek 2 : Hyst. smyčka ve 2. kvadrantu s vykreslením |BH|. Převzato z [1]
10
2.2
Problematika měření MTM a její srovnání s MMM
MTM materiál je vždy otevřeným vzorkem, většinou tyčového tvaru s malým poměrem l/d nebo tvaru hranolku určité délky. Musíme jej tedy měřit jako otevřený vzorek, což je obtížnější, než u uzavřených vzorků. Chyby vznikají nehomogenitou magnetického pole. Lze jim předejít měřením ve jhu (obr. 3). [1] Základní parametry uvedené v předchozím bodu 2.1 musí být měřeny na hraniční (maximální) hysterézní smyčce, je tedy třeba dosáhnout nasycení materiálu. U MTM lze přibližně předpokládat, že takového nasycení dosáhneme při H > 5Hc. Toho lze při Hc současných MTM materiálů dosáhnout pouze v magnetovacím jhu (některé nelze nasytit ani ve jhu, musí se impulsně magnetovat ve vzduchové cívce – tyto speciální případy nebudou v programu ošetřeny). [1]
Obrázek 3 : Měření MTM ve jhu. Převzato z [2] Požadavky na magnetizační jho se řídí normou, patří mezi ně: Dosažení požadované intenzity mezi pólovými nástavci, zachycení mechanických sil (které mohou být značné, proto je zde požadavek na mechanickou pevnost jha), plynulá nastavitelnost vzdálenosti mezi pólovými nástavci. Plochy pólových nástavců musí být dokonale hladké a rovnoběžné. [1]
Indukce B se u MTM materálů při laboratorním měření zjišťuje výhradně integračně pomocí měřící cívky navinuté buď těsně na vzorek, nebo cívkou navinutou na tuhé kostřičce, nasunutou na vzorek (obr. 3, výstup z EI – 11
integrátoru). Integrační přístroje, ke kterým jsou připojeny
měřící cívky se
nazývají fluxmetry. Nepříjemnou vlastností u tohoto měření je Drift [μWb/min] . Pro názornost vysvětlení pojmu Driftu vyjdeme z analogového integrátoru. Pojmem Drift se v tomto případě rozumí chování výstupu integrátoru u2 při u1 = 0. Je způsoben integrací všech chybových napětí, proudů a šumů. Drift je jedním
z hlavních
kvalitativních
ukazatelů
fluxmetrů.
V této
práci
se
předpokládá použití kvalitního integrátoru s malým, konstantním driftem, který se projeví překřížením nebo neuzavřením smyčky a může být snadno početně korigován. Dále je zde problém s nenulovými počátečními podmínkami integrace, které v případě správného měření celé hraniční statické hysterézní smyčky určíme s využitím její symetrie KPP = (Br+ + Br- )/2, kde KPP je aditivní konstanta, Br+ maximální hodnota remanence při H= 0 a Br- mininální. Měření části smyčky není cílem této práce, v této práci se zabývám pouze zobrazením 2. kvadrantu hysterézní smyčky z bodů celé smyčky. Při softwarovém zpracování (dnes nejpoužívanější) se také vyskytuje problém s parazitními hysterézními smyčkami. Tyto smyčky jsou způsobeny tím, že na výkonovém zdroji proudu, kterým magnetujem vzorek, nejsme schopni nastavit nulu. Na výstupu zdroje se tedy nachází malý proud jedné, nebo druhé polarity. Po komutaci vzniknou na charakteristice v oblasti Br útvary podobné malým hysterézním smyčkám. Parazitní hysterézní smyčky protínají osu indukce B
a způsobují chybu čtení Br. Tento problém lze odstranit
odečtením maximální hodnoty Br. Dalším problémem je nutnost korekce toku vzduchem, neboť v důsledku malé permeability MTM není tok vzduchem cívky, která nedokonale obepíná vzorek nikdy zanedbatelný. I v případě těsného vinutí civky není-li průměr vodiče vůči průměru cívky zanedbatelný, musíme provádět korekci toku vzduchem. Korekci provedem podle vztahu : B‘ = BZ + μ0Hv(Sm-Sz)/Sz=Bz + ΔB, kde ΔB je chybovou složkou, Sm plocha měřící cívky [m2], Sz průřez vzorku [m2], Hv intenzita ve vzduchu (přibližně rovna intenzitě Hz ve vzorku), μ0 permeabilita vakua [H/m] - Jelikož μr relativní permeabilita
vzduchu je v
podstatě rovna 1, bude se magnetické pole projevovat ve vzduchu stejně, jako ve vakuu. 12
Indukce B se v případě MMMM zjišťuje stejným způsobem jako u MTM. Také výše zmíněné problémy, to jest: Drift integrátoru, nenulové počáteční podmínky integrace a parazitní hysterézní smyčky se vyskytují u MMMM. Korekce toku vduchem se u MMMM nemusí provádět z důvodu vysokého μr (relativní permeability) vzorku MMM.
Intenzitu H u MTM, tedy otevřeného vzorku, nelze určit s dostatečnou přesností z magnetovacího proudu. Při měření využijeme skutečnost, že tečná složka intenzity H se na rozhraní mění spojitě. Měřením tečné složky intenzity těsně na povrchu vzorku, určíme tedy intenzitu H magnetického pole ve vzorku. Hallova sonda je pro toto měření správnou volbou. Splňuje totiž podmínku měření těsně při povrchu vzorku a neovlivňuje měřený materiál. Důležitým parametrem Hallovy sondy je pracovní proud [mA] a citlivost [mV/T]. Nevýhodou těchto sond je teplotní závislost citlivosti (umíme částečně kompenzovat), offset a jeho teplotní drift a šum. Offset sondy je způsoben nehomogenitou polovodičového materiálu, ze kterého se sonda skládá a geometrickými chybami. Napájíme ji ze zdroje proudu. Přesnější přístroje používají střídavé napájení a synchronní detekci výstupního napětí. Střídavým napájením se potlačí šum a vyloučí chyba způsobená stejnosměrným offsetem sondy. Tyto přístroje se nazývají gaussmetry a připojuje se k nim zmíněná Hallova sonda. [1] Naopak v případě MMMM se intenzita H zjišťuje z magnetovacího proudu.
2.3
Analýza GUI a zdrojového kódu MMMM
Jak jsem již uvedl v úvodu, dostal jsem za úkol nejprve analyzovat program MMMM. Z výše uvedené problematiky MTM a její částečné shody s MMMM vyplývá, že bylo možné použítí určitých částí zdrojového kódu programu MMMM pro tvorbu mého programu na meření MTM. Dále zde byl požadavek od mého vedoucího bakalářské práce na částečnou kompatibilitu grafického uživatelského rozhraní, dále již jen GUI, s mým programem.
13
Po analýze výše zmíněného zdrojového kódu programu MMMM, jsem jmenovitě převzal tyto funkce:
double lesserAbs (double A, double B, int * index) - funkce vrátí menší z argumentů a index = 1 v případě, že A < B nebo v opačném případě index = 2. Funkce volána ve funkci Correct.
double interpole
(double x1, double y1, double x2, double y2,
double x0) - funkce jednoduché lineární interpolace, vrátí hodnotu v bodě x0 mezi body (x1, y1) a (x2, y2). Funkce volána ve funkci Correct.
void replace
(char * S, char c1, char c2)
- funkce najde a nahradí všechny znaky c1 znaky c2 v daném řetězci. Použita pro náhradu čárky za desetinnou tečku a naopak při čtení a zápisu do .csv souboru.
void derive
(tridata * D, char * C, int index)
- funkce získá tři double hodnoty z řádku .csv souboru.
void Correct
(tridata * D, tridata * H)
- funkce pro korekci driftu integrátoru a počátečních podmínek integrátoru. V této části bych rád citoval pana Milana Rozsívala z jeho práce MMMM : “Chyba,kterou vnáší do měření UB integrátor se dá aproximovat přímkou:
⎤ ⎡ V ΔU B = K D ⋅ t + K PP ⎢V , , s, V ⎥ ⎦ ⎣ s Kde ΔUB je absolutní chyba integrátoru, KD je drift integrátoru, t je čas, a KPP je počáteční podmínka integrátoru (v čase t = 0). Odstranění této chyby plyne z uzavřenosti hysterezní smyčky. Z postupu měření vyplývá, že bychom měli začít a skončit měření ve stejném bodě. Z důvodu změny odporu vinutí vlivem jeho ohřátí během měření nemusí tato podmínka být splněna a tak měření vyjde z určitého maxima UHmax1 a skončí v jiném bodě UHmax2, Hysterezní smyčku nemůžeme „spojit“ překrytím bodů UHmax1 a UHmax2, proto je 14
třeba vybrat menší z těchto hodnot UH0 a najít k ní odpovídající hodnotu UH00 lineární aproximací viz obr. 12 (obr. 4).
Obrázek 4 : Korekce driftu fluxmetru (integrátoru). Převzato z [7] Pro uzavřenou hysterezní křivku platí tento vztah (T je doba měření):
U H 0 = sgn (U H (0)) ⋅ min{U H max 1 = U H (0) , U H max 2 = U H (T )} U H 0 = U H (t1 ) = U H (t 2 ) ⇒ U B (t1 ) = U B (t 2 )
Toto ale platí jen za ideálních podmínek, ve skutečnosti je:
U B (t ) = U BS (t ) + K D ⋅ t + K PP U H (t ) = U H (t + T ) ∧ sgn (U H′ (t )) = sgn (U H′ (t + T )) ⇒
⇒ U BS (t ) + K D ⋅ t + K PP = U B (t + T ) + K D ⋅ t + K D ⋅ T + K PP
Kde UBS je správné napětí (po korekci). Jinými slovy, najdu dvě hodnoty UB(t1) a po oběhu hysterezní křivky UB(t2) při hodnotách UH(t1) = UH(t2) v takovém čase t1 a t2, že platí UH(t1) = min{UH(0), UH(T)} . Konstantu KD vypočtu jako směrnici aditivní přímky k funkci UB = f(t):
KD =
U B (t 2 ) − U B (t1 ) t 2 − t1
Potom odečtu přímku KD⋅(t – t1) od každého bodu UB(t):
U BC (t ) = U B (t ) − K D ⋅ (t − t1 ); ∀t
15
Po odečtení chyby způsobené driftem integrátoru je hysterezní smyčka již uzavřenou křivkou, ale má stále jistý ofset v podobě počáteční podmínky integrátoru. Tuto aditivní chybu odstraním vycentrováním bodu mezi UBCr+ a UBCr- do nuly. Najdu největší hodnotu UBC pro UH = 0 a nejmenší hodnotu UBC pro UH = 0, čímž odstraním vliv parazitních hysterezních smyček. Hledanou aditivní konstantu vypočtu jako jejich algebraický průměr:
U BCr + = max{U BC (t );U H (t ) = 0}
U BCr − = min{U BC (t );U H (t ) = 0} K PP =
U BCr + + U BCr − 2
Korigovaná data jsou zkrácena o nadbytečnou část, která nepatří do uzavřené hysterezní smyčky. “[7]
void findCrossPoints (const tridata * D, crossPoints * C) - funkce používá funkci interpole k nalezení Brmax a Brmin, z něhož následně spočítá aritmetický průměr z absolutní hodnoty Brmax a Brmin a výsledkem je Br. Stejná operace je provedena pro získání Hc. Maxima a minima se berou kvůli eliminaci parazitních hysterézních smyček .
int CVICALLBACK COMBOWhatH_Choose
(int panel, int
control, int event, void *callbackData, int eventData1, int eventData2) - funkce pro uživatelův výběr (událost), který multimetr čte H. Dvojklikem na číslo pod nápisem Adresa multimetru měřícího H v modrém poli se zvolí příslušná adresa přístroje, který čte H.
int CVICALLBACK COMBOWhatB_Choose (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
- funkce podobná funkci CVICALLBACK COMBOWhatH_Choose, avšak uživatel v tomto případě volí, který přístroj čte B. 16
Pro zachování částečné kompatibility mého programu s GUI programu MMMM, jsem převzal následující grafické prvky:
GrafXY - okno pro vykreslení korigované a nekorigované hysterézní smyčky.
Osciloskop - okno pro vykreslení korigovaných a nekorigovaných dat v závislosti na čase Excel I/0 - tabulka pro vypsání korigovaných a nekorigovaných dat
Použití vícevláknového zpracování: Program MMMM je rozdělen do dvou vláken a sice: main a measure. Vlákno main (každá C aplikace má alespoň jedno vlákno a to vždy main) ovláda GUI (Graphical User Interface - Grafické uživatelské rozhraní) a vlákno measure provádí nastávení multimetrů, odměření a zaznamenání napětí. Tuto koncepci jsem v programu zachoval a to z důvodu, jenž uvádí pan Milan Rozsíval: to jest, že nedochází k nečinnosti GUI v případě dlouhého odměru. [7] Ten je způsoben náročnějšími požadavky na měření (větší přesnost: delší doba integrace A/D – analogově číslicového převodníku multimetru). Dále také z důvodu, že modernější PC (notebooky, laptopy) již dnes disponují dvoujádrovými mikroprocesory, což znamená v případě aplikace se dvěma vlákny, že nedochází jen k multitaskingu (na jednojádrovém mikroprocesoru je multitasking prvek, jenž zajišťuje přepínání mezi jednotlivými programy potažmo vlákny, aby docházelo ke zdání paralelního zpracování programu či vlákna), ale opravdu
paralelnímu
zpracování
jednotlivých
k podstatnému urychlení programu (aplikace).
17
vláken.
Dochází
tedy
2.4
Schéma měřicího systému a princip měření MTM
Schéma měřicího systému:
Obrázek 5 : Blokové schéma měřicího systému Princip měření MTM:
Měření statické hysterézní smyčky vzorku MTM se provádí ve jhu, které je buzeno výkonovým stejnosměrný zdrojem proudu - MN 40V - 40A (výrobce mesit) a kde komutace je zajištěna ručně komutátorem připojeným za tento zdroj. Napětí UH je úměrné intenzitě H, které je měřeno Hallovou sondou LakeShore (Transverse probe)
připojenou na gaussmetr - LakeShore 450.
Napětí UB je úměrné indukci B, jenž je měřena integračně pomocí měřící cívky připojené na fluxmetr - LakeShore 480. Fluxmetr i gaussmetr je možné vzdáleně ovládat za pomoci PC (laptopu) a měřit s nimi přes HP-IB sběrnic, důležitým požadavkem pro přesné měření je však simultánní odečet dat, kterého nejsem schopen s těmito přístroji dosáhnout, neboť nepodporují příkazy nutné pro tento simultánní odečet - skupinové trigrování přístrojů. Jak 18
gaussmetr tak i fluxmetr však disponují na zadním panelu přístroje dvěma analogovými výstupy a to “Monitor“ a “Correct“. “Monitor“, jinak také real - time (v reálném čase) analogový výstup přímo kopíruje analogové hodnoty měřené veličiny. “Correct“ není real - time výstupem, zobrazuje v analogové podobě data (za pomoci D/A převodníku), která se přivádí na HP-IB sběrnici [3,4]. Pro měření je tedy důležitý jak u gaussmetru, tak u fluxmetru výstup “Monitor“, simultánní odečet napětí UH a UB z výstupů “Monitor“ těchto dvou přístrojů je proveden za pomoci multimetrů - HP 34401A (někdy též Agilent 34401A, stále se však jedná o HP) [5]. Tyto multimetry umožňují také komunikaci přes HP- IB (IEEE 488.2) sběrnici a co je podstatné simultánní odečet napětí UH a UB, podporují tedy skupinové trigrování přístrojů. Pro odečet napětí použiji dva tyto multimetry připojené na HP - IB propojené s PC (laptopem). Osobní PC ani laptopy běžně nedisponují HP - IB konektorem, u všech se však dnes nachází USB konektor. Použiji tedy převodník HP- IB – USB (HS – High Speed –vysoko rychlostní ) od společnosti National Instruments. Pro ilustraci uvádím fotografii fluxmetru, gaussmetru, multimetrů HP a PC, tedy mé pracoviště
se spuštěnou aplikací (obr. 6). Dále fotografii jha
(obr.7).
Obrázek 6 : Fotografie pracoviště 19
Obrázek 7 : Měřící jho se vzorkem, měřící cívkou a Hallovou sondou
Veškeré další úkony spojené s korekcí nežádoucích jevů, nastavení multimetrů, řízení odměru multimetrů, zpracování dat, přepočet napětí UH a UB na intenzitu H a indukci B jednotlivých bodů statické hysterezní smyčky a následné zobrazení hysterezní smyčky se základními parametry MTM je provedeno softwarově v mé aplikaci MTMProgram. Dále bych rád uvedl podrobnější popis některých přístrojů. To jest: gaussmetr - LakeShore 450, fluxmetr - LakeShore 480, multimetr - HP 34401A, převodník HP- IB – USB (HS).
Gaussmetr - LakeShore 450: Rozlišení displeje až na 5 3/4 digitů, automatický rozsah, rozsah závislý na použitém typu Hallovy sondy: High Stability Probe (HST Vysoce stabilní sonda) - ±30 mT až ±30 T, High Sensitivity Probe (HSE Vysoce citlivá sonda) ±3 mT až ±3 T, Ultra High Sensitivity Probe (UHS Extrémně vysoce citlivá
20
sonda) - ±30 μT až ±3 mT, individuální linearizace Hallových sond, teplotní kompenzace Hallových sond, jednotky Gauss nebo Tesla, rozhrani: paralelní HP - IB (IEEE 488), sériové (RS - 232C), analogové napěťové výstupy: Correct - chyba ±0.1%, výstupní napětí
±3 volty nebo ±10 voltů na plné měřítko
zvoleného rozsahu, Monitor - chyba v závislosti na zvolené sondě, výstupní napětí ±3 volty na plné měřítko zvoleného rozsahu. [3]
Fluxmetr - LakeShore 480: DC (stejnosměrné) rozlišení displeje až na 5 3/4 digitů, DC (stejnosměrný) rozsah v závislosti na vstupním odporu R [kΩ]: 100 kΩ − 30 mVs nebo 300mVs, 10 kΩ − 3 mVs nebo 30 mVs, DC (stejnosměrný) Drift ±1 μVs (μWb)/min, rozhrani: paralelní HP - IB (IEEE 488), sériové (RS - 232C), analogové napěťové výstupy: “Correct“ - chyba ± 2,5 mV, výstupní napětí ±10 voltů na plné měřítko zvoleného rozsahu, “Monitor“ - chyba ±1% čtení ±10 mV, výstupní napětí ±3 volty na plné měřítko zvoleného rozsahu. [4]
Multimetr – HP 34401A: Maximální rozlišení displeje na 6
½
digitů. DC (stejnosměrné) napěťové
rozsahy: 100 mV, 1 V, 10 V,100 V,1000 V, rozhrani: paralelní HP - IB (IEEE 488), sériové (RS - 232C). V mém měřícím systému jsou multimetry připojeny na HP - IB sběrnici, před samotným měřením s přístroji je třeba nastavit na každém rozdílnou adresu a to v rozsahu 1 - 30 (pokuď tak již někdo předem neučinil). Standartní nastavená adresa při zakoupení je 22. Výběr rozhraní není třeba provádět, v interní paměti je nastavena defaultně HP - IB sběrnice. [5] Převodník HP- IB – USB (HS): Kontroluje až 14 HP - IB zařízení. Kompletně kompatibilní se standardem IEEE 488.2. Napájen z USB (nepotřebuje externí zdroj). Podporuje High speed (vysoko rychlostní) USB. Maximalní přenosová rychlost 7.2 MB/s. [6]
21
3
MTMProgram
3.1
Volba vývojového prostředí a programovacího jazyka
Za vývojové prostředí byl zvolen LabWindows/CVI (CVI - C for Virtual Instrumentation - C pro virtuální přístrojové vybavení) verze 7.1.1. Jak již vyplývá z názvu, programovacím jazykem je C. Jazyk C je nízkoúrovňovým programovacím jazykem optimálním pro systémové programování, s plnou podporou ukazatelů a možností dynamické alokace proměnných. C je jazykem kompilovaným a ne interpretovaným, je tedy optimální pro “real - time” (v reálném čase) řízení. S prostředím LabWindows tvoří mocný nástroj pro vývoj měřícího softwaru. LabWindows/CVI verze 7.1.1 mi byla poskytnuta po dobu vývoje tohoto programu. Výhodou je, že práce MMMM [7], ze které jsem převzal některé funkce a grafické prvky (viz. 2.3) je napsána také v LabWindows/CVI.
3.2
GUI a ovládání programu 3.2.1 Rozbor GUI a ovládání programu
Po spuštění aplikace MTMProgram, dále již jen program, se nejdříve ukáže tzv. “splash screen“ (úvodní obrazovka) s informacemi o verzi programu, jeho tvůrci a kontakt na tohoto tvůrce. Současně se zobrazením “splash screenu“ dochází k načítání grafických prvků do paměti PC. Jakmile dojde k načtení těchto prvků do paměti, zobrazí se hlavní okno programu (obr. 8).
Obrázek 8 : Výřez hlavního okna programu po spuštění 22
Zároveň s hlavním oknem programu se zobrazí také upozornění k vynulování offsetu Hallovy sondy na gaussmetru (obr. 9). Program je koncipován tak, aby za každých okolností směroval uživatele. To znamená, že v případě problémů, nedovolených událostí nebo jen informativně, zobrazuje upozornění a varování uprostřed pracovní plochy programu. Tato upozornění a varování zmizí po stisknutí klávesy ENTER nebo po kliknutí levým tlačítkem myši na ok. Dokuď však uživatel neprovede jednu z těchto akcí, je mu zabráněno v dalším používání programu. Toto opatření je zde proto, aby uživatel vzal upozornění nebo varování na vědomí a nemohlo dojít k jeho přehlédnutí.
Obrázek 9 : Upozornění
Okno programu obsahuje kromě pracovní plochy, kde se zobrazuje GrafXY, Osciloskop a tabulka Excel I/O, ovládací nabídku v horní liště, dále již jen Lišta nabídka – to jest tlačítka Nabídka, Pohled a Pomoc (obr. 8). Pod touto ovládací nabídkou se nachází druhá část, dále již jen Lišta okno pod nabídkou a to jak ovládací, tak informační, která je oddělena modrou linkou od pracovní plochy. Po spuštění obsahuje prvky - Adresa multimetru měřícího H, Adresa multimetru měřícího B a indikátory: Ind. přip. správných přís. na sběrnici a Indikace běhu měření. Na levé straně se nacházejí další 4 ovládací tlačítka, která však zatím nejsou viditelná (obr. 8).
Lišta nabídka obsahuje téměř všechna potřebná tlačítka k ovládání programu s výjimkou speciálních tlačítek, které se nacházejí v Liště okno pod nabídkou. Prvky Nabídka a Pohled obsahují tlačítka na obr. 10. Prvek Nabídka obsahuje tlačítka: Uložení, Načtení, Připojení přístrojů, Nastavení parametrů, Start, Stop, Korekce, Tisk, Nové měření, Ukončit. Prvek Pohled obsahuje tlačítka: Graf, Tabulka, Graf v čase, Všechno. V Liště nabídka se zakazují 23
(nefunkční) a povolují (funkční) jednotlivá tlačítka podle toho, jaký krok je právě přípustný. To je patrné na obr. 10, který odráží stav po spuštění.
Obrázek 10 : Lišta nabídka po spuštění programu
Lišta okno pod nabídkou je ovládací a zobrazovací nabídka, která obsahuje dvě tlačítka pro vykreslení a vypsání dat a to Vykreslit surová data a Vykreslit závislost B = f(H). Tato dvě tlačítka naplní tabulku Excel I/O a vykreslí data do GrafuXY a Osciloskopu. Dále obsahuje duplikátní tlačítka Start a Stop, která jsou zde kvůli snadnějšímu ovládání, aby uživatel nemusel vstupovat při měření do Lišty nabídka. Zmíněná tlačítka se zobrazí nebo mizí v závislosti podle toho, jaký krok je právě přípustný. Nachází se zde také pole Adresa multimetru měřícího H a Adresa multimetru měřícího B. Tato pole po stisknutí tlačítka Připojení přístrojů vypíší v každém políčku dvě adresy dvou multimetrů HP 34401A. Dvojitým kliknutím na příslušnou adresu zvolíme, který přístroj bude měřit H a B. Nakonec výčtu ještě obsahuje Ind. přip. správných přís. na sběrnici (Indikace připojení správných přístrojů na sběrnici), svítící zeleně, jsouli připojeny správné přístroje HP 34401A a Indikace běhu měření, jenž se rozsvítí červeně po stiknutí tlačitka Start a zhasne po stisknutí tlačítka Stop. Pozn.: obr. 11, zobrazuje stav, který nemůže nastat, to jest všechna tlačítka viditelná najednou (je zde jen pro lepší pochopení problematiky).
24
Obrázek 11 : Lišta okno pod nabídkou zobrazující stav, který nemůže nastat
Dále bych rád rozebral jednotlivá tlačítka z Lišty nabídka a jejich vliv na ovládání a funkce programu. Tlačítka budu rozebírat v pořadí, v jakém by měl uživatel postupovat při prácí s programem po jeho spuštění, za předpokladu připojení přístrojů tak, jak je uvedeno v kapitole 2.4, nastavení různých adres na obou multimetrech HP 34401A, vložení vzorku MTM do jha a připojení měřící cívky k fluxmetru a Hallovy sondy ke gaussmetru.
Nejprve bych rád uvedl tlačítka důležitá pro samotné měření MTM. Tato tlačítka se nachází v nabídce Nabídka a jsou tučně zvýrazněna, neboť se jedná o důležitá tlačítka. Při spuštění programu je uživateli přístupné z této nabídky jen Připojení přístrojů. Po stisknutí tohoto tlačítka se v Liště okno pod nabídkou zobrazí v polích Adresa multimetru měřícího H a Adresa multimetru měřícího B adresy obou dvou multimetrů HP 34401A. Dvojitým kliknutím na příslušnou adresu zvolíme, který přístroj bude měřit intenzitu H a indukci B (pokuď tak neučiníme, ponechá se defaultní nastavení), zároveň se na přístroji s příslušnou adresou ukáže text co měří. Zeleně se rozsvítí kontrolka Ind. přip. správných přís. na sběrnici (Indikace připojení správných přístrojů na sběrnici). Nejsou-li tyto multimetry připojeny nebo jsou-li připojeny jiné přístroje, vypíše se varovné hlášení, je nutno připojit správné přístroje a opakovat tuto akci. Po nastavení, který multimetr bude měřit H a který B, se nám uvolní tlačítko Nastavení parametrů.
Po stisknutí tohoto tlačítka se objeví okno s nastavením parametrů systému (obr. 12). Pro správné naměření napětí UH a UB, přepočet napětí UH na intenzitu H a UB na indukci B a následnou korekci na tok vzduchem, je
25
třeba, aby uživatel zadal tato data správně. Nachází se zde 9 hodnot, které lze rozdělit do 3 kategorií a jedno textové pole. První kategorií jsou parametry vzorku MTM, to jest: Sm - udává plochu měřící cívky v cm2, Sz - průřez vzorku MTM v cm2 a N - počet závitů měřicí cívky. Druhou kategorií je konstanta gaussmetru KG a rozsah fluxmetru Φmax [mVs], ze kterého se spočítá konstanta fluxmetru KF v programu. To jest: KF = Φmax/UMONITOR, kde
UMONITOR je maximální napětí na analogovém výstupu
fluxmetru “Monitor“ , které je pro všechny rozsahy fluxmetru 3 V.
Třetí kategorií je nastavení multimetrů HP 34401A. To jest: napětový rozsah multimetru měřícího H UH max [V], napětový rozsah multimetru měřícího B UB max [V], rozlišení obou multimetrů Vres [digit], zpoždění mezi dvěma odměry ΔT [s]: Nastaví-li uživatel tuto hodnotu na 0, pak je odměr proveden nejrychleji jak to multimetry HP34401A umí. Rychlost měření je závislá na nastaveném rozsahu a rozlišení v digitech. S rostoucím rozlišením tato rychlost klesá: 4 digity – 32,37 [ms], 5 digitů – 34,98 [ms], 6 digitů – 232,43 [ms]. [7]
Poslední položkou je textové pole Popis vzorku, do kterého musí uživatel vložit minimálně 3 znaky. Maximum znaků je omezeno na 30 znaků. Všechna políčka obsahují defaultní přednastavené hodnoty. Po nastavení parametrů stiskneme modré tlačítko POTVRDIT, okno s nastavením parametrů poté zmizí.
Obrázek 12 : Okno pro nastavení parametrů systému 26
V tomto okamžiku se nám zpřístupňilo tlačítko Start v Liště nabídka. Kvůli snadnějšímu přístupu se nám také zobrazilo duplikátní tlačítko Start (zelené) v Liště okno pod nabídkou. Po stisknutí jednoho z těchto tlačítek můžeme začít měřit a zároveň se nám zobrazí tlačítko Stop (naopak zmizí tlačítko Start), taktéž ve dvojím provedení (červené). Měření není časově omezeno programem, záleží jen na uživateli, jak dlouho bude měřit. Měření je integrační, což znamená, že by se nemělo zbytečně prodlužovat, předpokládá se, že uživatel je alespoň poučená osoba. Po stisknutí tačítka Start také dojde k rozsvícení červené kontrolky - Indikace běhu měření v Liště okno pod nabídkou. Stisknutím tlačítka Stop měření ukončíme. Červená kontrolka běhu zhasne. Zobrazí se nám tlačítko Vykreslit surová data v Liště okno pod nabídkou a zároveň se zpřístupní tlačítko Korekce v Liště nabídka. Chceme-li korigovaná data, musíme stisknout tlačítko Korekce. Po stisknutí tohoto tlačítka dojde ke korekci naměřených dat na integrační drift a počáteční podmínky integrátoru, zároveň se přepočítá napětí UH na intenzitu H a UB na indukci B a následně se provede korekce na tok vzduchem u indukce B. V GrafuXY se zobrazí hodnoty Hc, Br a |BHmax|. V reakci na tento krok se nám zpřístupní tlačítko Vykreslit závislost B = f(H) v Liště okno pod nabídkou. Výše zmíněné tlačítko nám po navolení příslušného prvku (GrafuXY, tabulky-Excel I/0, Osciloskopu)
do
pracovní plochy, umožní tyto data vypsat (tabulka-Excel I/0), nebo vykreslit (GrafXY,Osciloskop).
Dále bych rád uvedl tlačítka pro zobrazení již zmíněných grafických prvků do pracovní plochy, to jest: GrafXY, Osciloskop a tabulka Excel I/O. Toto se provádí za pomoci tlačítek z nabídky Pohled. Tlačítko Graf: Toto tlačítko je jako jediné z nabídky Pohled zvýrazněné tučně (důležité tlačítko). Po stisknutí se označí odškrtnutím a zobrazí na pracovní ploše GrafXY. Po opětovném stisknutí GrafXY zmizí a označení také. Pokud je k dispozici Vykreslit surová data v Liště okno pod nabídkou, pak po jeho stisknutí, když je GrafXY odškrtnut (tedy zobrazen) se do něj vykreslí surová data. Pokuď je k dispozici Vykreslit závislost B=f(H) (došlo ke stisknutí tlačítka Korekce), pak po jeho stisknutí jsou vykreslena do GrafuXY korigovaná a přepočítaná data, tedy závislost B = f(H) a to do všech 4 kvadrantů a zároveň 27
jsou vyplněny hodnoty Br, Hc a |BHmax|, tedy stěžejní hodnoty našeho měření. Současně jsou vypsány i parametry systému. Dále se v pravém dolním rohu zobrazí dvě tlačítka a to OTOČIT pro zrcadlové otočení hysterézní smyčky a tlačítko 2.kvadrant pro přiblížení tohoto kvadrantu. Kromě přiblížení se po stisku tohoto tlačítka vykreslí na grafu hysterezní smyčky diskretní naměřené body. Zároveň s přiblížením 2.kvadrantu se v 1.kvadrantu vykreslí |BH|=f(B) a příslušné body. Zobrazení bodů umožňuje obsluze kontrolovat, zda byl v oblasti BHmax odměřen dostatek bodů (obr. 13).
Obrázek 13 : Hysterézní smyčka ve 2.kvadrantu společně s vykreslením |BH|=f(B) do 1.kvadrantu V nabídce Pohled jsou ještě tlačítka Tabulka, Graf v čase a Všechno. Tlačítko Tabulka zobrazí tabulku Excel I/O na stejném principu jako u GrafXY. 28
Pokud uživatel již vykreslil hysterézní smyčku do GrafuXY, pak i v tabulce jsou vypsána příslušná data, která odpovídají nekorigovaným nebo korigovaným a přepočítaným datům. Stejná pravidla platí pro Osciloskop, který zobrazí nekorigovaná data v závislosti na čase nebo korigovaná a přepočítaná data v závislosti na čase. Tlačítko Všechno je speciální tlačítko, které po stisknutí zablokuje výše zmíněná tři tlačítka a zobrazí všechny tři grafické prvky: GrafXY, tabulku Excel I/O a Osciloskop zároveň na pracovní plochu. Velikost jednotlivých grafických prvků se upraví, aby se na pracovní plochu vešly. To znamená, že pro větší přehlednost je v tomto případě lepší program maximalizovat. Na obr. 14 je vidět situace po stisknutí tlačítka Všechno s celou hysterézní smyčkou, to jest ještě před stiskem tlačítka 2.kvadrant.
Obrázek 14 : Pracovní plocha po stisknutí tlačítka Všechno s celou hysterézní smyčkou
29
V nabídce Nabídka se úplně nahoře nachází tlačítka Uložení a Načtení. Tato tlačítka slouží pro načítání a ukládání naměřených dat společně s parametry ze nebo do souboru s příponou .csv, což je nekódovaný formát. Jednotlivá data v tomto formátu jsou oddělena středníkem a řádek znakem „\n”. Při spuštění programu je uživateli přístupné z této nabídky jen Načtení dat z .csv, neboť ještě nenaměřil žádná svá data. Pokuď uživatel nechce měřit a rozhodne se jen načíst data z minulých měření, která si uložil společně s parametry do příslušného .csv souboru, pak stiskne toto tlačítko a objeví se mu uprostřed obrazovky nabídka k Načtení dat z .csv (obr. 15). Z této nabídky vybere soubor a klikne na Load (Načíst). V tomto okamžiku se do programu načetla data a parametry příslušného MTM. V okně pod touto nabídkou se zobrazí tlačítko Vykreslit surová data. Další postup je stejný jako po naměření dat. Tlačítko Uložení se nám zpřístupní po naměření nebo načtení dat. Postup ukládání dat je obdobný jako při načítání dat, po stisknutí tlačítka Uložení se musí napsat název souboru a místo Load dát Save (Uložit). Není umožněno přepisovat staré soubory z důvodu bezpečnosti
(ochrana proti náhodnému
přepsání). Příklad uložených dat a parametrů do souboru s příponou .csv zobrazený v aplikaci Microsoft Excel je na obr. 16.
Obrázek 15 : Načtení dat a parametrů ze souboru s příponou .csv
30
Obrázek 16 : Příklad nekorigovaných, korigovaných a přepočítaných dat společně s parametry, které jsou uloženy do .csv souboru a zobrazeny v aplikaci Microsoft Excel
Po uložení dat a parametrů do .csv je třeba změnit formát dat v buňkách .csv souboru (jen u nekorigovaných dat) z „obecného" na „číslo", aby nedocházelo k chybnému čtení nuly. Program dále umožňuje tisk GrafuXY společně s parametry systému a základními charakteristickými parametry MTM, tedy Br, Hc a |BHmax|. Okno s nastavením parametrů tisku se vyvolá po stisknutí tlačítka Tisk, toto tlačítko je přístupné po vykreslení hysterezní smyčky do GrafuXY a vypsání všech parametrů. Ve výše zmíněném okně můžeme nastavit tiskárnu, nebo tisk do souboru, rozměry tisknuté oblasti, počet kopií a jiné běžné parametry tisku.
31
Posledními dvěmi tlačítky z nabídky Nabídka je Nové měření a Ukončit. Jak napovídá již sám název tlačítko Nové měření použijeme v případě, že jsme naměřili data a z nějakého důvodu s nimi nejsme spokojeni, nebo jsme je již uložili a přejeme si měřit nový vzorek MTM. Stiskem tlačítka Nové měření uvedeme program do původního stavu po spuštění programu. Tlačítko Ukončit uzavře program. Před uzavřením se však program nejprve zeptá, zda-li si je uživatel opravdu jist ukončením programu. Pokuď stiskne uživatel tlačítko Ano v tomto upozornění, pak se program ukončí. V opačném případě při stisknutí tlačítka Ne, může uživatel dále pokračovat v práci s programem. 3.2.2 Řešení orientované na uživatele 3.2.2.1 Pomoc uživateli v nesnázích
V předchozí kapitole jsem záměrně nezmínil nabídku Pomoc z Lišty nabídka. V této nabídce se nenacházejí tlačítka pro ovládání programu, ale pro pomoc uživateli v nesnázích, to jest když si neví rady s programem. Nabídka Pomoc obsahuje dvě tlačítka a to Pomoc a O programu. Po stisku tlačítka Pomoc se zobrazí standartní windows help (pomoc), tak jak jsou na něj uživatelé zvyklí z tohoto operačního systému (obr. 17). Při tvorbě tohoto helpu (pomoci) jsem se držel nepsaného pravidla, že program je jen tak dobrý, jak je dobrá jeho dokumentace, proto jsou zde všechny kroky s programem rozebrány velmi podrobně. Nejprve se zobrazí obsah nápovědy a je jen na uživateli aby zvolil část, která jej zajímá. Stiskem tlačítka O programu se zobrazí úvodní “splash screen”, ve kterém se nachází informace o verzi programu a jeho tvůrci společně s kontaktem na něj. Stiskem tlačítka QUIT se tento “splash screen” zavře.
32
Obrázek 17 : Nápověda pro MTMProgram
3.2.3 Adaptibilita GUI
Program je napsán tak, aby přizpůsobil své GUI počítači na němž je spuštěn. To znamená, že program je schopen vhodně přizpůsobit svou velikost vůči zjištěnému rozlišení monitoru. Existuje velké množství monitorů s různým rozlišením a na každém monitoru s OS Windows, lze ještě navíc nastavit speciální rozlišení, jež neodpovídá standartnímu rozlišení monitoru. Po spuštění, se tedy v případě rozlišení, které je menší než 1280x800, pro které je program navržen, objeví upozornění. Upozornění informuje uživatele o jeho současném rozlišení, po stisknutí tlačítka ok dojde k přizpůsobení velikosti programu a zobrazí se hlavní okno programu.
3.3
Jednotky a platná místa
Základní parametry MTM to jest Hc, Br a |BHmax|, které se vypisují do GrafuXY jsou zaokrouhleny v případě: Hc v kA/m na 2 platná desetinná místa, Br v T na 3 platná desetinná místa, |BHmax| v kJ/m3 na 3 platná desetinná místa. Hodnoty v tabulce Excel I/0 jsou taktéž zaokrouhleny: H v kA/m na 2 platná desetinná místa a B v T na 3 platná desetinná místa.
33
3.4
Rozbor programu 3.4.1 Dynamická struktura programu
Program je napsán tak, aby byl šetrný k paměťovým prostředkům, které mu přiděluje operační systém. To znamená, že při spuštění programu, nedochází u struktur, ve kterých se uchovávají jednotlivá naměřená, korigovaná a přepočítaná data hysterézní smyčky, ke statické alokaci těchto struktur (předem není zabrána pamět dané velikosti). Program za běhu žádá o pamět, pokuď tuto paměť již nepotřebuje, znovu ji uvolní. Tomuto se říká dynamická alokace paměti. Toto řešení je zvoleno také z důvodu, že není dopředu znám počet naměřených dat. Počet dat je závislý na uživateli, na tom jak dlouho měří, jaké má nastavené parametry v okně Parametry u multimetrů HP 34401A, to jest: zpoždění mezi dvěma odměry ΔT [s] a s jakou přesností měří, rozlišení obou multimetrů Vres [digit]. Je-li tedy počet dat malý, nedochází k zabrání zbytečného místa v paměti, nebo naopak k vyhrazení příliš malého místa v paměti. Dynamická alokace se v programu provádí za pomoci funkcí malloc a free, jenž se nacházi v hlavičkovém souboru <stdlib.h>. Stdlib je knihovna standartu ANSI C (který by měl umožňovat přenositelnost zdrojových souborů na jiné platformy - jiné typy operační systémů).
3.4.2 Schéma programu a jeho funkce
Srdcem programu je hlavní funkce main (hlavní vlákno), která obsluhuje GUI a vykonává CVICALLBACK funkce. Principielní schéma programu a systému obsluhy událostí pomocí funkce main je na obr. 18.
34
Jaká událost a kde k ní došlo
Událost Funkce main() Hlavní vlákno
GUI Graf. uživ. rozhrání
Zásah uživatele Událost
Reakce na událost : Vykonání CVICALLBACK funkce a její části v závislosti na typu události, to jest zda-li uživatel stisknul levé nebo pravé tlačítko myši a jiné .......
Zvláštní případ reakce na událost: Kliknutí na tlačítko start spuštění CVICALLBACK funkce measureThreadFunction, to znamená spušťení vlákna measure, nebo stop nastavení globální proměnné RUN=0.Tedy ukončení vlákna measure.
Funkce zavolané v CVICALLBACK funkci : korekční funkce, výpočetní funkce a pomocné funkce.
Obrázek 18 : Principielní schéma programu a systému obsluhy událostí
Funkce programu: Z výše uvedeného principielního schéma programu vyplíva, že program sestává z GUI a funkcí: hlavní funkce main (), CVICALLBACK funkcí a funkcí volaných v těchto CVICALLBACK funkcích. V této kapitole bych rád všechny tyto funkce stručně popsal, vzhledem k rozsahu tohoto textu, není možné rozebírat přímo zdrojový kód jednotlivých funkcí (zdrojový kód je rozsáhlý). V případě podrobnějšího zájmu o tento kód bych rád odkázal na zdrojový kód přiložený k této práci, který je okomentován v českém a anglickém jazyce. V této kapitole se budu také odkazovat na funkce, které jsem převzal z práce MMMM a již dříve rozebral viz. 2.3. Hlavní funkce int main(void) – Po spuštění programu dojde k načtení této funkce, to jest : k vytvoření dynamických struktur, které jsou v programu
35
využity pro naměřená, korigovaná a přepočítaná data. Dále nastavení počatečních hodnot proměnných, které vznikly ještě před samotným spuštěním funkce main. Načtení potřebných GUI prvků a uložení handlerů (rukojetí) k pozdější manipulaci s těmito prvky. Nastavení viditelnosti a platnosti (povolení nebo zakázání GUI prvků) těchto GUI prvků, to jest tlačítek hlavní nabídky v Liště nabídka, tlačítek nabídky v Liště okno pod nabídkou, GrafuXY, Osciloskopu a tabulky – Excel I\0. Zjištění rozlišení monitoru na kterém běží program a následné nastavení GUI prvků v závislosti na tomto rozlišení. Nastavení GUI prvků se provádí za pomoci koeficientů: koeficientW a koeficientH, těmito koeficienty se dělí standartní šířka GUI prvků (koeficientW) a standartní výška GUI prvků (koeficientH). Pomocí těchto koeficientů se také nastaví počáteční pozice GUI prvků na obrazovce.
Funkce volané ve funkcích CVICALLBACK:
void addrToHex(int c, char *Hex) - funkce převede dekadické číslo 0-255 na hexadecimální string. Převod je uskutečněn za pomoci funkce sprintf, která je funkcí knihovny s hlavičkou <stdio.h>. Tato knihovna je standardem ANSI C.
void Hysterese(measureParameters * C, tridata * D, tridata * H) - funkce převede naměřená a korigovaná data na intenzitu H a indukci B. Přepočítá tedy napětí UH na intenzitu H a UB na indukci B za pomoci parametrů, které uživatel zadal do okna Parametry. Přepočet je proveden dle následujícíh vztahů:
H=
KG ⋅ U H μo
[A/m; T/V;V; H/m]
Kde KG je konstanta gaussmetru a μ0 permeabilita vakua (fyzikální konstanta). μ0 je přibližně rovno μ vzduchu.
36
B=
KF ⋅ U B SZ ⋅ N
[T; s;V; m ; −] 2
Kde KF je konstanta fluxmetru, SZ průřez vzorku MTM, N počet závitů měřící cívky. KF se spočítá z následujícího vztahu:
KF =
φ max U MONITOR
[s; V ⋅ s; V ]
Kde Φmax je rozsah fluxmetru a UMONITOR je maximální napětí na analogovém výstupu fluxmetru “Monitor“ , které je pro všechny rozsahy fluxmetru 3 V. Po přepočtu a uložení dat do dynamické struktury se provede korekce na tok vzduchem u indukce B dle vztahu:
BZ = B´−ΔB
[T; T; T ]
Kde BZ je indukce po korekci a ΔΒ chybovou složkou. ΔB = μ 0 ⋅ H V ⋅ (S m − S Z ) / S Z [T; H/m; A/m; −]
Kde Sm je plocha měřící cívky, Sz průřez vzorku, Hv intenzita ve vzduchu (přibližně rovna intenzitě H ve vzorku). Korekce na tok vzduchem se tedy provádí v případě kladné hodnoty indukce B´ odečtením absolutní hodnoty ΔΒ od této indukce a v případě záporné hodnoty indukce B´ přičtením absolutní hodnoty ΔΒ k této indukci.
double BHmax() - funkce najde diskrétní body hysterézní smyčky ve 2. kvadrantu. Pro tyto body alokuje (zabere) dynamická pole, tedy pro intenzitu H a indukci B jednotlivých bodů. Do těchto polí překopíruje hodnoty intenzity H a indukce B. Dále alokuje dvě dynamická pole pro uložení výsledků součinu |BH| = |B*H|. Jedno z těchto polí je využito pro pozdější vykreslení |BH| = f(B) do 37
1.kvadrantu. Do druhého pole se uloží setříděné hodnoty |BH| od nejmenšího po největší. Výsledná hodnota |BHmax| je pak posledním prvkem tohoto pole. Pole je setříděno za pomoci Bublinkového algoritmu.
void triplderive(measureParameters * D, char * C) - funkce vyčte parametry z .csv souboru a uloží je do struktury programu. Zároveň vypíše tyto parametry do okna Parametry.
void zapisPrikaz(ViSession I, char * P) - funkce zašle SCPI příkaz (příkaz k ovládání) multimetru HP 34401A. Operace je provedena za pomoci funkce viWrite (funkce VISA knihovny). [7]
void odmerHodnotu(ViSession I) - funkce přijme data od daného multimetru HP 34401A. Operace je provedena za pomoci funkce viRead (funkce VISA knihovny). Výsledný string je uložen do pole charů b a zakončen znakem NUL. [7]
CVICALLBACK funkce:
int CVICALLBACK measureThreadFunction(void * Vparameter) - funkce slouží pro nastavení, řízení a zpracování simultánních odměrů napětí z dvou multimetrů HP 34401A. Funkce je spuštěna jako měřící vlákno. Skládá se z dvou částí. V první se nastaví multimetry pro odměr napětí a otevře soubor namerhodnoty.csv pro zápis (není-li vytvořen, dojde zároveň k jeho vytvoření). Druhá část je while cyklus, který běží dokud je globální proměnná RUN nastavena na 1. Po nastavení RUN na hodnotu 0 doběhne započatý cyklus a vlákno se ukončí. Nejprve bych rád rozebral první část, tedy nastavení multimetrů. SCPI příkazy jsou zapisovány za pomoci funkce zapisPrikaz. Jednotlivé kroky tedy jsou:
38
- resetování nastavení přístrojů (*RST) a vymazání chyb (*CLS)
- nastavení rozsahů a rozlišení multimetrů (CONF:VOLT:DC)
- nastavení spouštění-trigeringu přes sběrnici HP-IB (TRIG:SOUR BUS)
- nastavení zpoždění spouštění-trigeringu na hodnotu 0
- nastavení počtu triggerů na hodnotu 1 a počtu vzorků v jednom triggeru také na hodnotu 1 - nastavení do stavu pro čekáni na trigger (INIT) a nastavení obou multimetrů pro příjem interfejsové zprávy
- otevření souboru namerhodnoty.csv pro zápis
Druhá část je while cyklus, jehož úlohou je odměr napětí a zápis do souboru namerhodnoty.csv. Příkazy jsou stejně jako v první části zapisovány za pomoci funkce zapisPrikaz, odměr hodnot je proveden za pomoci funkce
odmerHodnotu. Jednotlivé části cyklu tedy jsou: - vymazání chyb (*CLS) a nastavení do stavu pro čekání na trigger (INIT) - nastavení obou multimetrů pro příjem interfejsové zprávy
- zaslání příkazu pro skupinové vykonání triggeru na sběrnici (GET) - vykonání zpoždění zadané uživatelem ΔT [s] - přenos dat z interní paměti multimetrů do výstupního bufferu (FETCH?)
39
- přečtení těchto dat za pomoci funkce odmerHodnotu
- zapsání těchto dat do souboru namerhodnoty.csv
int CVICALLBACK graphButtonClick(int panel, int control, int event, void *callbackData, int eventData1, int eventData2) - funkce vykreslí nekorigovaná data do GrafuXY a Osciloskopu, zároveň vypíše tato data do tabulky-Excel I\0. Do GrafuXY se také vypíší parametry systému. Funkce se zavolá po stisknutí tlačítka Vykreslit surová data.
int CVICALLBACK COMMANDBUTTONHysteres_Click (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) - funkce vykreslí korigovaná data do GrafuXY a Osciloskopu, zároveň vypíše tato data do tabulky-Excel I\0. Do GrafuXY se také vypíší parametry systému. Funkce se zavolá po stisknutí tlačítka Vykreslit závislost B = f(H).
int CVICALLBACK COMMANDBUTTONConfirm_Click (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) - funkce nastaví parametry systému z okna Parametry do struktury parametry. Dále povolí tlačítko Start z nabídky Lišta nabídka a zobrazí duplikátní tlačítko Start. Funkce se zavolá po stisknutí tlačítka POTVRDIT z okna Parametry.
int CVICALLBACK COMMANDBUTTONTurn_Click (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) - funkce, jenž na uživatelův pokyn (událost) kliknutí na tlačítko OTOCIT, které se nachází na panelu GrafXY, otočí dle osy B na tomto panelu graf statické hysterézní smyčky. Zároveň přepíše hodnoty H ve strukuře, znovu přepočítá a zobrazí |BHmax|, to znamená zavolá funkci double BHmax(), která vrací hodnotu |BHmax|.
40
void CVICALLBACK fSave (int menuBar, int menuItem, void *callbackData, int panel) - funkce vyvolá nabídku pro uložení do .csv souboru, zároveň ohlídá aby nedošlo k přepisování souborů. V případě nepovolené akce vypíše na obrazovku upozornění. Vytvoří .csv
soubor se jménem, který uživatel zadal.
Poté uloží korigovaná a nekorigovaná data společně s parametry systému. Ve funkci je při ukládání volána funkce replace. Funkce se zavolá po stisknutí tlačítka Uložení v Liště nabídka.
void CVICALLBACK fLoad (int menuBar, int menuItem, void *callbackData, int panel) - funkce vyvolá nabídku pro načtení z .csv souboru a zároveň ohlídá, aby nedošlo k otevření souboru namerhodnoty.csv, který je uživateli nepřístupný. V případě nepovolené akce vypíše na obrazovku upozornění. Před samotným načítáním zjistí, zda-li už nebyla naměřena nejaká data, nebo případně načtena. Pokud ano, nejprve uvolní již alokovanou (zabranou) pamět, jakmile uvolní tuto pamět, projde soubor zvolený uživatelem a spočíta počet dat v tomto souboru. Poté alokuje dynamické struktury o velikosti počtu dat v souboru, do těchto struktur načte parametry a data. Data se ze souboru vyčítají za pomoci funkce derive a parametry za pomoci funkce triplderive. Ve funkci je při načítání volána funkce replace. Dále se zpřístupní tlačítko Korekce v Liště nabídka a tlačítko Vykreslit surová data. Funkce se zavolá po stisknutí tlačítka Načtení v Liště nabídka.
void CVICALLBACK fConnect (int menuBar, int menuItem, void *callbackData, int panel) - funkce za pomoci funkcí z VISA knihovny (viFindRsrc a viFindNext) nalezne přístroje na HP-IB sběrnici a otevře je pro komunikaci. Nalezené adresy přístrojů se vypíší do políček Adresa multimetru měřícího H a Adresa multimetru měřícího B, kde se defaultně nastaví, který multimetr bude číst H a který B. Uživatel si však dvojitým kliknutím na příslušnou adresu v políčku může zvolit sám, pokuď tak učiní, dojde k zavolání funkce 41
CVICALLBACK
COMBOWhatH_Choose
a CVICALLBACK COMBOWhatB_Choose.
Dále se zkontroluje, zda-li jsou připojeny správné přístroje na sběrnici, tedy multimetry HP 34401A. Jsou-li připojeny správné přístroje, rozsvítí se zeleně kontrolka Ind. přip. správných přís. na sběrnici a zpřístupní se tlačítko Nastavení parametrů v Liště nabídka. V opačném případě se vypíše chybové hlášení a uživatel je vyzván, aby opakoval operaci připojení přístrojů. Ve funkci je volána funkce addrToHex. Funkce se zavolá po stisknutí tlačítka Připojení přístrojů v Liště nabídka.
void CVICALLBACK fSetParametrs (int menuBar, int menuItem, void *callbackData, int panel) - funkce zobrazí okno Parametry na pracovní ploše. Funkce se zavolá po stisknutí tlačítka Nastavení parametrů v Liště nabídka.
void CVICALLBACK fStart (int menuBar, int menuItem, void *callbackData, int panel) - funkce spustí funkci CVICALLBACK measureThreadFunction jako vlákno a rozsvítí červeně kontrolku Indikace běhu měření. Před spuštěním zjistí, zda-li již nebyla naměřena nejaká data nebo případně načtena. Pokud ano, nejprve uvolní již alokovanou (zabranou) pamět. Dále zakáže všechna tlačítka, která mají být při měření neaktivní. Funkce se zavolá po stisknutí tlačítka Start v Liště nabídka, nebo duplikátního tlačítka Start v Liště okno pod nabídkou.
void CVICALLBACK fStop (int menuBar, int menuItem, void *callbackData, int panel) - funkce nastaví globální proměnnou RUN na hodnotu 0 a uspí hlávní vlákno main, aby vedlejší měřící vlákno mohlo dokončit svůj cyklus a uzavřít soubor namerhodnoty.csv. Zhasne červenou kontrolku Indikace běhu měření. Dále
alokuje
dynamické
struktury
o
velikosti
počtu
dat
v souboru
namerhodnoty.csv a přepíše data ze souboru namerhodnoty.csv do těchto dynamických struktur. Pří získávání dat ze souboru je volána funkce derive a funkce replace. Na závěr povolí všechna tlačítka, která byla po stisknuti tlačítka 42
Start nastavena jako neaktivní, zároveň zakáže tlačítko Stop (s tímto tlačítkem zmizí duplikátní tlačítko Stop). Funkce se zavolá po stisknutí tlačítka Stop v Liště nabídka, nebo duplikátního tlačítka Stop v Liště okno pod nabídkou.
void
CVICALLBACK
fCorrection
(int
menuBar,
int
menuItem,
void
*callbackData, int panel) - funkce volá 4 důležité funkce a to v pořadí: - Correct - Hysterese - findCrossPoints - BHmax Dále zaokrouhlí a vypíše hodnoty Br, Hc a BHmax do panelu GrafXY a zobrazí tlačítko Vykreslit závislost B = f (H). Funkce se zavolá po stisknutí tlačítka Korekce v Liště nabídka.
void CVICALLBACK fPrint (int menuBar, int menuItem, void *callbackData, int panel) - funkce nastaví tisk GrafuXY a schová tlačítka na tomto panelu. Zároveň vyvolá nabídku pro nastavení tisku. Funkce se zavolá po stisknutí tlačítka Tisk v Liště nabídka.
void CVICALLBACK fNew (int menuBar, int menuItem, void *callbackData, int panel) - funkce uvede program do původního stavu po spuštění. Přenastaví tedy viditelnost a platnost všech GUI prvků a vymaže GrafXY, Osciloskop a tabulku- Excel I/0. Funkce se zavolá po stisknutí tlačítka Nové měření v Liště nabídka.
void
CVICALLBACK fExit
(int
menuBar, int
menuItem, void
*callbackData, int panel) - funkce zobrazí upozornění o ukončení programu. Funkce se zavolá po stisknutí tlačítka Ukončit v Liště nabídka. 43
int CVICALLBACK fZoom (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) - funkce vykreslí 2. kvadrant hysterézní smyčky do GrafuXY, zároveň se v 1.kvadrantu vykreslí |BH|=f (B) a příslušné body. Funkce se zavolá po stisknutí tlačítka 2. kvadrant, které se nachází na GrafuXY.
void CVICALLBACK fGraph (int menuBar, int menuItem, void *callbackData, int panel) - funkce zobrazí, nebo schová panel GrafXY. Funkce se zavolá po stisknutí tlačítka Graf v Liště nabídka.
void CVICALLBACK fGraphT (int menuBar, int menuItem, void *callbackData, int panel) - funkce zobrazí, nebo schová panel Osciloskop. Funkce se zavolá po stisknutí tlačítka Graf v čase v Liště nabídka.
void CVICALLBACK fTable (int menuBar, int menuItem, void *callbackData, int panel) - funkce zobrazí, nebo schová panel tabulka-Excel I\0. Funkce se zavolá po stisknutí tlačítka Tabulka v Liště nabídka.
void
CVICALLBACK
fAll
(int
menuBar,
int
menuItem,
void
*callbackData, int panel) - funkce schová všechny panely GrafXY, Osciloskop a tabulku- Excel I/0. Přenastaví jejich velikost a pozici, tak aby se vešly na pracovní plochu a znovu je zobrazí, zároveň zakáže tlačítka pro samostatné zobrazení panelů GrafXY, Osciloskop a tabulku- Excel I/0. Funkce se zavolá po stisknutí tlačítka Všechno v Liště nabídka.
44
void CVICALLBACK fHelp (int menuBar, int menuItem, void *callbackData, int panel) - funkce zobrazí nápovědu. Funkce se zavolá po stisknutí tlačítka Pomoc v Liště nabídka.
void CVICALLBACK fAbout (int menuBar, int menuItem, void *callbackData, int panel) - funkce zobrazí informace o programu. Funkce se zavolá po stisknutí tlačítka O programu v Liště nabídka.
int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) - funkce schová informace o programu. Funkce se zavolá po stisknutí tlačítka Quit .
3.5
Měříme s programem Při měření postupujem tak, jak je uvedeno v ovládání programu viz.
3.2.1.
Nastavíme
tedy příslušné
parametry systému.
Stiskem tlačítka
POTVRDIT uvedeme systém do stavu, ve kterém je připraven k měření. Na zdroji proudu
(MN-mesit) nastavíme maximální výstupní proud. Stiskneme
tlačítko Start a snižujeme proud až k nule, dosáhneme-li hodnoty nula, zkomutujeme polaritu proudu za pomoci komutátoru. Znovu zvyšujeme proud až do maxima. Z maxima opět snižujeme proud až k nule, dosáhneme-li hodnoty nula, zkomutujem zpět polaritu proudu. Postupně zvyšujeme proud až do maxima, kde ukončíme měření stiskem tlačítka Stop. Tlačítka Start a Stop jsou ve dvojím provedení, měření není zavislé na tom, které z dvojice použijeme.
45
4
Závěr Simultánní odečet dat z fluxmetru a gaussmetru LakeShore po sběrnici
HP-IB není možný z důvodu absence skupinového trigrování přístrojů v jejich instrukční sadě. Měříme tedy napětí z analogových výstupů “Monitor“ gaussmetru a fluxmetru za pomoci multimetrů HP 34401A, připojených na sběrnici HP-IB dle schéma zapojení viz. 2.4. Program MTMProgram je součástí tohoto systému a měří celou hysterézní smyčku MTM. Program tedy odečítá simultánně napětí z dvou multimetrů, koriguje integrační drift a počáteční podmínky integrátoru. Dále přepočítá korigované napětí na intenzitu H a indukci B. V případě indukce B provede korekci toku vzduchem pod měřící cívkou. Zobrazí celou hysterézní smyčku, nebo jen 2. kvadrant v závislosti na uživateli společně se základními parametry MTM: Hc (koercitivní intenzita), Br (remanentní indukce) a |BHmax| (maximální energetický součin). Zobrazenou hysterézní smyčku společně se základními parametry MTM a parametry o systému může uživatel vytisknout a to buď do souboru, nebo na příslušné zvolené tiskárně. Dále umožňuje načítání a ukládání korigovaných (zároveň přepočítaných) a nekorigovaných dat společně s parametry systému ze nebo do souboru s příponou .csv. Ovládání programu je řešeno přes GUI viz. 3.2.1, které po celou dobu práce s tímto programem směruje a informuje uživatele a zároveň mu zabraňuje provést neplatné kroky, které by vedly k neočekávaným událostem. V programu je implementována (zabudována) pomoc viz. 3.2.2.1. Program je napsán tak, aby přizpůsobil své GUI počítači na němž je spuštěn viz. 3.2.3. Program má dynamickou strukturu a to jak z důvodu šetrnosti k paměťovým prostředkům počítače, tak z důvodu, že není dopředu znám počet naměřených dat viz. 3.4.1. Měřením na vzorku MTM jsem ověřil společně s vedoucím práce výše zmíněné funkce programu a to včetně korekce toku vzduchem pod měřící cívkou. Nepříjemností při každém použití převodníku HPIB – USB (HS) je výzva pro uživatele, aby znovu nainstaloval ovladače k tomuto převodníku, v tomto případě není nutné vkládat instalační cd, stačí pouze zadat automatickou instalaci softwaru. Nejedná se tedy o problém, ale o drobné časové zdržení, které by zřejmě vysvětlil výrobce tohoto převodníku.
46
Reference [1]
Draxler, Kašpar, Ripka: Magnetické prvky a měření.Skripta ČVUT FEL
[2]
Vladimír Haasz: EMC-přednáška_11– v pdf
[3]
Manuál gaussmetru LakeShore 450 – v pdf
[4]
Manuál fluxmetru LakeShore 480 – v pdf
[5]
Manuál multimetru HP 34401A – v pdf
[6]
Manuál převodníku HP-IB-USB – v pdf
[7]
Milan Rozsíval: BP- Systém pro měření magneticky měkkých materiálů
[8]
Nápověda k LabWindows/CVI verze 7.1.1
[9]
NI – VISA Manuál: příručka programátora– v pdf
[10] Pavel Herout: Učebnice jazyka C
47