Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


Prezentacja na temat: "Programowanie w języku Matlab Komunikacja z przyrządami pomiarowymi."— 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 s = serial('COM1'); fopen(s); s.Terminator = 'CR'; s.Timeout = 1; 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)

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 fprintf(s, '#02'); t = fscanf(s); 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 ) 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. fclose(s); delete(s); clear s; zamknięcie połączenia obiektu z portem szeregowym usunięcie obiektu z pamięci oraz przestrzeni roboczej Matlaba

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 zdarzeniaWłasności związane ze zdarzeniem Break interruptBreakInterruptFcn Bytes available * BytesAvailableFcn BytesAvailableFcnCount BytesAvailableFcnMode Error * ErrorFcn Output empty * OutputEmptyFcn Pin statusPinStatusFcn TimerTimerFcn TimerPeriod – tylko przy operacjach w trybie asynchronicznym

10 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 zdarzeniaPoleZawartość pola Break interrupt TypeBreakInterrupt Data.AbsTime[day month year hour min sec] Bytes available TypeBytesAvailable Data.AbsTime[day month year hour min sec] ErrorTypeError Data.AbsTime[day month year hour min sec] Data.Message Komunikat o błędzie Output emptyTypeOutputEmpty Data.AbsTime[day month year hour min sec] Pin statusTypePinStatus Data.AbsTime[day month year hour min sec] Data.PinCarrierDetect, ClearToSend, DataSetReady lub RingIndicator Data.PinValueon lub off TimerTypeTimer Data.AbsTime[day month year hour min sec]

12 s.TimerPeriod = 5; s.TimerFcn 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 d = icdevice('tektronix_tds210', gpib('ni',0,1)); connect(d); data = invoke(d, 'measure', 1); disconnect(d); delete(d); clear d; Pomiar częstotliwości przy użyciu oscyloskopu firmy Tektronix

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 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; Pobranie bloku danych z wejść analogowych karty pomiarowej firmy Measurement Computing

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 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 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 MatlabTyp danych w C uint16unsigned short int32int uint16Ptrunsigned short * singlePtrfloat *

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 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 Użycie obiektów wskaźnikowych


Pobierz ppt "Programowanie w języku Matlab Komunikacja z przyrządami pomiarowymi."

Podobne prezentacje


Reklamy Google