Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie w języku Matlab

Podobne prezentacje


Prezentacja na temat: "Programowanie w języku Matlab"— Zapis prezentacji:

1 Programowanie w języku Matlab
Komunikacja z przyrządami pomiarowymi

2 Komunikacja z przyrządami z interfejsem RS232
s = serial('COM1'); fopen(s); s.Terminator = 'CR'; s.Timeout = 1; fprintf(s, '#02'); t = fscanf(s); fclose(s); delete(s); clear s;

3 utworzenie obiektu interfejsowego
otwarcie połączenia obiektu z portem szeregowym ustawienie niektórych własności obiektu interfejsowego: Terminator – znak występujący na końcu wiadomości przesyłanych między komputerem a przyrządem pomiarowym (domyślnie LF) Timeout – czas oczekiwania w sekundach na zakończenie zapisu i odczytu wiadomości (domyślnie 10 s) s = serial('COM1'); fopen(s); s.Terminator = 'CR'; s.Timeout = 1;

4 Ustawienia własności obiektu można dokonać przy jego tworzeniu:
s = serial('COM1', 'Terminator', 'CR', 'Timeout', 1) albo przy użyciu funkcji set: set(s, 'Terminator', 'CR', 'Timeout', 1) Listę wszystkich własności obiektu uzyskuje się przy użyciu funkcji get. W tym przypadku istotne są jeszcze własności: InputBufferSize = 512 OutputBufferSize = 512 BaudRate = 9600 DataBits = 8 Parity = none StopBits = 1 Podane wartości są wartościami domyślnymi, w przyrządzie pomiarowym ustawiono taką samą prędkość transmisji i format znaku.

5 zamknięcie połączenia obiektu z portem szeregowym
zapis do bufora wyjściowego komunikatu z rozkazem dla przyrządu pomiarowego, w tym przypadku na końcu komunikatu dopisywany jest znak CR odczyt z bufora wejściowego komunikatu z odpowiedzią z przyrządu pomiarowego, znak CR zostanie również zapamiętany w zmiennej t (można też użyć funkcji fgetl lub fgets) fprintf(s, '#02'); t = fscanf(s); Podane funkcje wykorzystuje się wówczas, gdy z przyrządem pomiarowym wymieniane są komunikaty tekstowe, złożone – z wyjątkiem znacznika końca – z tzw. drukowalnych znaków kodu ASCII. Jeżeli z przyrządem wymieniane są komunikaty binarne, złożone ze znaków o dowolnych kodach, trzeba użyć funkcji: fwrite i fread. zamknięcie połączenia obiektu z portem szeregowym usunięcie obiektu z pamięci oraz przestrzeni roboczej Matlaba fclose(s); delete(s); clear s;

6 Operacje synchroniczne i asynchroniczne
Zapis i odczyt komunikatów może się odbywać w trybie: synchronicznym (domyślnie) – do chwili zakończenia operacji blokowany jest dostęp do wiersza poleceń Matlaba, asynchronicznym – dostęp do wiersza poleceń nie jest blokowany, tryb przydatny przy przesyłaniu komunikatów o znacznych rozmiarach.

7 Koniec operacji zapisu następuje, gdy spełniony jest jeden z warunków:
zapisano wszystkie dane (fprintf, fwrite), upłynął czas oczekiwania (j. w.). Koniec operacji odczytu następuje, gdy spełniony jest jeden z warunków: odebrano znak końca komunikatu (fscanf, fgetl, fgets), odebrano zadaną liczbę danych (fscanf, fread), upłynął czas oczekiwania (wszystkie funkcje), bufor wejściowy został zapełniony (wszystkie funkcje). W trybie asynchronicznym – także przy użyciu funkcji stopasync.

8 Zapis komunikatu w trybie asynchronicznym:
fprintf(s, ..., 'async') Własność ReadAsyncMode określa, czy odbiór komunikatu z urządzenia pomiarowego ma się rozpocząć automatycznie (continuous) czy na polecenie użytkownika (manual), do czego służy funkcja readasync(). Własność TransferStatus – stan realizacji operacji asynchronicznej. Własność BytesAvailable – ilość bajtów zgromadzonych w buforze wejściowym.

9 Komunikacja sterowana zdarzeniami
Typ zdarzenia Własności związane ze zdarzeniem Break interrupt BreakInterruptFcn Bytes available* BytesAvailableFcn BytesAvailableFcnCount BytesAvailableFcnMode Error* ErrorFcn Output empty* OutputEmptyFcn Pin status PinStatusFcn Timer TimerFcn TimerPeriod  – tylko przy operacjach w trybie asynchronicznym

10 Funkcję obsługi zdarzenia (ang
Funkcję obsługi zdarzenia (ang. callback function) można zapisać w m-pliku lub w łańcuchu. Przyporządkowanie funkcji obsługi zdarzenia: s.BytesAvailableFcn s.BytesAvailableFcn = {'mycallback'}; Zawartość linii definicji funkcji: function mycallback(obj, event) Argumenty obowiązkowe: obj – obiekt komunikacyjny, event – struktura z informacją o zdarzeniu.

11 Typ zdarzenia Pole Zawartość pola
Break interrupt Type BreakInterrupt Data.AbsTime [day month year hour min sec] Bytes available BytesAvailable Error Data.Message Komunikat o błędzie Output empty OutputEmpty Pin status PinStatus Data.Pin CarrierDetect, ClearToSend, DataSetReady lub RingIndicator Data.PinValue on lub off Timer

12 s.TimerPeriod = 5; s.TimerFcn = @pomiar fopen(s);
function pomiar(obj, event) fid = fopen('Pomiary.txt', 'a'); fprintf(obj, '#02', 'async'); readasync(obj); response = fscanf(obj); fprintf(fid, '%s %s\n', datestr(event.Data.AbsTime, 13), ... response(2:end)); fclose(fid);

13 Funkcji obsługi zdarzenia można przekazać więcej argumentów.
s.TimerFcn = 'wyniki.txt'} s.TimerFcn = {'pomiar', 'wyniki.txt'} function pomiar(obj, event, filename) fid = fopen(filename, 'a'); : fclose(fid); Funkcjom, których treść podaje się w łańcuchu nie przekazuje się argumentów.

14 Instrument Control Toolbox
umożliwia komunikację z przyrządami pomiarowymi: przez interfejs GPIB, przez interfejs wspierany przez standard VISA (ang. Virtual Instrument Standard Architecture): RS232, USB, GPIB, VXI oraz GPIB-VXI, przez sieć komputerową przy użyciu protokołów: TCP/IP oraz UDP, użycie obiektów interfejsowych wymaga znajomości języka programowania przyrządu, obiekty przyrządowe, których użycie nie wymaga znajomości języka programowania przyrządu, korzystają z pośrednictwa sterowników: VXIplug&play, IVI (ang. Interchangeable Virtual Instruments), Matlab Instrument Driver, możliwe wykorzystanie zdarzeń,

15 dostępne narzędzia z interfejsem graficznym:
Test & Measurement Tool – wykrywanie podłączonych przyrządów, ich konfigurowanie, zapis/odczyt danych, automatyczna generacja skryptów z zapisem sesji komunikacyjnej z przyrządem, wizualizacja zbieranych danych, eksport danych do przestrzeni roboczej Matlaba, Instrument Driver Editor – tworzenie sterowników przyrządowych, Instrument Driver Testing Tool.

16 Pomiar częstotliwości przy użyciu oscyloskopu firmy Tektronix
d = icdevice('tektronix_tds210', gpib('ni',0,1)); connect(d); data = invoke(d, 'measure', 1); disconnect(d); delete(d); clear d;

17 Data Acquisition Toolbox
obsługa kart pomiarowych firm: Advantech, Measurement Computing, National Instruments, zbieranie danych także za pośrednictwem karty dźwiękowej, funkcje pomiarowe są realizowane przy użyciu obiektów związanych z zasobami karty – wejściami i wyjściami: analogowymi, cyfrowymi i licznikowymi, konfigurowanie zasobów odbywa się przez ustawianie własności obiektów. możliwe wykorzystanie zdarzeń.

18 Pobranie bloku danych z wejść analogowych karty pomiarowej firmy Measurement Computing
AI = analoginput('mcc',1); addchannel(AI,0:1); set(AI,'SampleRate',11025); set(AI,'SamplesPerTrigger',22050); start(AI); wait(AI,3); data = getdata(AI); delete(AI); clear AI;

19 Wykorzystanie sterowników z bibliotek dołączanych dynamicznie
loadlibrary('c:\mcc\cbw32.dll','c:\mcc\c\cbw.h'); calllib('cbw32','cbSetConfig',2,0,0,7,4); [Err, ADCRes] = calllib('cbw32','cbAIn',0,0,0,0); [Err, Voltage] = calllib('cbw32','cbToEngUnits',0,0,ADCRes,0); unloadlibrary('cbw32');

20 sprawdza, czy biblioteka jest załadowana
loadlibrary('c:\mcc\cbw32.dll','c:\mcc\c\cbw.h') unloadlibrary('cbw32') libisloaded('cbw32') libfunctions('cbw32') sprawdza, czy biblioteka jest załadowana podaje listę funkcji z biblioteki libfunctions('cbw32','-full') podaje listę funkcji wraz z ich prototypami Prototypy użytych funkcji w Matlab: int32 cbSetConfig(int32, int32, int32, int32, int32) [int32, uint16Ptr] cbAIn(int32, int32, int32, uint16Ptr) [int32, singlePtr] cbToEngUnits(int32, int32, uint16, singlePtr)

21 Typ danych w Matlab Typ danych w C
W dokumentacji biblioteki są podane prototypy funkcji dla języków: C/C++, Visual Basic i Delphi. Prototypy użytych funkcji w języku C/C++: int cbSetConfig(int InfoType, int BoardNum, int DevNum, int ConfigItem, int ConfigVal) int cbAIn(int BoardNum, int Channel, int Range, unsigned short *DataValue) int cbToEngUnits(int BoardNum, int Range, unsigned short DataVal, float *EngUnits) Typ danych w Matlab Typ danych w C uint16 unsigned short int32 int uint16Ptr unsigned short * singlePtr float *

22 Ustawienie liczby kanałów analogowych:
calllib('cbw32','cbSetConfig',2,0,0,7,4) InfoType ConfigVal BoardNum DevNum ConfigItem UWAGA: Nie można korzystać ze stałych zawartych w pliku nagłówkowym! InfoType – kategoria danej konfiguracyjnej, 2 to wartość stałej BOARDINFO BoardNum – numer karty w systemie, nadany przez program konfiguracyjny InstaCal DevNum – numer urządzenia, istotny w przypadku wejść-wyjść cyfrowych i układów liczników ConfigItem – numer danej konfiguracyjnej, 7 to wartość stałej BINUMADCHANS ConfigVal – wartość danej konfiguracyjnej, karta USB-1208LS może mieć 4 kanały symetryczne lub 8 niesymetrycznych

23 Odczyt wyniku przetwarzania A/C z wybranego kanału analogowego:
[Err, ADCRes] = calllib('cbw32','cbAIn',0,0,0,0) BoardNum *DataValue Channel Range Channel – numer kanału analogowego (0-3 przy kanałach symetrycznych) Range – zakres pomiarowy, 0 to wartość stałej BIP5VOLTS, zakres pomiarowy ±5V *DataValue – wskaźnik do zmiennej z wynikiem pomiaru, wartości 0 odpowiada wskaźnik pusty Obliczenie wartości napięcia: [Err, Voltage] = calllib('cbw32','cbToEngUnits',0,0,ADCRes,0) BoardNum *EngUnits Range DataValue *EngUnits – wskaźnik do zmiennej z wartością napięcia

24 Użycie obiektów wskaźnikowych
Typ wskaźnika Wartość początkowa wskazywanej danej ADCResPtr = libpointer('uint16Ptr',0); VoltagePtr = libpointer('singlePtr',0); calllib('cbw32','cbAIn',0,0,0,ADCResPtr); calllib('cbw32','cbToEngUnits',0,0,ADCResPtr.Value,VoltagePtr); odwołanie do wskazywanej danej


Pobierz ppt "Programowanie w języku Matlab"

Podobne prezentacje


Reklamy Google