Suwnica - model czasu rzeczywistego W niniejszej instrukcji opisano szczegóły budowy i obsługi modelu czasu rzeczywistego suwnicy. Na Rys. 1 pokazany jest model crane_rtwt.mdl, który umoŝliwia pomiary i sterowanie w czasie rzeczywistym trójwymiarowej suwnicy. Model jest skonfigurowany do generacji kodu wykonywalnego czasu rzeczywistego z wykorzystaniem przyborników RTW i RTWT. Jest on bazą, na której moŝna skonstruować dowolny układ regulacji dla suwnicy podczas zajęć laboratoryjnych. Rys. 1. Model czasu rzeczywistego suwnicy Zwróćmy uwagę, Ŝe przedstawiony model nie róŝni się, na pierwszy rzut oka, od typowych, znanych nam modeli Simulinka. Niemniej róŝnice istnieją: Model zawiera blok Crane 3D. Jest to tzw. device driver czyli blok wejść i wyjść komunikujący model Simulinka z obiektem rzeczywistym. Zawartość omawianego bloku przedstawiono na Rys. 2. Ale mimo, Ŝe blok Crane 3D jest dla Simulinka ciałem obcym to uŝywa się go w ten sam sposób jak inne bloki biblioteczne. Model ten nie jest wykonywany w trybie symulacji Normal, jak zwykły model symulacyjny, ale musi być przed uŝyciem skompilowany do kodu czasu rzeczywistego za pomocą RTW i RTWT, i dopiero potem wykonany w trybie External. Model jest specjalnie skonfigurowany. Konfiguracja ta jest ukryta w opcjach okna modelu i będzie wyjaśniona w następnym punkcie.
Device driver suwnicy realizuje trzy główne zadania: Ustawia parametry odpowiedzialne za bezpieczeństwo systemu Udostępnia pomiary z enkoderów zamontowanych w systemie. odczytuje z karty I/O pomiary i przekazuje je do komputera. Pięć enkoderów mierzy następujące wielkości: Pozycję wózka w osi X X Position [m], Pozycję wózka w osi Y Y Position [m], Pozycję wózka w osi Z Z Position [m], Kąt linki w płaszczyźnie X X Angle [m], Kąt linki w płaszczyźnie Y Y Angle [m]. Generuje sygnały sterujące silnikami w trzech osiach: X PWM, Y PWM i Z PWM. Sygnały sterujące są bezwymiarowe i naleŝą do przedziału [-1, +1]. Rys. 2. Szczegóły bloku Crane 3D Istnieją jeszcze trzy dodatkowe sygnały czytane z karty I/O i przekazywane do komputera. Są to stany przekaźników (switches), które informują, Ŝe wózek suwnicy dotarł do brzegu obszaru roboczego. Sygnały te nie są uŝywane w prostych zastosowaniach. Projektowanie własnego modelu czasu rzeczywistego w środowisku Matlaba/Simulinka śeby zbudować system, który będzie działał w czasie rzeczywistym naleŝy kolejno: zbudować w Simulinku model systemu sterowania uŝywając dedykowanego dla suwnicy device drivera oraz potrzebnych bloków bibliotecznych, wygenerować kod czasu rzeczywistego wybierając odpowiednią opcję w menu modelu (patrz Rys. 3) lub stosując skrót klawiaturowy Ctrl+B,
uruchomić kod poprzez kliknięcie kolejno opcji w menu modelu: Simulation/Connect to target i Simulation/Start real-time code. Rys. 3. Generacja kodu czasu rzeczywistego Budowa modelu Najprostszym sposobem zbudowania własnego modelu czasu rzeczywistego jest wykorzystanie jako wzorca dostępnego modelu Crane_rtwt.mdl. NaleŜy otworzyć model poleceniem Crane_rtwt, zapisac go pod inną nazwą (np. My_System) i zmodyfikować. W prezentowanym na Rys. 4 modelu zaimplementowano regulator P śledzący zadaną (Des_pos) pozycję wózka w osi X. Pozostałe osie nie są brane pod uwagę.. Budowa własnego modelu na bazie juŝ istniejącego zapewnia, Ŝe wszystkie wewnętrzne opcje modelu zostaną właściwie ustawione. Te opcje są konieczne do poprawnego przeprowadzenia procesów generacji, kompilacji i linkowania kodu czasu rzeczywistego. UŜytkownik ma całkowitą dowolność przy projektowaniu własnego układu regulacji. MoŜe uŝyć większości bibliotecznych bloków dostępnych w bibliotece Simulinka. Nie wolno mu jedynie usunąć device drivera, poniewaŝ model utraci połączenie z obiektem rzeczywistym
Rys. 4. Model układu regulacji w Simulinku ChociaŜ nie jest to konieczne zalecane jest równieŝ pozostawienie oscyloskopu. Będzie on potrzebny do obserwacji zachowania się modelu. Właściwości oscyloskopu są dostępne w zakładce Scope/Properties (patrz Rys. 5). Zapamiętanie danych pomiarowych, w celu późniejszej obróbki off line, moŝna wymusić zaznaczając opcję save data to workspace. Dane zostaną zapisane w zmiennej o nazwie wpisanej do okienka edycyjnego Variable name. Ten sposób jest jedyny dla pomiarów w czasie rzeczywistym, poniewaŝ normalnie uŝywany blok To Workspace nie działa w RTWT. NaleŜy jeszcze zwrócić uwagę na ustawienie próbkowania. JeŜeli Decimation jest równe 1 to znaczy, Ŝe kaŝda próbka jest rysowana na wykresie i równocześnie jest zapamiętywana w zmiennej. Ustawienie Decimation równe 10 oznacza, Ŝe jedynie co dziesiąta próbka jest zapamiętywana i wyświetlana. Rys. 5. Parametry bloku oscyloskopu
Sposób zbierania danych pomiarowych w czasie rzeczywistym określa się równieŝ w opcji Tools/External Mode Control Panel. Po kliknięciu klawisza Signal Triggering otworzy nam się okno pokazane na Rys. 6. NaleŜy zaznaczyć blok oscyloskopu czyli States & Control (tzn., Ŝe tam będą zbierane dane pomiarowe), ustawić Source jako manual, a Duration równe liczbie próbek, którą będziemy chcieli zapamiętać na wykresach w oscyloskopie. Wielkość ta nie powinna być mniejsza niŝ zadeklarowana długość bufora w bloku Scope. NaleŜy takŝe zaznaczyć opcję Arm when connect to target. Rys. 6. Okno External Signal & Triggering Proces generacji kodu czasu rzeczywistego Kod jest generowany z uŝyciem Target Language Compiler (TLC) (patrz opis Simulink Target Language). Plik makefile jest uŝywany do automatycznego budowania i załadowania zbiorów *.obj związanych z zastosowanymi driverami systemu rzeczywistego Rys. 7 przedstawia jak muszą być ustawione opcje dotyczące procesu tworzenia kodu czasu rzeczywistego, Ŝeby proces ten nie generował błędów.
Rys. 7 Poprawnie ustawione parametry w opcji Simulation parameters Plik o nazwie rtwin.tlc zarządza procesem generacji. Plik crane3d_win_vc.tmf to specjalnie dla tego systemu napisany tzw. template makefile. Plik ten jest odpowiedzialny za generację kodu w C z uŝyciem kompilatora Visual C/C++. Zakładka Solver pozwala ustawić parametry symulacji. Konieczne jest ustawienie opcji Fixed Step czyli stałego kroku próbkowania. Wartość kroku próbkowania naleŝy ustawić równą 0.01 [s]. Uwaga jeŝeli w modelu uŝywane są bloki dyskretne naleŝy pamiętać, Ŝe bloki te i ustawiony krok próbkowania muszą mieć wspólny podzielnik. Po ustawieniu wszystkich parametrów moŝemy wygenerować kod czasu rzeczywistego. W tym celu naciskamy klawisz Build w zakładce Real Time Workshop opcji Simualtion/Simulation Parameters lub przy aktywnym oknie modelu naciśniemy kombinację klawiszy Ctrl+B. Pomyślna generacja kodu kończy się informacją w oknie Matlaba: Model My_System.rtd successfully created ### Successful completion of Real-Time Workshop build procedure for model: My_System Uruchomienie modelu czasu rzeczywistego W celu uruchomienia kodu czasu reczywistego musimy kolejno kliknąć klawisz Simulation/Connect to target kod zostanie załadowany do pamięci. Następnie naleŝy kliknąć opcję Run real-time code co uruchamia działanie modelu w czasie rzeczywistym. Uwaga Przed kaŝdym uruchomieniem modelu naleŝy ustawić wózek w Ŝądanej pozycji początkowej (zaleŝnej od rodzaju eksperymentu, który chcemy przeprowadzić) oraz uspokoić drgania wahadła. Jest to operacja konieczna, poniewaŝ system zeruje enkodery za kaŝdym uruchomieniem kodu czasu rzeczywistego. Klikając opcję Stop w menu okna modelu zatrzymujemy uruchomiony model w dowolnej chwili.
Wstępne ustawienia suwnicy Przed wykonaniem jakiegokolwiek eksperymentu z uŝyciem modelu suwnicy naleŝy ustalić początkowe połoŝenie. Jest to konieczne poniewaŝ inkrementalne enkodery muszą mieć ustaloną pozycję zerową. Zerowe połoŝenie suwnicy to tzw. Home czyli róg konstrukcji oznaczony tym napisem. NaleŜy kolejno wykonać następujące czynności: 1. Otworzyć Matlaba i wpisać komendę cr. UkaŜe nam się okno pokazane na Rys. 8 Rys. 8. Główne okno systemu sterowania suwnicą 2. Załaczyć zasilanie w interfejsie suwnicy 3. Włączyć zasilanie sygnałów sterujących silnikami czerwony przycisk w interfejsie. 4. Dwukrotnie kliknąć klawisz Go Home w oknie głównym 5. Po ustawieniu się wózka w pozycji Home naleŝy uspokoić drgania linki i kliknąć klawisz Reset Angles. Po wykonaniu tych operacji system ma wyzerowane pozycje i kąty i będzie prawidłowo interpretował pomiary. W razie jakichkolwiek zakłóceń lub awarii, po ustaleniu i usunięciu przyczyn naleŝy powtórzyć powyŝsze kroki w celu ponownego ustalenia pozycji zerowej. PoŜyteczne są funkcje ukryte pod klawiszem Manual Setup (Rys. 9). Mamy tam dostęp do wszystkich pomiarów w systemie oraz moŝemy sterować ręcznie w trzech osiach co pozwala nam ustawić suwnicę w dowolnym punkcie przestrzeni roboczej.
Rys. 9. Okno Manual Setup