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.