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