1.12k likes | 1.4k Views
Komputeryzacja pomiarów. Waldemar Tokarz tokarz@agh.edu.pl tel. 29-02. Literatura. LabView Manual www.ni.com . Jeffrey Travis, Jim Kring „LabVIEW for Everyone: Graphical Programming Made Easy and Fun” 2006.
E N D
Komputeryzacja pomiarów Waldemar Tokarz tokarz@agh.edu.pl tel. 29-02
Literatura • LabView Manual www.ni.com. • Jeffrey Travis, Jim Kring „LabVIEW for Everyone: Graphical Programming Made Easy and Fun” 2006. • Wiesław Tłaczała „Środowisko LabView w eksperymencie wspomaganym komputerowo” WNT 2002”.
IEEE 488.*, GPIB (General Purpose Interface Bus) 1965r - HP-IB, 1MB/s. 1987 – ANSI/IEEE 488.1. 1987 – ANSI/IEEE 488.2 Standard Commands for Programmable Instruments (SCPI ). 1993 – Propozycja NI HS488, IEEE 488.3. (8 MB/s) • Odwrotna logika TTL • 0.8V 1 logiczna • 2V logiczne 0. • 1MB/s. • Maksymalna długość kabli 20 M. • Maksymalna długość pomiędzy urządzeniami 4m.
Handshake NRFD (not ready for data) – Wskazuje czy urządzenie jest gotowe na przyjęcie danych. NDAC (not data accepted) – Wskazuje czy urządzenie zaakceptowało dane. DAV (data valid) – Wskazuje czy sygnał na przewodach danych są stabilne. Sygnałem tym steruje urządzenie przesyłające dane. Interface Management Lines ATN (attention) - Kontroler ustawia 1 kiedy używa linii danych do przesłania komendy, 0 do przesyłania danych. IFC (interface clear) – Kontroler ustawia 1 żeby zainicjować magistralę. REN (remote enable) – Za pomocą tej linii kontroler ustawia urządzenia w modzie REMOTE lub LOCAL. SRQ (service request) – Każde z urządzeń może zażądać od kontrolera ustawienia pracy w modzie asynchronicznej. EOI (end or identify) – Talker używa jej do zaznaczenia końca przesyłania rozkazu. Kontroler używa tego sygnału do uzyskania odpowiedzi od urządzenia na szynie danych.
DIO1 DIO2 DIO3 DIO4 EOI DAV NRFD NDAC IFC SRQ ATN SHIELD DIO5 DIO6 DIO7 DIO8 REN GND DAV GND NRFD GND NDAC GND IFC GNDSRQ GND ATN SIGNAL GND
Bajt DAV NRFD NDAC 1 2 3 4 5 6 1 2 3 1: NRFD HIGH -Wszyscy odbiorcy gotowi do czytania. 2: DAV LOW - Nadawca informuje, że dane są gotowe. 3: NRFD LOW - ... odbiorcy przełączają NRFD na stan 0. 4: NDAC HIGH - Wszyscy odbiorcy informują, że przeczytali bajt ... 5: DAV HIGH - ... Nadawca ustawi ponownie na 1 DAV ... 6: NDAC LOW - ... Odbiorcy przełączają na 0 NDAC. 1: NRFD HIGH - Wszyscy odbiorcy są gotowi do przyjęcia kolejnego bajta.
ATN (ATtentioN): Sterowane przez kontroler polecenie do wszystkich urządzeń aby w ciągu 200 ns były gotowe na przyjęcie komendy i adresu. • IFC (InterFace Clear): resetowanie HPIB. 100 ms na odpowiedź od wszystkich urządzeń. • REN (Remote ENable): Jest używana przez kontroler do ustawienia wszystkie odbierające urządzenia na mod remote. • SRQ (Service ReQuest): Urządzenie żąda od kontrolera działania. Kontroler odpytuje przez magistrale które urządzenie wysłało rządanie i dlaczego. • EOI (End Or Identify): Kiedy ATN jest 0 EOI może być używane przez nadawcę do zaznaczenia końca przesyłania.
1 2 4 8 16 1 0 A1 A2 A3 A4 A5 Należy pamiętać, że kontroler ma swój adres nadawcy i odbiorcy Adres nadawcy = 010 10101 = 64 + 21 Adres odbiorcy = 001 10101 = 32 + 21 010 11111 = Untolk 001 11111 = Unlisten
and easier to program. Figure 13.3: Status register model in IEEE 488.2
* gpibdemo.cpp : console application using Microsoft Visual C++. Uses NI-488.2 direct entry points to GPIB-32.dll driver from National Instruments: http://www.ni.com/gpib/win98_95cr.htm For more info see: files included in the downloadable compat21.zip NI-488.2M Function reference Manual for Win32 can be downloaded from: http://digital.ni.com/manuals.nsf/ Coded by Bengt.Lindgren@Fysik.uu.se Dec.2000*/#include <windows.h>#include <stdlib.h>#include <math.h>#include <stdio.h>#include <iostream.h>#include "decl-32.h" // type declarations used in GPIB-32.DLL // NI-488.2 Function Prototypes used by this demo program static void (__stdcall *PSendIFC) (int boardID);static void (__stdcall *PEnableRemote) (int boardID, Addr4882_t * addrlist);static void (__stdcall *PSend) (int boardID, Addr4882_t addr, PVOID databuf, LONG datacnt, int eotMode);static void (__stdcall *PReceive) (int boardID, Addr4882_t addr, PVOID buffer, LONG cnt, int Termination);static HINSTANCE Gpib32Lib = NULL; // global handle to DLLstatic int *Pibsta; // global status variable static int *Piberr; // global error variablestatic long *Pibcntl; // global count variable http://www.fysik.uu.se/kurser/fy660/compendium/GPIB/default.htm
void main(void) {char buf[80]; LONG buflen;Addr4882_t addr[2]={7,17}; // used GPIB addressesfloat f,v; // Call LoadLibrary to load the 32-bit GPIB DLL. Gpib32Lib = LoadLibrary ("GPIB-32.DLL"); if (!Gpib32Lib) { cout << " The LoadLibrary call to GPIB-32.DLL failed" << endl; exit(1); } // GPIB library is loaded. Get pointers to the requested functions and globals. Pibsta = (int *) GetProcAddress(Gpib32Lib, (LPCSTR)"user_ibsta"); Piberr = (int *) GetProcAddress(Gpib32Lib, (LPCSTR)"user_iberr"); Pibcntl = (long *)GetProcAddress(Gpib32Lib, (LPCSTR)"user_ibcnt"); PSendIFC = (void (__stdcall *)(int)) GetProcAddress(Gpib32Lib, (LPCSTR)"SendIFC"); PSend = (void (__stdcall *)(int, Addr4882_t, PVOID, LONG, int)) GetProcAddress(Gpib32Lib, (LPCSTR)"Send"); PReceive = (void (__stdcall *)(int, Addr4882_t, PVOID, LONG, int)) GetProcAddress(Gpib32Lib, (LPCSTR)"Receive"); PEnableRemote = (void (__stdcall *)(int, Addr4882_t *)) GetProcAddress(Gpib32Lib, (LPCSTR)"EnableRemote");
if(!Pibsta || !Piberr || !Pibcntl || !PSendIFC || !PSend || !PReceive || !PEnableRemote) { cout << "Unable to access functions in GPIB-32.DLL" << endl; FreeLibrary (Gpib32Lib); exit(1); }/*************** Ready to use GPIB *********************/ (*PSendIFC)(0); // Initialize GPIB controller if ((*Pibsta) & ERR) cout << "SendIFC Error " << *Piberr << endl; (*PEnableRemote)(0, addr); // Set all instruments in remote mode // Set frequency on function generator (address 17) f=1.23e3; buflen=sprintf(buf,"FR%fHZ",f); // HP3324// buflen=sprintf(buf,"FREQ %f",f); // PM5138 (*PSend)(0, 17, buf, buflen, NLend); // sends buflen characters in buf with \n added and with EOI // Read Fluke 45 DMM (address 7) (*PSend)(0, 7, "val?", 4, NLend); (*PReceive)(0, 7, buf, 80, STOPend); // Receive maximum 80 characters buf[(*Pibcntl)]='\0'; // Use the null character to mark the end of the received string cout << buf << endl; v=atof(buf); cout << v << endl;/*******************************************************/ // Cleanup before exit FreeLibrary (Gpib32Lib);} //end
FireWire IEEE 1394 30 -8 V Do 60 W typowo 10 -20 W Gdy jedna para transmituje dane (D+ = 1V, D- = -1) druga pełni rolę zegara i zmienia swój stan w przypadku nie zmieniania się kolejnych bitów pierwszej pary. • Adresowanie 64 bitowe • 10 bitów – adres magistrali (1023-1(lokal)) • 6 bitów – adres węzła (63) • 48 bitów – adres rejestrów i pamięci w węźle. • 400 Mb/s na odległość 4.5m. • 1394b 3.2 Gb/s na odl. 100m optycznie. http://www.skipstone.com/compcon.html
Wpisywanie danych do rejestru Asynchronous/Isochronous Transmit Format ATF/ITF • Rozmiar pamięci bufora musi być ustalony przed zapisem do niego danych! • Wpisanie pierwszego quadletu do 80h. • Wpisz kolejne n-1 quadlety do 84h. • Wpisz ostatni quadlet paczki do 8Ch. Teraz dane są gotowe do wysłania. • 80h (ATF_First) DATA1[0:31] • 84h (AFF_Continue) DATA2[0:31] • * * • * * • 84h (ATF_Continue) DATA(n-1)[0:31] • 8Ch (ATF_Continue&Update) DATAn[0:31] • Przesłanie danych bezpośrednio do magistrali. • A0h (ATF burst write) Data1[0:31],…,DATAn[0:31]
Czytanie z bufora GRF paczki „token” Bit 0- 6 – rezerwa. Bit 7-10 – Bit 11 – informuje o tym, że paczka jest kompletna. Bit 13-14 – szybkość transmisji 00 - 100 Mb/s 01 - 200 Mb/s 10 - 400 MB/s Bit 15-23 – liczba quadletów w buforze z wyłączeniem paczki znacznikowej.
Transmisja asynchroniczna z PC Przesłanie pojedynczego quadletu Rządanie zapisania danych spd – określa z jaką prędkością ma być wysłana paczka (00 – 100 Mb/s, 01 – 200 Mb/s, 10 – 400 Mb/s). tLabel – etykieta transakcji unikalna dla każdej transakcji. Kojarzenie paczki odpowiedzi z paczką żądania. rt – kod ponowienia paczki (00 – nowa, 01 – retry_X, 10 – retryA, 11 – retryB. tCode – kod transakcji. priority – priorytet aktualnej paczki. destinationID – 10 bitów to adres magistrali, 6 adres węzła. destinationOffsetHigh, destinationOffsetLow (mod 4 adres).
Żądanie pobrania danych spd – określa z jaką prędkością ma być wysłana paczka (00 – 100 Mb/s, 01 – 200 Mb/s, 10 – 400 Mb/s). tLabel – etykieta transakcji unikalna dla każdej transakcji. Kojarzenie paczki odpowiedzi z paczką żądania. rt – kod ponowienia paczki (00 – nowa, 01 – retry_X, 10 – retryA, 11 – retryB. tCode – kod transakcji. priority – priorytet aktualnej paczki. destinationID – 10 bitów to adres magistrali, 6 adres węzła.
Asynchroniczna czytaniez GRF Żądanie przesłania jednego qbita.
Rejestr kontrolny 08h Steruje podstawowymi operacjami kontrolera. Możliwe czytanie i zapisywanie. Wartość startowa 0000_0000h