Spis treści
Istotna jest szybkość działania programu oraz czas który trzeba poświęcić na oprogramowanie eksperymentu. Te warunki są sprzeczne, bo jak wiadomo najszybszymi są programy napisane w języku asemblera konkretnego procesora (co wymaga dużych nakładów czasowych), a najszybciej się piszą programy w językach wysokiego poziomy, wykorzystujące specjalistyczne biblioteki i funkcje zaawansowanych systemów operacyjnych (z definicji programy te wykonywane są wolniej niż asemblerowe). Ten dylemat jest postawą występowania bardzo szerokiej oferty na rynku oprogramowania.
W pracy przedstawiono przykłady wykorzystania języka wysokiego poziomu (LABVIEW, firma National Instruments) dla programowania eksperymentów fizycznych na różnych poziomach - od pracowni studenckiej do pracowni naukowej.
Rys. 1. Etapy programowania w językach tekstowych.
Rozwój technik komputerowych daje nam możliwość korzystania co raz z większych zasobów sprzętowych. W wyniku tego rozwoju (i znacznego spadku ceny sprzętu) powstali bardzo popularne graficzne systemy operacyjne, służące jako platformy dla programów aplikacyjnych. Środowisko graficzne, bardziej intuicyjne dla przeciętnego człowieka, potrzebuje znacznych zasobów sprzętowych komputera. Duża ilość parametrów jest ustalana domyślnie, a użycie myszy w interfejsie graficznym zwiększa wydajność pracy, zmniejsza czas uczenia. Te zmiany dotyczą i języków programowania.
Graficzny język programowania jest podobny do rysowania schematów elektronicznych. Poszczególne funkcje są przedstawione w postaci elementów funkcyjnych (prostokąty). Ilość i typ pinów wejścia/wyjścia, odpowiada ilości i typowi otrzymywanych/przesyłanych danych. Elementy te łączone są pomiędzy sobą w programie (schemacie) przewodami; których kolor odpowiada typowi przekazywanych danych, a grubość - wymiarowi przekazywanej tablicy. Bezpośrednią pomiędzy sobą można łączyć tylko piny tego samego typu. Są pewne elementy, które dopuszczają polimorfizm, tzn że np. ten sam element może być użyty zarówno do dodawania liczb całkowitych, jak i liczb rzeczywistych. Wykonywanie programu odpowiada przepływowi strumienia danych; funkcja jest wykonywana jak tylko ona posiada wszystkie niezbędne argumenty. Prócz tego istnieje możliwość ręcznego ustawienia warunków synchronizacji poszczególnych części w programie.
Programowanie graficzne istotnie zmienia sposób pisania programów dla
urządzeń pomiarowych. Przede wszystkim chodzi tu o prędkość napisania poprawnie
działającego programu. Algorytm napisania programu w języku graficznym
wygląda następującą (Rys. 2).
Rys. 2. Etapy programowania w języku graficznym
Obecnie głównymi producentami graficznych języków programowania dla
sterowania eksperymentem fizycznym są: (i) Hewlett Packard - program HPVEE
i (ii) National Instruments - program LabView. Według szacowań, przeprowadzonych
w roku 1998, przez czasopismo Personal Engineering & Instrumentation
News, najczęściej wykorzystywany do programowania układów obsługujących
akwizycje i analizę danych był program LabView (Rys. 3) [].Komercyjnie
sprzedawany LabView jest dostępny na sześciu platformach (Win16, Win32,
Mac, HP-UX, Sun, Concurrent PowerMAX), posiada możliwości do akwizycji
, analizy i prezentacji danych, posiada dużą bibliotekę sterowników różnego
typu zewnętrznych urządzeń pomiarowych wraz z przykładami, podtrzymuje
wszystkie karty pomiarowe produkowane przez National Instruments i większość
popularnych urządzeń pomiarowych. Jest to program ciągle rozwijany i udoskonalany.
a)
b)
Rys. 3. Częstość użycia programów do budowania: a) systemów pomiarowych;
b) systemów akwizycji/analizy danych.
Zgodnie z koncepcją National Instruments, program ten jest wirtualnym instrumentem (skąd pochodzi rozszerzenie roboczych plików *.vi), wykonującym odpowiednie funkcje. Każdy program w LabView składa się z dwóch części, umieszczonych w jednym pliku: (i) panelu programu (urządzenia), który jest widoczny na ekranie komputera podczas pracy; (ii) schematu (diagram) programu, składający się z poszczególnych funkcji i połączeń, wykorzystanych w danym programie.
Niżej są przedstawione różne przykłady stosowania LabView dla sterowania eksperymentem fizycznym.
Najpierw w języku C i asemblerze jest napisana funkcja get_pentium_time(),
odczytująca czas z licznika procesora:
//plik time_pen.c
#include <windows.h>
typedef struct {
DWORD utime_low;
DWORD utime_high;
} TD1;
void FAR _export get_pentium_time(TD1 *var1)
{
DWORD u_high, u_low;
asm {
.586
// int 3
db 0xF, 0x31
mov u_high,eax
mov u_low, edx
}
(*var1).utime_low=u_low;
(*var1).utime_high=u_high;
}Ta funkcja jest kompilowana do biblioteki time_pen.dll i następnie jest wykorzystywana przez funkcje LabView get_pentium_time.vi, diagram której jest przedstawiony na Rys. 4a-d.
a)
b)
c)
d)
Rys. 4a-d. Diagram funkcji LabView get_pentium_time.vi
Funkcja get_pentium_time.vi działa następującą. Najpierw deklaruje się klaster, składający się z dwóch 32-bitowych liczb całych bez znaku. W zerowej klatce sekwencji adres tej struktury jest przekazywany do importowanej z time_pen.dll funkcji get_pentium_time(), i w tym momencie uzyskujemy stan 64-bitiwego licznika zegara procesora do zmiennych A_high i A_low. Pierwsza klatka sekwencji zawiera procedurę, czas trwania której my mierzymy, w tym przypadku to zatrzymanie na czas, ustawiany przez zmienną Delay. W drugiej klatce sekwencji znów odbywa się odczyt licznika zegara procesora do zmiennych B_high i B_low; a w trzeciej przy pomocy wzoru jest wyliczana różnica czasu i przekazywana na wyjście funkcji get_pentium_time.vi do zmiennej D. Rzeczywisty czas jest mierzony w kwantach zegara procesora.
Dla uzyskania informacji statystycznej i wizualizacji danych pomiarowych
służy program PentiumDelayMeasurements.vi. Na Rys. 5 jest pokazany panel
programu, na lewej części którego znajdują się klawisze do ustawienia:
częstotliwości procesora (dla przeskalowania ilości kwantów czasu w milisekundy);
czasu zatrzymania Delay; czasu zatrzymania pomiędzy kolejnymi pomiarami.
Środkowa część zawiera panel oscyloskopu da wizualizacji przebiegu pomiaru
w czasie rzeczywistym, dwa okienka dla wyświetlania średniej wartości i
średniokwadratowego odchylenia; okna dla ustawienia parametrów prezentacji
diagramu w prawej części panelu.
Rys. 5. Panel programu PentiumDelayMeasurements.vi zarejestrowany pod
czas działania programu, przeszukiwającego pliki na dysku twardym.
Diagram programu PentiumDelayMeasurements.vi wygląda następującą (Rys.
6). Duży prostokąt to pętla WHILE - pomiar trwa aż do wyłączenia przycisku
Run na panelu programu. Przed pierzą iteracją odbywa się inicjalizacja
ciągu 50 liczb rzeczywistych (mały prostokąt po lewej stronie pętli WHILE).
Ten ciąg jest przekazywany do instrukcji wyboru w prawej części pętli WHILE.
W zależności od ustawienia przyciska Analysis na paneli programu analiza
statystyczna danych może być włączona lub wyłączona. Akwizycja danych pomiarowych
odbywa się w pętli FOR (duży prostokąt w lewej części pętli WHILE). W ciągu
działania cyklu FOR uzyskujemy 10 wartości, które po przeskalowaniu w postaci
ciągu są przekazywane do instrukcji wyboru. Wewnątrz tej pętli FOR działa
funkcja dla prezentacji wyników pomiaru w czasie rzeczywistym. Jeżeli przycisk
Analysis na paneli programu jest wyłączony, to aktywne jest okienko instrukcji
wyboru oznaczone jako False. Wtedy cała analiza statystyczna jest wyłączona.
W przypadku włączonego przycisku Analisys (aktywne jest dolne okienko instrukcji
wyboru oznaczone jako True) dane pomiarowe równolegle trafiają do bibliotecznych
funkcji Undate statistics.vi i histogram+.vi. W wyniku działania funkcji
Update statistics.vi są wyliczane średnia wartość Mean i średniokwadratowe
odchylenie Standart deviation pokazywane na panelu programu. Po obliczeniu
w funkcji histogram+.vi dane są przekazywane do funkcji Array To Bar Graph.vi,
budującej histogram.
Obciążenie procesora równoległymi zadaniami drastycznie zmienia wyniki pomiarów czasu zatrzymania. Wzorcowy czas zatrzymania był ustawiony na 10 msek. W przypadku, kiedy LabView był jedynym aktywnym programem, pracującym pod Windows95, to zmierzony rzeczywisty czas zatrzymania był tidle=12.04ą0.67 msek. Przy równoległej prace w tle programu, aktywnie przeszukiwającego pliki na twardym dysku, ten czas zmienił się na tHDD=20.32? 7.22 msek. Analizując wyniki można wnioskować, że dla PC, pracującego pod systemem operacyjnym Windows95, nie można uzyskać równomiernych w czasie pomiarów na poziomie mniejszym od 1 ms.
Pomiar zależności B(H) dla materiałów ferromagnetycznych jest wykonywany
z wykorzystaniem prostego układu, składającego się z dwóch cewek: (i) magnesującej
- dla wytworzenia sinusoidalne zmiennego zewnętrznego pola magnetycznego
i (ii) detekcyjnej - dla pomiaru zmiany indukcji magnetycznej dB/dt próbki.
Na Rys. 7 jest pokazany elektryczny schemat urządzenia pomiarowego. Cewka
magnesująca LM po przez transformator T2 jest zasilana od sieci (f=50Hz).
Natężenie pola magnetycznego H jest wprost proporcjonalne do prądu I1 płynącego
po przez opornik R1. Napięcie na cewce detekcyjnej LD jest wprost proporcjonalne
do pierwszej różniczki dB/dt. Wykonując jednocześnie pomiary H (napięcie
na oporniku R1) i dB/dt (napięcie na cewce detekcyjnej) można otrzymać
zależność dB/dt od H, a po całkowaniu - B(H). W ciągu tego eksperymentu
układ pomiarowy powinien być na tyle szybki żeby w ciągu jednego okresu
zmian napięcia zasilania, (20 ms) zarejestrować około 100 par wartości
H i dB/dt. Bezpośrednio na PC/Windows takiej dokładności nie da się uzyskać,
i dla tego jest używana w/w specjalistyczna płyta pomiarowa.
Rys. 7. Elektryczny schemat urządzenia do pomiaru B(H).
Program sterujący współpracą PC z PIC17C756 był napisany w LabView 5.0.
Na Rys. 8 jest pokazany panel programu i sam program (Rys. 9). W ciągu
pracy na panelu są wyświetlane trzy wykresy: zależność H(t), dB/dt(H) i
B(H). Prócz tego wyświetlana jest informacja o ilości bajtów przekazanych
od PIC17C756 i przekazana tabela danych. Podczas pomiaru błyska czerwona
lampka. Domyślnie pomiar odbywa się co 1.5 sekundy. Ze schematu widać,
że program składa się z następujących części: odpowiednia inicjalizacja
portu szeregowego, następnie jest wykonywana pętla WHILE aż do odwołania
poprzez przycisk ON/OFF. W ciągu pracy tej pętli występuję 5 klatek sekwencji:
1 - przekazanie polecenia do PIC17C756; 2- zapala się czerwona lampka;
3 - zatrzymanie na czas akwizycji danych przez PIC17C756 ustawiany na paneli
sterowania (domyślnie 1.5 sekundy); 4 - gaśnie lampka; 5 - odbywa się odczyt
danych z portu szeregowego, przekształcenie ich w kolumny, całkowanie kolumny
z dB/dt i rysowanie wykresów na panelu.
Rys. 8. Panel programu do pomiaru zależności B(H).
Rys. 9. Diagram programu do pomiaru zależności B(H). Wymiary klatek sekwencji 0,1,2,3 zmniejszone dla czytelności.
Mikroskop sił magnetycznych (MFM) służy dla wizualizacji rozkładu pól magnetycznych przy powierzchni próbki z rozdzielczością poprzeczną mniejszą od 1 mikrometra. Sonda z magnetycznym wierzchołkiem przesuwa się w płaszczyźnie XY nad powierzchnią próbki (optymalna odległości próbka-sonda - około 50 nm) powtarzając jej kształt. Mierzona jest siła oddziaływania próbki na sondę.
Mikroskopy skaningowe są przykładem urządzeń ściśle współpracujących z komputerem. Na pierwszych mikroskopach skaningowych przy niewielkiej ilości linii skanowania [] jeszcze udawało się zarejestrować obraz powierzchni przy pomocy rejestratora, ale w miarę szybkiego rozwoju tej techniki, wzrostu ilości przekazywanej informacji, zmniejszenia czasu próbkowania, komplikacji algorytmów pomiaru stało się koniecznym użycie komputera. Przy większych polach skanowania (>10 mkm) prędkość skanowania jest definiowana procesem oddziaływania sonda-powierzchnia, a nie prędkością przekazywania danych i szybkość działania PC/Windows/LabView jest wystarczająca, żeby nie stosować specjalistycznego procesora do sterowania mikroskopem.
W dostępnym modzie pracy naszego mikroskopu AFM METRIS-2000 firmy Burleigh,
możliwa była rejestracja siły oddzialywania sonda-powierznia tylko przy
stałej wartości Z. Pomiar rozkładu pól magnetycznych był niemożliwy ze
względu na nierówności i nachylenie powierzchni badanej próbki do płaszczyzny
skanowania. Sprzętowo zmiana AFM na MFM polegała (Rys. 10), w naszym przypadku,
na: (i) zastosowaniu dodatkowej karty pomiarowej (PCL-812), posiadającej
przetwornik cyfra-analog DAC_Z dla kompensacji nierówności/nachylenia próbki
(przetwornik dodawał odpowiednie napięcie na przesuwie Z) i wyjście cyfrowe
DO_7 dla włączenia/wyłączenia sprzężenia zwrotnego; (ii) zainstalowania
magnetycznej sondy.
Rys. 10. Schemat blokowy AFM/MFM mikroskopu.
Istniejące standardowe oprogramowanie AFM METRIS-2000 jest zamknięte
i nie nadaje się do przeróbki dla pomiarów MFM. Dla szybkiego oprogramowania
algorytmu MFM był wykorzystany Labview. Zgodnie z zasadami pomiaru zrealizowany
algorytm MFM składa się z dwóch części: (i) rejestracji kształtu powierzchni
z wykorzystaniem klasycznego modu AFM; (ii) pomiaru MFM z korektą odległości
próbka-sonda w każdym punkcie przy wykorzystaniu informacji z poprzedniego
(i) pomiaru AFM.
Rys. 11. Panel programu dla sterowania MFM po zarejestrowaniu struktury
AFM/MFM testowej próbki CAMST-2 [].
Panel programu (Rys. 11) wygląda następująco. Lewa części panelu służy dla prezentacji danych pod czas pomiaru AFM: w oknie Surface image jest budowany monochromatyczny obraz powierzchni próbki. Środkowa część panelu służy dla graficznej prezentacji danych pomiarowych MFM: na górnym wykresie DAC_Z jest wyświetlane napięcie podawane na DAC_Z, niżej na Force scan line - pojedyncza linia skanowania siły oddziaływania sonda-powierzchnia i na Force image monochromatyczny dwuwymiarowy obrazek MFM. Reszta przycisków służy dla ustawiania parametrów eksperymentu (wzmocnienie, ilość linii skanowania, prędkość itp.). Diagram tego programu jest zbyt skomplikowany żeby jego opisywatić w niniejszym artykule.
W wyniku uzyskano zadowalające obrazy przestrzennych rozkładu magnetyzacji w testowych próbkach [].
Połączenie klient-serwer realizowane jest zazwyczaj poprzez wykorzystanie
typowej sieci komputerowej (np Ethernet) i standardowych protokołów przesyłania
danych (np.TCP/IP). Na tej bazie powstało wiele programów serwujących zdalny
dostęp do urządzeń, także poprzez Internet z wykorzystaniem języka HTML.
Tak istnieje szereg ogólnie dostępnych układów pomiarowych, np. układ do
badań ciekłych kryształów na Uniwersytecie w Kent [].
Rys. 12. Zdalne sterowanie komputerem. Schemat doświadczenia.
Dla demonstracji możliwości zdalnego sterowania pomiarami przez INTERNET
w okresie odbywania się Zjazdu uruchomiono w Białymstoku serwer obsługujący
układ pomiarowy do badania struktury domenowej i procesów magnesowania
w cienkiej magnetycznej warstwie granatu []. Schemat układu jest pokazany
na Rys. 12.
a) b)
Rys. 13. a) Obrazek struktury domenowej; b) Zewnętrzny widok zestawu
doświadczalnego.
Rys. 14. Widok paneli programu na WWW-przeglądarce użytkownika. Dane
pomiarowe namagnesowania próbki granatu.
Komputer-serwer pracował wykorzystując program serwujący HTTP firmy
National Instruments uruchamiany jako część środowiska LabView. Serwer
ten umożliwia nie tylko serwowanie dokumentów w języku HTML, ale także
uruchamianie skryptów CGI, napisanych w języku LabView. Współpraca obu
tych języków umożliwia przekazywanie poprzez formularze HTTP parametrów
do programów LabView dzięki czemu dowolny użytkownik przy pomocy zwykłej
przeglądarki WWW mógł: (i) ustawić natężenie stałego pola magnetycznego
H przyłożonego do próbki, lub przyłożyć do próbki zmienne (piłokształtne)
pole H o ustalanych parametrach zmian; (ii) zarejestrować obraz magnetycznej
struktury domenowej przy wykorzystaniu kamery CCD(Rys. 13a); (iii) zarejestrować
krzywą magnesowania z wykorzystaniem detektora światła; (iv) podglądnąć
on line" układ pomiarowy dodatkową kamerą (Rys. 13b). Skrypt CGI-LabView
zwraca wygenerowaną stronę HTTP, która poza danymi uzyskanymi w pomiarze
może zawierać panele programów LabView w postaci dołączonych plików graficznych
(Rys. 14). Opisany sposób komunikacji serwer-klient przedstawia schematycznie
Rys.. 15.
Rys.. 15. Wymiana danych klient-serwer
Rys.. 16. Diagram części skryptu CGI, napisanego w języku LabView.
Jako przykład programu umożliwiającego tego typu sterowanie rozpatrzmy część skryptu CGI napisaneo w LabView (Rys.. 16). Program ten wykonuje się jako część skryptu CGI o nazwie "Nazwa.vi" i generuje fragment dokumentu HTML, odpowiedzialną za pola formularza, dotyczące zapytań o częstotliwość generowanego przez zasilacz sygnału - zmienna "x" i liczbę sumowań -"y". Oprócz tego tworzone są przyciski "Wykonaj" i "Wyczyść", odpowiadające poleceniom "submit form" i "reset form". Generowany kod w HTML-u jest dołączany do końca zmiennej "HTML in" zawierającej źródła dokumentu, tworzone przez inne części programu LabView, i jako całość jest wysyłany dalej. Do kontroli tej części jest używana także zmienna typu True/False, która decyduje o formie generowanego dokumentu, w tym przypadku, dla FALSE generowany jest oprócz wyżej opisanego kodu także część, zawiadamiająca użytkownika strony o tym ile razy strona została odwiedzona (licznik uruchomień). Zmienna "array in" przekazuje do programu wiadomość o wszystkich zmiennych - "kluczach" używanych w skrypcie CGI.
Więcej informacji można otrzymać bezpośrednio ze strony eksperymentu:
http://physics.uwb.edu.pl/zfmag/strona/doswiadczenie_internetowe.htm
Dziękujemy profesorowi Reinerowi Lincke z Uniwersytetu w Kilonii za zapoznanie jednego z nas (WD) ze swoimi rozwiązaniami komputerowo wspomaganych eksperymentów oraz za inspirację budowy w Białymstoku mikroprocesorowego interfejsu i wykorzystania programu LabView w studenckim laboratorium