Modyfikacja oprogramowania ROMIKa dla Modbus

Transkrypt

Modyfikacja oprogramowania ROMIKa dla Modbus
Wrocław 2001
Projekt
Modyfikacja oprogramowania
ROMIKa dla Modbus
Prowadzący:
Dr inż. Marek Wnuk
Wykonał:
Ryszard Sarzyński
Założenia projektowe.
Zadaniem projektu było zmodyfikowanie istniejącego oprogramowania
ROMIKa, w ten sposób aby sterowanie było realizowane przez protokół
Modbus.
W pierwotnym oprogramowaniu ROMIKa dopuszczalna było sterowanie
robotem ręczne, lub automatyczne. Obsługa robota polegała na
podawaniu wartości prędkości i pozycji do mikrokontrolera CPU32.
Komunikacja realizowana była poprzez interfejs SPI, w którym przesyłanie
odbywa się przy pomocy szeregowej transmisji synchronicznej. Teraz
komunikacja realizowana jest poprzez protokół Modbus w trybie ASCII.
Moim założeniem było połączenie oprogramowania ROMIKa z Modbus,
stworzenie 20 rejestrów, których opis przedstawiam poniżej:
Nr
rejestru
1020
1001
...
1006
1007
...
1012
1013
1014
...
1019
Opis
Rejestr statusowy
Rejestry prędkości
Rejestry pozycjonowania
Rejestr rozkazowy
Rejestry odczytu pozycji
Rejestr statusowy
Najstarszy bit (15) jeżeli jest równy 1 tzn., że robot stracił
synchronizacje. Bity od 0..5 odpowiadają poszczególnym elementom
łańcucha kinematycznego. Wartość 1 oznacza, że przegub jest w ruchu.
Warto jest wyprowadzić również bity dla wartości krańcowych.
Dzięki temu rejestrowi mielibyśmy bieżące informacje na temat, czy
dane ramię robota zakończyło już pewną operację, czy też nadal ją
wykonuje. Wprowadzenie rejestru statusowego niesie ze sobą korzyść
informacyjną w przypadku synchronizacji robota, tzn. zostałoby
zakomunikowane kiedy synchronizacja została zakończona.
Poprzez rejestry prędkości i pozycjonowania mamy możliwość
zadawania pewnych wartości mikrokontrolerowi. Aby cały proces
przebiegał poprawnie najpierw są ustawiane rejestry prędkości, a dopiero
później rejestry pozycjonowania. Jest to logiczne, dlatego że jeżeli poprzez
Modbus wysyłam pewną grupę rejestrów i są one podawane od
najmniejszego do największego i jeżeli ustawiam wszystko naraz prędkość
i pozycje, to po zapisie pozycji robot to wykonuje. ROMIK nie posiada
funkcji ustawiania i dopiero później wysyłania.
Po rejestrach pozycjonowania znajduje się rejestr
rozkazowy. Poprzez niego wysyłamy mikrokontrolerowi dwie komendy:
- synchronizacji
- stopu silników.
Rejestr ten może mieć trzy wartości: `0`, `1`, `2`.
0 – nic się nie dzieje,
1 – synchronizacja,
2 – stop silników.
Po każdym jednorazowym wykonaniu operacji rejestr ustawia się na `0`.
Rejestry 1014-1019 służą do odczytu wartości pozycji robota, także w
trakcie ruchu. W programie głównym jest pętla która odświeża te wartości
cyklicznie.
Obsługa rejestrów jest oparta na przerwaniach.
Aby program mógł działać konieczne jest odblokowanie przerwań.
Robot ROMIK znajdujący się w pracowni robotyki Instytutu Cybernetyki
Technicznej Politechniki Wrocławskiej sterowany jest mikrokontrolerem
CPU32. Zadaje się 6 pozycji dla takich elementów jak:
-
Wieża
Ramię
Przedramię
Nadgarstek (góra/dół)
Nadgarstek (obrót)
Chwytak
Ze względu na to iż nie posiadam wystarczającej wiedzy na temat ilości
Silników w manipulatorze Romik, a w poprzedniej wersji oprogramowania
nie jest uwzględniona wartość prędkości dla obrotu nadgarstka przyjmuję,
że taka prędkość może istnieć i dlatego umieściłem 6 rejestrów prędkości.
Także w poprzedniej wersji oprogramowania ROMIKa prędkości dla
ułatwienia podawane były poprzez wybór:
1
2
3
4
5
6
–
–
–
–
–
–
300
150
75
37
18
9
kroków/sek
kroków/sek
kroków/sek
kroków/sek
kroków/sek
kroków/sek
W rejestrach teraz tą wartość można ustawiać płynnie.
Układ sterujący ROMIKa stanowi mikrokontroler CPU32. Jest to 32-bitowy
procesor o poborze mocy max. 0,6 [W], wykorzystujący do generacji
zegara oscylator kwarcowy 32768 [Hz]. Mikroprocesor MC68332 zalicza
się do rodziny mikrokontrolerów firmy Motorola. Wszystkie te procesory
maja identyczną jednostkę centralną. W Polsce znane są głównie
z mikrokomputerów: ATARI ST, Amiga, Macintosh.
Protokół Modbus jest udostępniony w pracowni robotyki ICT Politechniki
Wrocławskiej.
Autorem Modbus’a jest dr Marek Wnuk.
******************************
Funkcja RunManual() jako argument bierze nr silnika i zadaną pozycję, a
zwraca wartość liczbową:
0 ruch wykonany
-1 stoi na krańcówce i ruch jest zapodany w kierunku krańcówki
-2 ruch przekroczył maksymalne położenie ( rozsynchronizował się)
Te informacje można wykorzystać w rejestrze statusowym. Ze względu na
12 bitów ( 6 silników) byłby wtedy potrzebny rejestr statusowy No2.
Funkcja komendy() pobiera dwa argumenty, tj. pierwszy zapisywany
rejestr Modbusa, oraz ilość zapisywanych rejestrów. Zapis do rejestru
rozkazowego nie może być realizowany w tym samym czasie co zapisy do
innych rejestrów, ponieważ ich funkcje są sprzeczne. Funkcja ta jest
wywoływana na 5 poziomie przerwania.
W pętli main() wykonywana jest inicjacja QSM, oraz procedury interfejsu
Modbusa.
W main w pętli while{...} przez cały czas odświeżane są rejestry 10141020, poza chwilą obsługi przerwania, kiedy obsługiwane są wartości
nadesłane przez użytkownika poprzez Modbus.

Podobne dokumenty