PDF 223Kb - Marek Piasecki
Transkrypt
PDF 223Kb - Marek Piasecki
I. Twój pierwszy program w języku NQC W tym rozdziale nauczymy się jak napisać bardzo prosty program w języku NQC w środowisku RCX CommandCenter. Zaprogramujemy robota tak, aby przez 4 sekundy poruszał się do przodu, następnie przez kolejne 4 sekundy do tyłu, po czym powinien się zatrzymać. Nie jest to spektakularne zadanie, ale pozwoli nam w prosty sposób przedstawić podstawowe idee programowania. I pokaże jakie jest to łatwe! Ale zanim napiszemy program, najpierw trzeba będzie zbudować robota. Konstruowanie robota Robot, który wykorzystamy w naszym przykładzie, jest prostą wersją robota “top-secret” opisanego na stronach 39-46 twojej konstruktopedii. My wykorzystamy tylko podstawowy układ jezdny, w związku z tym można pominąć dobudowanie frontowych czujników. Również silniki napędzające można zamontować trochę inaczej – z tyłu klocka RCX. Twój robot powinien wyglądać mniej więcej tak jak ten na ilustracji poniżej: Sprawdź również, czy wieżyczka (transmiter komunikacji pomiędzy twoim komputerem PC i klockiem RCX) jest poprawnie podłączona do portu COM komputera i jest ustawiona na daleki zakres nadawania. (Możesz użyć standardowego oprogramowania dostarczanego wraz z zestawem RIS do sprawdzenia czy twój robot i transmisja PC↔RCX działa poprawnie.) Praca ze środowiskiem RCX Command Center Nasz program napiszemy używając środowiska RCX Command Center. Uruchom je za pomocą podwójnego kliknięcia na ikonie RcxCC. (Zakładam, że już zainstalowałeś RCX Command Center. Jeżeli nie to załaduj pliki instalacyjne tego oprogramowania z odpowiedniej strony WWW ( http://www.cs.uu.nl/people/markov/lego/ ) rozpakuj, zapamiętaj w wybranej przez ciebie kartotece i zainstaluj poprzez uruchomienie programu instalacyjnego SetUp.EXE. Po uruchomieniu, program RCX Command Center zapyta się o typ wykorzystywanego klocka (RCX czy CyberMaster) oraz do którego portu jest podłączony Transmiter (wieżyczka). Włącz swojego robota i nacisnij klawisz OK. Jeżeli wszystko jest poprawnie podłączone, to program automatycznie rozpozna numer portu COM do którego podłączony jest Transmiter oraz typ klocka. Na ekranie powinien się ukazać następujący interfejs użytkownika (ale bez wewnętrznego okna z naszym przykładowym programem). Interfejs środowiska RCXcc (Command Center) wygląda jak standardowy edytor tekstowy, z typowym menu, listwą przycisków do otwierania i zapamiętywania plików, drukowania, edytowania itd. W odróżnieniu od zwykłych edytorów tekstowych, RCXcc posiada dodatkowe opcje menu związane z kompilacją i ładowaniem programów dla robota (Compile) oraz narzędzia przydatne do pisania i uruchamiania programów (Tools). W tym momencie możesz je zignorować. My zamierzamy napisać nowy program, w związku z tym kliknij przycisk New File aby utworzyć nowe puste okno. Pisanie programu W nowo otwartym oknie wpisz następujący program: task main() { OnFwd(OUT_A); OnFwd(OUT_C); Wait(400); OnRev(OUT_A+OUT_C); Wait(400); Off(OUT_A+OUT_C); } Za pierwszym razem to może wyglądać trochę skomplikowanie więc przeanalizujmy treść kolejnych linijek tego programu. Programy w języku NQC składają się z zadań (tasks) które mogą być wykonywane współbieżnie. Nasz pierwszy program będzie miał tylko jedno zadanie, które nazwiemy main. Każdy program musi mieć zadanie o nazwie main , które będzie jako pierwsze wykonywane przez robota. Więcej o uruchamianiu zadań nauczymy się w rozdziale Błąd! Nie można odnaleźć źródła odsyłacza.. -2- Zadanie składa się z kilku/kilkunastu poleceń nazywanych również instrukcjami. Instrukcje są ujęte w nawiasy klamrowe, aby zaznaczyć które z nich należą do danego zadania. Każda instrukcja jest zakończona średnikiem. W ten sposób wyraźnie widać gdzie się kończy jedna instrukcja a gdzie się zaczyna następna. Tak więc wszystkie zadania w ogólności będą wyglądać następująco: task main() { instrukcja1; instrukcja2; … } Nasz program ma sześć instrukcji. Popatrzmy na każdą z nich osobno: OnFwd(OUT_A); Ta instrukcja mówi robotowi, że powinien włączyć zasilanie (On) na wyjściu A klocka RCX, to znaczy aby silnik podłączony do wyjścia A poruszał się do przodu (Forward). Silnik będzie się poruszał z maksymalną prędkością jeżeli wcześniej nie ustawiliśmy prędkości. Później zobaczymy jak można to zrobić. OnFwd(OUT_C); Taka sama instrukcja uruchomi silnik C. Po tych dwóch instrukcjach obydwa silniki będą uruchomione i robot będzie się poruszał do przodu. Wait(400); Teraz jest czas aby chwilę poczekać. Ta instrukcja mówi robotowi, że powinien odczekać 4 sekundy. Argument instrukcji, to jest liczba pomiędzy nawiasami, zadaje ilość tiknięć zegara jakie należy odczekać. Każde tiknięcie trwa 1/100 sekundy (jedną milisekundę). Tak więc bardzo dokładnie możemy zadawać długość czasu jaki robot powinien odczekać. Przez 4 sekundy robot nie robi nic nowego i kontynuuje rozpoczęte poruszanie się do przodu. OnRev(OUT_A+OUT_C); Teraz robot przesunął się już wystarczająco daleko, więc powiemy mu aby zmienił kierunek ruchu, tzn zaczął się poruszać do tyłu.. Zauważmy, że możemy jednocześnie sterować obydwoma silnikami podając jako argument instrukcji OUT_A+OUT_C. W taki sam sposób moglibyśmy połączyć również dwie pierwsze instrukcje naszego programu. Wait(400); Ponowne odczekanie 4 sekund. Off(OUT_A+OUT_C); I na koniec zatrzymujemy robota poprzez wyłączenie zasilania (Off) obu silników. I to jest cały program. Robot porusza się przez 4 sekundy do przodu, potem przez 4 sekundy do tyłu i na zakończenie staje. Pewnie zauważyłeś zmiany koloru tekstu kiedy wpisywałeś treść programu. Te zmiany dokonują się automatycznie. Wszystkie teksty pisane kolorem niebieskim to instrukcje dla robota, identyfikatory silnika lub inne symbole który są znane robotowi. Słowo task jest wytłuszczone ponieważ jest ono ważnym (zarezerwowanym) słowem w języku NQC. Inne ważne słowa również będą drukowane w sposób wytłuszczony. Te kolory są przydatne do sprawdzania czy nie popełniasz jakiś błędów literowych podczas wpisywania poleceń. Uruchomienie programu Kiedy już napisałeś swój program, to teraz musi on zostać skompilowany (to znaczy przetłumaczony na postać zrozumiałą dla procesora klocka poprzez polecenie Compile ) i wysłany do robota poprzez nadajnik promieniowania podczerwonego – Transmiter (ten proces będziemy nazywać ładowaniem programu – download program ). Na górze okna edytora znajduje się odpowiedni przycisk powodujący wykonanie tych operacji (patrz ilustracja na poprzedniej stronie → przycisk Compile). Jeżeli wszystko przebiegnie bez błędów, to twój program został skompilowany i załadowany do klocka RCX. Teraz możesz uruchomić swój program. Aby to zrobić naciśnij zielony klawisz RUN na klocku RCX lub kliknij przycisk Run Program w oknie edytora. Czy robot zachowuje się w oczekiwany sposób? Jeżeli nie to sprawdź połączenia kabelków łączących silniki z portami A i C. -3-