Copyright: Hilfe DDEGPIB ® h#s 12/00
Citation: ""


MEXGPIB-Index
ddegpib - Universelle DDE-Schnittstelle für GPIB

Neu: Beim Starten „als Symbol“ wird das Programm sofort im Meldungsbereich der Taskleiste (System-Tray) verankert; ansonsten startet das Programm „wie gehabt“ als normales Symbol. Gilt nicht für Windows 3.x.

Einführung
Liste der Unterfunktionen
DDE übers Netzwerk einrichten
Anwendungsbeispiel

Siehe auch:

N:\HENNI\GPIB\TPWGPIB\GPIB.HLP

Detaillierte Beschreibung aller GPIB-Funktionen

(befindet sich im Programm-Manager unter "CD-Infos")

h#s 12/00


Einführung

Die DDE-Schnittstelle hat gegenüber der vorhergehenden Lösung mittels mexgpib.dll den Vorteil, dass Bitbreiten-Schranken problemlos (von Windows) überwunden werden (Nutzbarkeit sowohl von Matlab 4.2 als auch 5.x), sowie die Verwendbarkeit außerhalb von Matlab.

Das Programm DDEGPIB.EXE läuft nur als Icon bzw. in der Taskleiste und zeigt in der Textzeile die Anzahl der DDE-Verbindungen an.

Es unterstützt auf der DDE-Seite Übertragung im Text- und im Excel-Tabellen-Format (CF_XLTABLE), und auf der GPIB-Seite das Text- sowie verschiedene Festkomma-Binärformate, und konvertiert alle vier Kombinationen.

Die Datenmenge pro Transaktion kann und darf in jeder Kombination 64 KB überschreiten,

sofern die darunterliegende GPIB.DLL (standardmäßig von National Instruments) das verkraftet.

Weiterhin unterstützt DDEGPIB ein SYSTEM-Thema.


Liste der Unterfunktionen

Alphabetische Liste ehemaliger MEXGPIB-Funktionen

help
ibask
ibclr
ibcnt
ibconfig
iberr
ibfind
ibloc
ibrd, ibrdXX
ibrsp
ibsta
ibwait
ibwrt, ibwrtXX
query
version


help

ddeexec (kanal, 'help');

Startet diese Windows-Hilfe. Die Hilfe muß manuell geschlossen werden, d.h., sie wird nicht bei clear mex oder beim Beenden von Matlab geschlossen.


ibask

sekunden = ddereq(kanal, 'config TMO')
eot_flag = ddereq(kanal, 'config EOT')

Gerätekonfiguration abfragen: hier nur zwei Werte!

Bei 'config TMO' wird die Zeit in Sekunden umgerechnet und zurückgegeben.

'config EOT' liefert zurück, ob nach ibwrt die End-Of-Transmission-Leitung aktiviert wird (Standard) oder nicht. Mit ausgeschaltetem EOT lassen sich bspw. lange Befehle und Übertragungen aufteilen.

Siehe auch:

ibsta-Konstanten
ibask()


ibclr

ddeexec (kanal,'ibclr')

Gerät rücksetzen (z.B. nach missglücktem Befehl).

Siehe auch:

ibclr()


ibcnt

ret_val = ddereq (kanal,'ibcnt')

Abfrage der Zeichenzahl der letzten GPIB-Übertragung (selten benutzt, da sie bei ibrd zur Festlegung der Arraygröße bereits benutzt wird).


ibconfig

ddepoke (kanal,'config TMO', sekunden)
ddepoke (kanal,'config EOT', eot_flag)

Gerät konfigurieren: hier nur zwei Werte!

Bei 'config TMO' wird die Zeit in Sekunden angegeben und in den internen Code umgerechnet.

'config EOT' setzt das interne End-Of-Transmission-Flag (0 oder 1), welches bei ibwrt entscheidet, ob die End-Of-Transmission-Leitung beim letzten Byte aktiviert wird oder nicht.

ibconfig()


iberr

ret_cal = ddereq (kanal,'iberr')

Abfrage des Fehlercodes der letzten GPIB-Übertragung. Der Fehlercode ist nur gültig, wenn auch das ERR-Bit in ibsta gesetzt ist.

Siehe auch:

Fehlercodes
ibsta


ibfind

kanal = ddeinit ('gpib', 'gerätename')
kanal = ddeinit ('gpib', 'brd pad sad tmo eot eos')
ddeterm (kanal)

Konversations-Start, der erste Befehl für die Kommunikation.

Die Kommunikationsparameter (Geräteadresse, EOS-Byte, Timeout usw.) werden der Datei GPIB.INI im Windows-Verzeichnis entnommen.

Die alternative Form kommt ohne GPIB.INI aus und ist vorzuziehen, weil künftige (32-bit) Versionen leider ohne GPIB.INI arbeiten!

brd = 0 (Board-Nummer, pro Rechner steckt meistens nur eins)
pad = Geräteadresse
Ab hier können die Parameter weggelassen werden:
sad = 0 (Sekundär-Adresse)
tmo = 3 (Sekunden TimeOut)
eot = 1 (End-Of-Transmission-Flag)
eos = 10 (Zeichen für End-Of-Transmission bei Empfang?)

ddeterm ist obligatorisch und ruft intern ibonl(0) auf.

(Daher zur Zeit keine Funktion bei GPIB.DLL-Nachbauten, wie für HPIB-Karte oder Hameg HO-80-Karte!!)

Siehe auch:

ibfind()


ibloc

ddeexec (kanal,'ibloc')

Gerät auf Lokalbedienung rückschalten

Siehe auch:

ibloc()


ibrd
ibrd, ibrdXX

ret_text = ddereq (kanal,'data',[1 1])
ret_vektor = ddereq (kanal,'{[u]|i}{8|16|32}{[i]|m}')

Text bzw. Binärdaten lesen

Binärdaten (wie sie vom angeschlossenen Gerät kommen) müssen folgendes Format aufweisen:

<Text>	(beliebiger Header-Text ohne #, kann auch leer sein)

#	(literales Doppelkreuz)

m	(1 ASCII-Ziffer: Anzahl der folgenden ASCII-Ziffern)

n	(m ASCII-Ziffern: Anzahl der folgenden binären 8-bit-Bytes)

<Rest>	(Binärdaten z.B. wie folgt angegeben, Groß/Kleinschreibung egal):

8	8-bit-Bytes, vorzeichenlos

i8	8-bit-Bytes, vorzeichenbehaftet

i16	16-bit-Integer, vorzeichenbehaftet, Intel-Notation (least significant byte zuerst [LSB first])

i16m	16-bit-Integer, vorzeichenbehaftet, Motorola-Notation (most significant byte zuerst [MSB first])

Nochmal in Baccus-Naur-Form:

Dieses Format trifft auf den Yokogawa-Oszi, den HP546xx und den R&S-Waveform-Generator zu und ermöglicht sehr hohe Datenübertragungsraten.

Siehe auch:

ibrd()


ibrsp

ret_val = ddereq (kanal,'ibrsp')

Response-Byte abholen

Siehe auch:

ibrsp()


ibsta

ret_val = ddereq (kanal,'ibsta')

ibsta-Variable lesen

Siehe auch:

ibsta-Status-Bits in GPIB.HLP


ibwait

ddeexec (kanal,'ibwait [maske]')

Warten auf externes Ereignis, i.d.R. Bedienungsanforderung (RQS). Liegt bereits das Ereignis vor, kehrt die Funktion sofort zurück.

[maske] wird z.Z. nicht unterstützt, liegt fest auf COMPLETION.

Siehe auch:

ibsta-Status-Bits in GPIB.HLP
ibwait()


ibwrt
ibwrt, ibwrtXX

ddepoke (kanal, 'data', 'text')
ddepoke (kanal, '{[u]|i}{8|16|32}{[i]|m}',vektor)

Text (i.d.R. Kommandos) bzw. Binärdaten schreiben

Binärdaten werden ohne Header gesendet. Erwartet das Gerät einen Header, muß dieser vorher (als Text) gesendet werden. Dazu muß häufig die automatische EOT-Kennung mittels ibconfig vorübergehend abgeschaltet werden.

Die Binärdaten werden gewandelt siehe ibrd, ibrdXX

Siehe auch:

ibwrt()


query

ret_text = ibquery (kanal, 'text')

Kurzform aus ibwrt mit nachfolgendem ibrd zur Abfrage von Geräte-Parametern. Ist ein kleines .M-Skript.

Siehe auch:

Beispiele


version

ret_text = ddereq (kanal,'version')

Versionsabfrage von mexgpib.


DDE übers Netzwerk einrichten

DDE überwindet mittels Netzwerk-DDE auch Rechnergrenzen.

Die Handhabung ist etwas unterschiedlich bei Windows 3.11 und Windows 9x.

Auf beiden Rechnern muss NETDDE.EXE laufen:

Windows 3.11	Windows 9x
Systemsteuerung — Netzwerk — Start — Netzwerk-DDE aktivieren	NETDDE.EXE starten (ggf. im Autostart-Menü)
Server-Seite

Auf dem Server muss eine Freigabe eingerichtet werden. Dazu das Programm DDESHARE.EXE (z.B. N:\henni\ndde\ddeshare.exe) ausführen.

Sie müssen vom DDE-Serverprogramm den Applikations- als auch den Themennamen angeben, also z.B.:

Share Name:	Yokogawa
Application Name:	GPIB
Topic Name:	DL1540
Item Name:	(freilassen)

Sie verlieren so leider die Möglichkeit, zu beliebigen Themen (hier: Geräten) Verbindungen aufbauen zu können — Sie müssen für jedes Gerät eine eigene Freigabe machen!

Client-Seite

Anstelle des Applikationsnamens tritt ein Freigabe-Name (Servername, immer mit der Komponente NDDE$), anstelle des Themas der Share-Name, also z.B. in Matlab:

kanal = ddeinit ('\\amarillo\ndde$', 'Yokogawa')
ddeterm (kanal)

Achtung: <kanal> ist bei vorhandener DDE-Software nie Null, auch wenn keine Verbindung zustandekommt (diese wird erst verzögert aufgebaut), ist also kein Indiz für das Fehlen des Serverprogramms auf dem Server-Rechner!

Testen Sie daher die Verbindung durch Abfrage der Identifikation des GPIB-Gerätes oder durch Anfrage von Hilfe aus dem System-Thema.


Beispiel
Anwendungsbeispiele

Beispiel (hypothetisches Oszilloskop):

k=ddeinit('gpib','oszi');           % Kanalhandle für 'oszi' ergattern
ddepoke(k,'data',sprintf('timebase %f',zeitbasis));
peak_text=ibquery(k,'peak?');
ddeterm(k)