Optyczny Tomograf Transmisyjny

Transkrypt

Optyczny Tomograf Transmisyjny
2.2 Opis części programowej
Rysunek 1: Panel frontowy aplikacji.
System pomiarowy został w całości zintegrowany w środowisku LabVIEW. Aplikacja uruchamiana na
komputerze zarządza przebiegiem pomiarów poprzez sterowanie dwoma silnikami krokowymi oraz
akwizycją i analizą danych pochodzących z czujnika natężenia wiązki laserowej oraz czujników krańcowych
umieszczonych na końcach stolika liniowego.
Rysunek 2: Poglądowy schemat przedstawiający architekturę programową systemu.
Aplikacja rozpoczyna pracę po wczytaniu konfiguracji z pliku "config.ini", który można edytować
bezpośrednio przez użycie programu do edycji plików tekstowych, bądź przez interfejs użytkownika,
wybierając odpowiednie ustawienia i klikając "Save Workspace". Plik „config.ini” przechowuje informacje o:

wykorzystanych liniach danego portu DIO

wykorzystanych kanałach AI
 ustawieniach pomiaru
Rysunek 3: Struktura pliku "config.ini".
Rysunek 4: Fragment kodu przedstawiający ładowanie ustawień programu z pliku konfiguracyjnego.
W początkowych etapach tworzenia aplikacji w celu sprawdzenia poprawności działania bibliotek i
połączeń fizycznych służących do sterowania silnikami krokowymi - odpowiednio silnikiem przesuwającym
stolik liniowy i silnikiem obracającym stolik obrotowy - w aplikacji zaimplementowano moduł "Remote
Control", umożliwiający bezpośrednie sterowanie silnikami za pomocą "strzałek" na klawiaturze komputera.
Rysunek 5: Fragment kodu przedstawiający sterowanie silnikami w trybie "Remote Control".
Kolejnym krokiem w tworzeniu aplikacji było zaimplementowanie sekwencji testującej system.
Przed każdym uruchomieniem skanu, należy wykonać sekwencję testową sprawdzającą poprawność
działania systemu, która ma na celu znalezienie jakichkolwiek błędów w torze pomiarowym i w
mechanicznym działaniu systemu, np. wskazanie, że stół linowy nie pracuje poprawnie ponieważ tor, po
którym się przesuwa jest zabrudzony co uniemożliwia poprawne wykonanie skanu. Na następnej stronie
znajduje się diagram blokowy przedstawiający kroki sekwencji testowej systemu. Diagram nie uwzględnia
obsługi błędów, które potencjalnie mogłyby wystąpić podczas przeprowadzania testu. Wszelkie diagramy
użyte w tekście są opisane w języku angielskim. Poniżej został zamieszczony słowniczek pojęć użytych w
schematach:

Course: pojedynczy przejazd(kurs) stołu liniowego w danym kierunku.

Course direction: obrany kierunek przesuwania się stołu liniowego podczas danego kursu.

Limit switchers: czujniki krańcowe umieszczone na końcach stołu liniowego.
Rysunek 6: Schemat blokowy przedstawiający kroki sekwencji testowej systemu.
Rysunek 7: Fragment kodu przedstawiający sekwencję testową.
Ostatnim etapem tworzenia aplikacji było zaprogramowanie sekwencji pomiarowej. Poniższy graf
przedstawia algorytm sekwencji pomiarowej:
Rysunek 8: Schemat blokowy przedstawiający kroki sekwencji pomiarowej.
Rysunek 9: Fragment kodu przedstawiający sekwencję pomiarową.
Sekwencja pomiarowa rozpoczyna się od przeliczenia ile kroków powinien wykonać poszczególny
silnik, aby otrzymać określoną ilość pomiarów. Następnie jeśli stół linowy znajduje się w miejscu innym niż
jego lewy koniec, zostaje on przesunięty do lewego końca. Kolejnym krokiem sekwencji jest skalibrowanie
silników, czyli ustalenie ostatniej pozycji wirnika poszczególnego silnika i określenie następnej, od której
aplikacja powinna rozpocząć generowanie sygnałów sterujących silników. Po wykonaniu wymienionych
czynności rozpoczyna się skan obiektu. Pomiar natężenia wiązki laserowej jest wykonywany w oknach
czasowych o szerokości 100ms. Ze zmierzonego sygnału wyciągana jest wartość średnia, która jest
traktowana jako ostateczna pojedyncza zmierzona wartość w serii pomiarów. Zmierzona wartość jest
zapisywana w wektorze danych. Na całkowity skan obiektu składają się wektory danych, gdzie każdy z
wektorów przechowuje wartości pomiarów przy konkretnym kącie obrotu obiektu.
Zebrane dane pomiarowe są następnie analizowane i składane w wyjściowy skan, wykorzystując
algorytm Radona rekonstrukcji obrazu.
Rysunek 10: Fragment kodu przedstawiający algorytm Radona rekonstrukcji obrazu.
Rysunek 11: Panel frontowy aplikacji po wykonaniu skanu.