1 / 24

Programowanie w języku Matlab

Programowanie w języku Matlab. Komunikacja z przyrządami pomiarowymi. 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 ;.

enan
Download Presentation

Programowanie w języku Matlab

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. 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 – 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 = @mycallback; s.BytesAvailableFcn = {'mycallback'}; Zawartość linii definicji funkcji: function mycallback(obj, event) Argumenty obowiązkowe: obj – obiekt komunikacyjny, event – struktura z informacją o zdarzeniu.

  11. 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);

  12. Funkcji obsługi zdarzenia można przekazać więcej argumentów. s.TimerFcn = {@pomiar, '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.

  13. 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ń,

  14. 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.

  15. 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;

  16. 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ń.

  17. 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;

  18. 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');

  19. loadlibrary('c:\mcc\cbw32.dll','c:\mcc\c\cbw.h') unloadlibrary('cbw32') sprawdza, czy biblioteka jest załadowana podaje listę funkcji z biblioteki libisloaded('cbw32') libfunctions('cbw32') podaje listę funkcji wraz z ich prototypami libfunctions('cbw32','-full') 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)

  20. 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)

  21. 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

  22. 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

  23. 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

More Related