GPIB

Antworten
abacom
Site Admin
Beiträge: 3917
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

GPIB

Beitrag von abacom » Dienstag 14. Oktober 2008, 13:31

irrerpolterer



Anmeldungsdatum: 24.09.2008
Beiträge: 5
Wohnort: Waiblingen

Verfasst am: 24 Sep 2008 15:42 Titel: GPIB als Zusammenfassung, bitte fehlendes ergänzen!!!

--------------------------------------------------------------------------------

PLE und GPIB sind zusammengewachsen. Viele Meßgeräte haben auch noch heute eine GPIB-Schnittstelle. Nur sind die meisten Adapter für den PC-Anschluß nicht billig und die Hersteller bieten keine Unterstützung für PLE.

Deshalb wurden in diesem Forum die Hardwarefragen geklärt und softwaretechnisch ein neue DLL für PLE bereitgestellt. Diese kann mit dem Funktionsbaustein DLL-Import (/diverses/diverses/dll-import) genutzt werden.

Danke nochmal an Ulrich Bangert, der dies möglich machte.

Die Quellen befinden sich noch unter http://www.forumprofi2.de/forum4065/search.php . Bitte Suchbegriff "GPIB" oder Autor "irrerpolterer" eingeben.

Auf dieser Seite befindet sich die DLL als Funktionsblock:
http://www.ulrich-bangert.de/html/downloads.html

Alternativ kann auch EZGPIB runtergeladen werden, um eine noch umfangreichere Nutzung der Schnittstelle mit vielen Geräten zu ermöglichen. Ebenfalls unter http://www.ulrich-bangert.de .


Hier noch ein kleiner Ausschnitt von 2008:

1
Wer einen Bedarf an GPIB-Kommunikation aus PROFILAB heraus hat, der kann sich von meiner Downloadseite

http://www.ulrich-bangert.de/html/downloads.html

Komponenten dazu downloaden.

Voraussetzung für die Benutzung der Komponenten ist das Vorhandensein eines NATIONAL INSTRUMENTS GPIB-Interfaces (egal ob Einsteckkarte, USB oder sonstwie angeschlossen) sowie eine installierte NI GPIB32.DLL.

Die Frontplatten-Screenshots 6 und 7 zeigen einige PROFILAB-Einschrängungen auf (Messgerät liefert 14 (!) sginifikante Stellen, PROFILAB kann nur 12 signifikante Stellen im Exponentialformat darstellen, y/t-Schreiber Autoscale überfordert, wenn kleine Differenzen mit einem hohen Offset versehen sind, erst Beseitigen des Offsets macht überhaupt etwas sinnvolles sichtbar, Beschriftung der vertikalen Achse nicht richtig sichtbar bzw. zu wenige signifikante Stellen u.s.w.), die mich daran zweifeln lassen, ob es sinnvoll ist, PROFILAB im Bereich professioneller Messtechnik einzusetzen, aber ich weiss, dass ich 2-3 Leute damit richtig glücklich mache.

MfG
Ulrich Bangert


2
Hallo!

Ich habe ein kleines Beispiel für mein Multimeter Keithley 2700 zur Spannungsmessung. Dies ist im wesentlichen die Bedienung des Meßgerätes mittels Meßgerätebefehlssatz nach SCPI-Standard. Diese Befehle stellen die Gerätehersteller zur Verfügung.

Bevor ich die EZGPIB.DLL in der PLE-runtime nutzen kann, muß ich erst EZGPIB starten und zur Erläuterung dient das Beispiel. Es liest Meßwerte via GPIB in EZGPIB und kann dann per DLL in PLE genutzt werden.

Program Keithleyinitialisierung;

const Dev = 16;
len = 30;

var str : string;
time : TDateTime;

procedure Init;
begin;
EZGPIB_BusWriteData(Dev,'*IDN?');
EZGPIB_TimeSleep(0.1);
EZGPIB_BusWaitForData(Dev,str,2.0);
Time:=EZGPIB_TimeNow;
//EZGPIB_BusWriteData(Dev,' *RST ; *CLS ;');
//EZGPIB_TimeSleep(5.0);
EZGPIB_BusWriteData(Dev,'TRAC:CLE');
EZGPIB_TimeSleep(0.3);
EZGPIB_BusWriteData(Dev,':SENSE:VOLT:DC:AVER:STAT OFF');
EZGPIB_TimeSleep(0.1);
EZGPIB_BusWriteData(Dev,':SYSTEM:AZERO:STATE OFF');
EZGPIB_TimeSleep(0.1);
EZGPIB_BusWriteData(Dev,':SENSE:VOLT:DC:RANGE 10');
EZGPIB_TimeSleep(0.1);
EZGPIB_BusWriteData(Dev,':SENSE:VOLT:DC:DIGITS 4.5');
EZGPIB_TimeSleep(0.1);
EZGPIB_BusWriteData(Dev,':SENSE:VOLT:DC:NPLC 0.01');
EZGPIB_TimeSleep(0.05);
EZGPIB_BusWriteData(Dev,':FORM:ELEM READ');
EZGPIB_TimeSleep(0.3);
end;

procedure FetchData;
begin;
EZGPIB_BusWriteData(Dev,':fetch?');
EZGPIB_TimeSleep(0.05);
EZGPIB_BusWaitForData(Dev,str,2.0);
Time:=EZGPIB_TimeNow;
end;

procedure DisplayData;
begin;
EZGPIB_ScreenWrite(Time);
EZGPIB_ScreenWrite(' ');
EZGPIB_ScreenWriteLn(Str);
end;

//procedure HandleData;
//begin;
// EZGPIB_DDEServerAssignvalue('AverageVoltage',Str);
//end;

begin;
Init;
repeat
FetchData;
//HandleData;
DisplayData;
EZGPIB_TimeSleep(0.05);
until EZGPIB_KbdKeyPressed;
end.

Als runtime in PLE reichen eine handvoll Blöcke. Darunter der DLL-Import und eine string-Anzeige.

Ausgang DLL-Block ist der string-Ausgang, der die string-Anzeige speist.

Eingänge von oben:

Taktgeneratorgenerator
FW Nr.1 mit Geräteaddresse, bei mir 16 oder 14
FW Nr.2 "11" ist gut, Länge des time out
Vcc +5VDC
Schalter logisch 1 oder 0, für Zuschalten der ÜTRA-Anzeige
Konstante <=> der Befehl, der vom Meßgerät den Meßwert abruft, zB. ":MEASure?"


3
Hallo Abacom-Team,

unterstützt ProfiLab eigentlich auch eine der GPIB-Karten/einen GPIB-USB-Konverter nach IEEE488.1/.2, wie sie beispielsweise von Meilhaus vertrieben werden?? Wenn so eine Einbindung existieren würde, wäre ProfiLab eine ernsthafte (weil kostengünstige) Alternative zu Labview/AgilentVEE. Dies würde es ermöglichen, professionelle Messgeräte von Agilent/R&S/Tectronix/etc anzusteuern und auszulesen. Dazu müssen im allgemeinen nur einfache ASCII-Wörter gesendet und empfangen werden können. Sprich: der benötigte Programmieraufwand für Euch sollte sich in Grenzen halten, der Funktionalitätsgewinn für die Anwender wäre enorm. Damit würde Profilab in einer anderen Klasse mitspielen.

Ich habe in der Liste der unterstützten HW keine entsprechende Karte/Konverter gefunden. Habe ich da etwas übersehen oder gibt es das (noch) nicht??

Noch eine andere Frage: gibt es ein (Labor-)Netzteil, das via PL angesteuert werden kann? Mit GPIB wäre es kein Problem, da ein geeignetes Gerät zu finden.

Gruß


Ulrich


4
Denkbar wäre z.B. "GPIB over RS-232", wie z.B.
http://www.printcapture.com/files/GPIB- ... _Sheet.pdf
USB-Converter gehen auch, wenn Sie über einen virtuellen COM-Treiber verfügen. Die GPIB-Daten werden bei diesen Varianten per COM-Schnittstelle übertragen, was mit ProfiLab ja geht.

Manche Hersteller, wie z.B. http://www.daytronic.com/products/software/10sd-opc.htm
bieten auch einen OPC-Server für Ihre GPIB-Geräte an. Der Zugriff könnte dann mit der ProfiLab-Komponente "OPC V2 Data Client" erfolgen. Bequem aber auch nicht ganz billig. Ein OPC-Server ist eine Software, die dem Anwender eine "genormte" und hardwareunabhängige Softwareschnittstelle bereitstellt. Die OPC-Server-Software fungiert in diesem Fall also quasi als Gerätetreiber. OPC-Server-Software gibt´s auch für CAN-Bus, ModBus, etc.

Weiter Infos zu GPIB:
http://www.hit.bme.hu/~papay/edu/GPIB/tutor.htm
http://de.wikipedia.org/wiki/IEC-625-Bus

Zu OPC:
http://de.wikipedia.org/wiki/OLE_for_Process_Control



5
Hallo,
ich hatte auch schon ein paar mal nach Wegen gesucht GPIB-Instrumente an Profilab anzubinden. U.A. hatte ich in Erinnerung, dass es zu prähistorischen Computerzeiten mal ein DOS-TSR-Programm gab das GPIB-Devices als COM-Ports für Programme zur Verfügung stellte die nur serielle Schnittstellen unterstützten.
Da die Programmierung am GPIB-Bus aber nicht ganz trivial ist, hab ich es bisher jedesmal wieder verworfen.
Durch diesen Tread angeregt hab ich das Thema mal wieder aufgenommen und bin auf eine relativ einfache Lösung gekommen.
Ich nehme ein GBIB-Demoprogramm, das bei meiner Programmierumgebung dabei ist, und erweitere es um DDE. Damit kann es mit Profilab kommunizieren. Erste Versuche waren ganz vielversprechend, d.h. ich konnte schon Daten von einen DMM in PL empfangen.
Ich werde das Projekt die nächste Zeit weitermachen und wenn es erfolgreich ist zur Verfügung stellen.
Es wird nur send und receive über GPIB enthalten, alle anderen Features von GPIB wird es nicht unterstützen. Das dürfte aber für viele Anwendungen reichen.

Mike


6
Hallo GPIB-Interessierte...

Von meiner Hompage http://www.ulrich-bangert.de kann man kostenlos ein kleines Tool namens EZGPIB downloaden. Dieses arbeitet mit einer preisgünstigen GPIB-Hardware zusammen, die man bei http://www.prologix.biz erwerben kann.

Mit diesem Tool schreibt man sich GPIB-basierte Anwendungen in einem PASCAL-basierten Dialekt. Das besondere ist, dass alle GPIB-speziellen Dinge in fixfertigen Prozedur/Funktionsaufrufen gekapselt sind, so dass man mit den "Niederungen" der GPIB/RS232-Kommunikation nichts mehr zu tun hat.

Auszug aus der Bedienungsanleitung:

Function EZGPIB_BusDataAvailable:Boolean
Returns ‘True’ if any device on the bus has send data and has terminated it with the current delimiter

Function EZGPIB_BusGetAddressedDevice:LongInt
Returns the address of the currently addressed bus device

Function EZGPIB_BusGetData:string
Returns the string that has last been sent by a device over the bus

Function EZGPIB_BusGetEoi:LongInt
Queries the current setting of EOI. This is a low level function directly related to the ++eoi command of the Prologix board.

Function EZGPIB_BusSourceOfSrq:LongInt
Returns the address of the device that is requesting service

Function EZGPIB_BusSPoll(Device:LongInt):LongInt
Performs a serial poll to return the status byte of ‘Device’

Function EZGPIB_BusSrq:Boolean
Returns ‘True’ if a device has requested service

Function EZGPIB_BusSrqStatus:LongInt
Returns the status byte of the service requesting device

Function EZGPIB_BusWaitForData(Device:LongInt;ForWhat:string;MaxWait:Double):Boolean
Waits ‘Maxwait’ seconds or until ‘Device’ answers whichever is to take place earlier. If ‘Device’ answers within the timeout
the answer is returned in ‘ForWhat’ and the function returns ‘True’.The end of the message is detected by the delimiter sent
by the device. Use this function for single measurement values.

Function EZGPIB_BusWaitForDataBlock(Device:LongInt;ForWhat:string;MaxWait:Double):Boolean
Waits ‘Maxwait’ seconds for an answer from ‘Device’. If ‘Device’ answers within the timeout the answer is returned in
‘ForWhat’ and the function returns ‘True’.This function does not look at delimiters that could be a part of the answer but
waits the complete ‘MaxWait’ time. Use this function for longer data blocks as screen shots and so on.

u.s.w....

Da EZGPIB beliebige Daten als DDE-Server veröffentlichen kann, sollte es eigentlich kein Problem darstellen, die Informationen in Profilab hineinzubekommen und da weiter zu verarbeiten.

Grüße
Ulrich Bangert



7
Hallo!

Für alle die eine GPIB-Kommunikation aufbauen wollen.

EZGPIB arbeitet sicher nicht nur mit dem günstigen Prologix-Gerät und den NI-Produkten. Ich bin dabei andere Karten zu testen und die Randbedingungen zu erfassen. Die Ergebnisse werde ich nachreichen.

Zitat von Herrn Bangert
Voraussetzung für die Benutzung der Komponenten ist das Vorhandensein eines NATIONAL INSTRUMENTS GPIB-Interfaces (egal ob Einsteckkarte, USB oder sonstwie angeschlossen) sowie eine installierte NI GPIB32.DLL.


Mit EZGPIB erfasse ich Meßwerte, die ich möglichst effektiv in PLE bereitstellen will. Der sicherste Weg ist alle Ergebnisse in eine Datei abzulegen und nach der Messung sie mit PLE einzulesen. Es geht auch gemütlich per DDE-Verbindung oder richtig gut per EZGPIB-DLL.


Derzeit arbeite ich an vielen Projekten, darunter Messung von Drucktransmittern und -Schaltern sowie die Ansteuerung von Motorventilen, zur Bewertung von Dichtheit und Hysterese.

Ich habe als Softwarewerkzeuge Profilabexpert, MS-Excel, EZGPIB und die EZGPIB.DLL für PLE ebenfalls von Herrn Ulrich Bangert, die einen eigen thread hat.

Die eingesetzte Hardware wächst von Tag zu Tag. Am liebsten ist mir eine Hardware mit guter Dokumentation.

Als Verdeutlichung möchte ich ein kleines Beispiel posten:

Program GPIBalsDDE;

const Dev = 16; // GPIB Geräteaddresse
len = 30;

var str : string; // Lese Meinen Meßwertsatz als String ein.
time : TDateTime;

procedure Init; //Meßgerät Initialisierung nach SCPI
begin;
EZGPIB_BusWriteData(Dev,'*IDN?');
EZGPIB_TimeSleep(0.01);
EZGPIB_DDEServerCreateItem('AverageVoltage');
EZGPIB_ScreenClear;
end;

procedure FetchData; //Meßwerte abholen nach SCPI
begin;
EZGPIB_BusWriteData(Dev,':fetch?');
EZGPIB_TimeSleep(0.001);
EZGPIB_BusWaitForData(Dev,str,1.0);
Time:=EZGPIB_TimeNow;
end;

procedure DisplayData; //Bildschirmdarstellung in EZGPIB
begin;
EZGPIB_ScreenWrite(Time);
EZGPIB_ScreenWrite(' ');
EZGPIB_ScreenWriteLn(Str);
end;

procedure HandleData; // DDE-Verbindung unterhalten.
begin;
EZGPIB_DDEServerAssignvalue('AverageVoltage',Str);
end;

begin;
Init;
repeat
FetchData;
HandleData;
DisplayData;
EZGPIB_TimeSleep(0.1);
until EZGPIB_KbdKeyPressed;
end.



8
Hallo!

Hier ein kurzer Bericht über weitere nutzbare Karten: Es stimmt wirklich, sobald eine Karte Labview-tauglich ist, läuft EZGPIB!!! Toll!!! Dabei darf die Karte auch uralt sein, damals für ganz alte Labview-Versionen.

Ich habe zwei Sorten GPIB-Pc-Karten: ISA und PCI, beide von CEC und beide heißen einfach nur CEC.488 .

Ich habe die neuesten Treiber der Karten aus dem Internet installiert. Danach habe ich von NI das Treiberinterface mit dem Instrumentexplorer ebenfalls installiert, obwohl dies nur begrenzt Sinn macht. Danach geht EZGPIB prima. Bei der ISA-Karte schaffe ich 15Hz Abtastrate. Obwohl der Win2k-Gerätemanager und der Instrumentexplorer die ISA-Karte gar nicht findet. Die PCI-Karte dürfte eher noch schneller sein, habe jedoch noch keine Meßwerte.



9
Hallo Herr H.......,

habe in der Zwischenzeit auch noch die Unterstützung der VISA32.DLL eingebaut, damit sollte GPIB eigentlich noch einfacher von der Handhabung werden und auch mit HP/Agilent-Interfaces zusammenlaufen (wenn die HP IO-Libraries installiert sind)

Beste Grüße
Ulrich Bangert


Wer Fragen hat, darf sich gerne an mich wenden.
Grüße irrerpolter=irrer polterer
ABACOM support

Antworten

Zurück zu „Thema GPIB“