Help!
pi±tek, 10 luty 2012
Advertisement
HOME arrow COMPUTERS arrow Programing arrow Sterowniki Matlab

MAIN MENU
HOME
PROFILE
ELECTRONICS
COMPUTERS
SERVICE
MUSIC
RADIO
FAQ
HALL OF SHAME
MINDLOG
GUESTBOOK
CONTACT
Search
Sterowniki Matlab E-mail
User Rating: / 1
PoorBest 
pi±tek, 08 czerwiec 2007
Sorry there is no translation available yet. Please let me know if You want this article translated :-)

Tworząc nowe urządzenia czy systemy o dużym stopniu zaawansowania, musimy posiadać mechanizm weryfikacji wyników, którym może być MATLAB. Aby przesyłać dane do matlaba, można wykorzystać gotowe toolbox'y które obsługują jedynie standardowy sprzęt lub samemu napisać sterownik własnego urządzenia - co daje większe możliwości w dostosowaniu metody do potrzeb, nie wymaga też żadnych dodatkowych licencji.


Jak stworzyć własny sterownik urządzenia w Matlabie?

Matlab nie tylko potrafi generować kod wykonywalny na podstawie swoich m-plików (toolbox compiler), ale również wykorzystywać zewnętrzne programy czy biblioteki (o czym można poczytać w dziale "External Interfaces" podręcznika pomocy) do wykonywania potrzebnych operacji. Niemalże nieograniczone możliwości wymiany danych oraz sterowania zewnętrznymi aplikacjami dają:

  • obsÅ‚uga zewnÄ™trznych bibliotek dynamicznych (so/dll)
  • wywoÅ‚ywanie zewnÄ™trznych procedur jÄ™zyka C lub Fortran z poziomu plików MEX
  • tworzenie od podstaw wÅ‚asnych plików MEX w jÄ™zyku C lub Fortran
  • eksportowanie/importowanie danych przy użyciu plików MAT
  • wykorzystywanie elementów skÅ‚adowych matlaba w programach C lub Java

Konstruktorów interesuje głównie stworzenie zestawu funkcji umożliwiających konfigurację oraz wymianę danych z urzadzeniem, co można rozwiązać na dwa sposoby - plik MEX (dedykowany jedynie dla matlaba) lub bibliotekę dynamiczną. MEX to zestaw dynamicznie linkowanych procedur, stworzonych w języku C lub Fortran, które mogą być wywołane bezpośrednio w wiersza poleceń interpretera matlaba. Stworzenie biblioteki dynamicznej daje możliwość wykorzystania jej również w innych programach - jest to bardziej uniwersalne a wiec preferowane "opakowanie" naszej funkcjonalności. Dokładny opis znajduje się w dziale "MATLAB Interface to Generic DLLs" podręcznika pomocy.

Interfejs matlaba do bibliotek dynamicznych

Funkcje umieszczone w bibliotekach dynamicznych mogą być załadowane do pamięci matlaba i stać się bezpośrednio dostępne z wiersza poleceń inerpretera. W większkości przypadków konwersja typów odbywa się automatycznie (na format matlaba). Można również używać bibliotek dynamicznych stworzonych w innych językach niż C, ale interfejs biblioteki musi być zgodny z językiem C.

Obsługa bibliotek

Otwieranie biblioteki
Aby mieć dostęp do danych zawartych w bibliotece, należy ją wczytać poleceniem:
loadlibrary('nazwa_biblioteki', 'nazwa_pliku_naglowkowego')
,gdzie:

  • nazwa_biblioteki - to nazwa pliku z bibliotekÄ… dynamicznÄ… (so/dll), w której zawarte sÄ… interesujÄ…ce nas funkcje.
  • nazwa_pliku_naglowkowego - to nazwa wymaganego pliku nagłówkowego zawierajÄ…cego prototypy funkcji zawartych w bibliotece.

Zamykanie biblioteki
Aby zamknąć wczytaną uprzednio bibliotekę należy wykonać polecenie:
unloadlibrary nazwa_biblioteki

Zawartość biblioteki - funkcje składowe
Aby wyświetlić funkcje zawarte w bibliotece należy wykonać polecenie:
libfunctions('nazwa_biblioteki') - wynikiem jest tablica tekstowa z nazwami funkcji
libfunctionsview('nazwa_biblioteki') - nazwy funkcji wyświetlone są w tabelce w nowym oknie
Do wspomnianych funkcji można dodać przełącznik "-full", który wyświeli dodatkowe informacje o funkcjach, na przykład ich parametry wraz z typami danych.

Wywoływanie funkcji
Do wykonywania funkcji bibliotecznych służy funkcja:
calllib('nazwa_biblioteki', 'nazwa_funkcji', arg1, ..., argN)
,gdzie

  • nazwa_biblioteki - to nazwa otwartej uprzednio biblioteki
  • nazwa_funkcji - to nazwa interesujÄ…cej nas funkcji
  • arg1,..,argN - to lista parametrów funkcji

Pełną specyfikację funkcji można znaleźć w podręczniku pomocy.

Przykład

Przykład składa się z trzech funkcji. Dwie z nich zwracają łancuch znaków tekstowych jako wynik wykonania, a trzecia służy do dodawania dwóch liczb. Funkcje te mogą łatwo zostać zastąpione zestawem instrukcji sterujących rozwijanym urządzeniem.

Plik nagłowkowy test.h:
char* test();
char* test2();
int test_add(int a, int b);

Plik źródÅ‚owy test.c: #include "test.h"

char* test(){
        return "test function 1 result\n";
}

char* test2(){
        return "test function 2 result\n";
}

int test_add(int a, int b){
        return a+b;
}

Kompilacja:
gcc -shared -o test.so test.c

Uruchomienie w matlabie
Zmieniamy aktualny katalog na ten, w którym znajduje się nasza skompilowana biblioteka, a następnie wykonujemy:
>> loadlibrary test.so test.h
>> calllib('test', 'test')

ans =

test function 1 result


>> calllib('test', 'test2')

ans =

test function 2 result


>> calllib('test', 'test_add')
??? Error using ==> calllib
No method with matching signature.

>> calllib('test', 'test_add', 1, 2)

ans =

     3

>> unloadlibrary test


Artykuł zamieszczony jest również na stronie http://cyber.ise.pw.edu.pl

Projekt jest częścią mojej pracy dyplomowej, oraz tematem obranym na przedmiocie "Matlab w Zaawansowanych Metodach Obliczeniowych", który to przedmiot studentom PW EiTI szczerze polecam :-)
 
Next >


Google
 

Top!