IEEE488
Zurück Nach oben Vorwärts

IEEE488 = Interpret + IEEE488-Funktionen, Beispiele

Hardware: Interfacekarte KPC-488.2 von Keithley
Software: IEEE_32M.DLL im Windows-Verzeichnis.

IEEE488-Funktionen
void initialize(int myadress, int level)
myadress GPIB-Adresse des KPC-488.2 ( 0, .. , 30)
level 0 = System Controller, 2 = KPC-488.2 ist Device
Beispiel initialize( 21, 0);
 
int send(int address, char[] info, int status)
address Geräteadresse ( 0, .. , 30)
info Datenstring der an das Gerät übertragen wird
status 0 = OK, 8 = Zeitüberlauf
Beispiel erg = send( address, "F0R4X", status);
 
int enter(char[] recv, int maxLen, int Len, int address, int status)
recv Stringvariable für die zu empfangenden Daten
maxLen max. Anzahl zu empfangender Zeichen
Len aktuelle Anzahl empfangener Zeichen
address, status siehe send()
Beispiel char recv[30]; int l; int s; enter( recv, 30, l, 7, s);
 
int srq()
Prüfung auf Serial Request TRUE, falls ein angeschlossenes Gerät Bedienung anfordert.
Beispiel while (!srq()); bzw. erg = srq(); // erg = 0
 
int spoll(int address, int poll, int status) - Liest den Status eines einzelnen Gerätes (serial polling)
address , status siehe send()
poll resultierendes Statusbyte
Beispiel erg = spoll( address, poll, status); // poll = 24
 
void ppoll(int poll) - Ermittelt den Service Request aller Gerätes (parallel polling)
poll 0..255
Beispiel int poll; ppoll( poll);          // poll = 0
 
int listener_present(int address) - überprüft, ob ein Gerät mit der angegebenen Adresse angeschlossen ist
address   Geräteadresse
Beispiel   erg = listener_present( 7);    //1, falls angeschlossen, 0 sonst
 
int board_present(void) - überprüft, ob GPIB-Interfacekarte im Rechner vorhanden ist
0   nicht gefunden,
1   KPC-488.2,
2   KPS-488.2,
3   KPC-488.2AT
Beispiel erg = board_present();          // erg = 1
 
int transmit(char[] command, int status) - Funktion wie send(), jedoch auf einer tieferen Programmierebene
command enthält GPIB-Befehle und Daten (durch Leerstellen getrennt)
status (UND) 0=OK
1=ungültige Syntax
2=Sendeversuch, wobei KPC-488.2 kein 'Talker'
4=String in "" od. END Kommando gefunden in "LISTEN" od."TALK" Liste
8= Zeitüberlauf
16= unbekannter Befehl
GPIB-Befehle
Datenüber-
tragung
Talker, Listener definieren TALK 7 LISTEN 1 3 5
Sekundäradresse TALK 7 SEC 8 bzw. LISTEN 1 SEC 9
Alle Talker und Listener ausschalten UNT UNL
Rechner wird Talker bzw. Listene MTA MLA
Datenfolge DATA 'hello' END (Zeilenvorschub mit EOI)
End-or-Identify EOI
Remote Enable oder Go To Local (Frontbedienung REN oder GTL
Serial poll festsetzen Enable/Disable SPE, SPD
Parallel poll festsetzen Configure/Disable/Unconfigure PPC, PPD, PPU
Multiline Befehle Device Clear DCL
Local Lockout LLO
Command CMD
Adressierte Befehle Group Execute Trigger GET
Selected Device Clear SDC
Take Control TCT
Interface Clear IFC
Beispiele   erg = transmit("UNL LISTEN 7", status); // erg = 0, status = 0
erg = transmit("UNL UNT MTA LISTEN 7 DATA 'F0R2X' END", stat
 
int receive( char[] recv, int maxLen, int Len, int status) - wie enter(), jedoch auf Programmierebene wie transmit()
recv Stringvariable, enthält die empfangenen Daten
maxLen maximale Anzahl zu empfangender Zeichen
Len aktuelle Anzahl empfangener Zeichen
status 0 = OK
2 = receive, während der PC kein Listener ist
8 = Zeitüberlauf
Beispiel erg = transmit("MLA TALK 7", status);     // erg = 0, status = 0
erg = receive( recv, 30, Len, status);    // recv = "NDCV+000.6824E+0", Len = 16, erg = 0, status = 0
 
Binäre Datenübertragung für Hochgeschwindigkeitsdatenübertragung
int tarray(char[] info, int count, int eoi, int status)
sendet 64 kB Binärdaten vom Rechner an die Listener, EOI ist optional
info zu übertragende Information
count Anzahl der zu übertragenden Bytes
eoi EOI mit dem letzten Data-byte senden : 0 = Nein / 1 = Ja
status 0 = OK
2 = tarray, während der PC kein Talker war
8 = Zeitüberlauf
Beispiel transmit( "MTA LISTEN 2", status); // Drucker
erg = tarray( "Info", 5, 1, status);
 
int rarray(char[] info, int count, int len, int status) - liest bis zu 64 kB Binärdaten ein
info zu übertragende Information
count Anzahl der zu übertragenden Bytes
len aktuelle Anzahl empfangener Datenbytes
status 0 = OK
2 = tarray, während der PC kein Talker war
8 = Zeitüberlauf
32 = erfolgreicher Transfer, durch EOI beendet
Beispiel char info[2000];
transmit( "MLA TALK 7", status);
erg = rarray( info, 100, Len, status);   
print( info);    // NDCV+000.0004E+0
 
void dmachannel(int channel)
direkter Speicherzugriff (DMA) über die Kanäle 1 oder 3 (KPC-488.2),
ist normalerweise ausgeschaltet und muß bei Bedarf eingeschaltet werden
channel DMA-Kanal, welcher durch die Interfacekarte verwendet wird, -1 zum Ausschalten
Beispiel dmachannel(1);
 
Konfigurieren der Interfaceparameter
void setport(int board, int port)
board Interfacekartennummer 0..3
port I/O-Adresse der Karte (Initialwert: 2B8 Hex)
Beispiel setport( 0, 0x2B8);
 
void boardselect(int board) - wird nur verwendet, wenn sich mehrere KPC-488.2 - Karten gleichzeitig im Rechner befinden
board Interfacekartennummer 0..3
Beispiel boardselect( 0);
 
void settimeout(int time)
wird nur verwendet, wenn sich mehrere KPC-488.2 - Karten gleichzeitig im Rechner befinden
time Zeitüberlauf in msec ( Vorgabe: 10 sec)
Beispiel settimeout(10000);
 
void setoutputeos(int eos1, int eos2)
eos1, eso2 Ende-Zeichen (Terminatoren) nach send() oder bei END Kommando
Beispiel setoutputEOS(13,10); // CR LF
 
void setinputeos(int eos)
eos Ende-Zeichen (Terminator) nach enter() oder receive(), Voreinstellung 10 = LF
Beispiel setinputEOS(10); // LF
 
488SD: High Speed Streaming Daten Protokoll
void enable_488sd(int enable, int timing)
nur auf der KPC-488.2AT-Karte möglich, Datentransferraten bis 5 MB/s mit 488SD-Geräten erlaubt
enable Einschalten (true) oder Ausschalten (false) des 488SD-Modus
timing timing parameter Wert abhängig von Kabellänge (1m: mind. 100, 20m mind.500)
Beispiel enable_488sd( 0, 250);

 

Beispiele
ieee488.jpg (51090 bytes)