Hallo zusammen, ich möchte gerne mein Multimeter Keysight 34461A vom PC aus über LAN mit VisualBasic5 ansprechen. Habe bereits von Keysight IO-Library version 16 (als Treiber) installiert. Mein Betriebssystem ist W7. Daten zum Messgerät senden geht bereits. Unten ein Beispiel, wie er von 100 V AC Bereich in den 1000 V DC Bereich umschaltet. Funktioniert soweit auch. Aber sobald ich Messdaten vom Gerät zum PC empfagen möchte (letzte Programmzeile) , dann gibt es einen Fehlermeldung (s.Anlage) Private Sub Command4_Click() Dim ioMgr As VisaComLib.ResourceManager Set ioMgr = New VisaComLib.ResourceManager Dim instrument As VisaComLib.FormattedIO488 Set instrument = New VisaComLib.FormattedIO488 Set instrument.IO = ioMgr.Open("TCPIP0::A-34461A-05403.fritz.box::5025::SOCKET") Dim idn As String instrument.IO.Timeout = 5000 Dim dblData As Double Dim strReply As String instrument.WriteString "MEAS:VOLT:AC? 100" instrument.WriteString "MEAS:VOLT:DC? 1000" instrument.WriteString "READ?" idn = instrument.ReadString() Kann das ein Fehler von VB5 seine ? VB6 habe ich leider nicht.
Funktionieren die Befehle mit dem 'Send commands to this instrument'-Fenster von der IO Library?
Was sagt wireshark? Geht das read raus und was kommt vom gerät?
So, hier die Ergebnisse von Wireshark. Was soll ich machen ?
Seh dir mal den IO Monitor an, der den IO Libraries beiliegt und vergleiche die VISA-Aufrufe von deinem Programm und dem Interactive IO-Fenster. Möglicher Fehler: falsches Zeilenende beim Schreiben oder falscher 'termination character' beim Lesen. Probiere auch mal folgendes aus: Lasse dein Programm laufen und mach danach mit dem interactive IO "SYST:ERR?"
:
Bearbeitet durch User
16106: Befehl 100 V AC 16107: Befehl MEAS? 16108: Befehl 1000 V DC 16108: Befehl READ? 16110-16114: Leerer Block mit Len = 0 16120: Das sind die Messdaten.... ????
Lukas K. schrieb: > Seh dir mal den IO Monitor an, der den IO Libraries beiliegt und > vergleiche die VISA-Aufrufe von deinem Programm und dem Interactive > IO-Fenster.
Lukas K. schrieb: > Probiere auch mal folgendes aus: Lasse dein Programm laufen und mach > danach mit dem interactive IO "SYST:ERR?"
So wie ich das sehe, liegt der Fehler auf der PC Seite, da die Messdaten ja vom Messgerät gesendet werden.
Dirk F schrieb: > Lukas K. schrieb: >> Seh dir mal den IO Monitor an, der den IO Libraries beiliegt und >> vergleiche die VISA-Aufrufe von deinem Programm und dem Interactive >> IO-Fenster. Und jetzt nochmal vom Interactive IO-Fenster. Ach, ich sehe erst jetzt: Du hast ja VB5 von 1997. Muss das wirklich sein?
Lukas K. schrieb: > Und jetzt nochmal vom Interactive IO-Fenster. > Mach ich dann morgen, OK ? > Ach, ich sehe erst jetzt: Du hast ja VB5 von 1997. Muss das wirklich > sein? Ich finde VB5 und VB6 einfach und gut. Das VB.net ist mir viel zu aufgeblasen. Wenn ich wüsste, das es mit VB6 funktioniert, dann würde ich mit diese Version kaufen.....
Musst du die VISA/Agilent/etc. libs verwenden? Ich benutze regelmäßig Agilent Funktionsgeneratoren sowie 34410A Multimeter mit LAN. Bei diesen gibt es einen Port (siehe Handbuch), über den man die Geräte mit SCPI Befehlen ganz ohne irgendwelche Treiber verwenden kann (d.h. Auf NW-port verbinden, Text-Command-Strings schicken und die Ergebnisse kommen als Strings im Klartext zurück. fertig.). Das funktioniert prinzipiell auch mit irgend einem Netzwerkterminal (netcat, putty, etc.) was super zum Testen ist. Außerdem braucht man überhaupt keine Treiber. Nur Ethernet, aber das kann das OS sowieso. D.h. es ist automatisch auch cross-platform. (Ich habe ehrlich gesagt noch nie verstanden, warum man für LAN Messgeräte irgendeinen Treiber brauchen sollte, wenn man keine wirlich komplexen Sachen wie synchronisierte Trigger von mehreren Geräten o.ä. braucht und der Hersteller ordentlich gearbeitet hat.)
Hallo Whitespace, ja das hört sich ja gut an. Ist das denn dann UDP oder TCP ? Ein 34410A habe ich auch noch zum testen.....
Das ist TCP. Laut http://literature.cdn.keysight.com/litweb/pdf/5989-9868EN.pdf S.9 Fußnote 14 sollte 5025 der richtige Port sein. Ich kann aber morgen nochmal in meinen Skripten nachsehen. Wichtig ist übrigens die Befehle über eine TCP connection mit dem Entsprechenden Terminator (üblicherweise ein newline) abzuschließen, damit das Geräte weiß, dass der Befehl zu Ende ist, denn eine TCP Verbindung ist ja nur ein Stream wo man an einem Ende Daten reinschiebt die am anderen wieder rauskommen. Wo da ein Befehl anfängt oder aufhört ist ohne Terminator nicht klar und kann zu seltsamen bzw. sporadischen Fehlern führen.
Hallo Whitespace, also das war wirklich ein sehr guter Hinweis von Dir !!! Super vielen Dank. Man kann in der Tat auf das Messgerät ohne irgendwelche Treiber zugreifen. Man braucht nur die IP Adresse und die Port Nummer (5025) und dann per TCP/IP darauf zugreifen. Klappt bei beiden Messgeräten 34461A und 34410A super. Als Anlage mein Source Code für VB5 (VB6) und ein Exe file..... Falls es jemand braucht. Allgemein bin ich begeistert, wie schnell man hier im Forum selbst bei Spezialfragen geholfen bekommt. Gruß Dirk
Ein kleiner Schönheitsfehler hat das Programm aber noch: Nach dem Beenden bleibt das Messgerät im Remote-Modus. Kennt jemand hierfür eine Lösung ?
DirkF schrieb: > Ein kleiner Schönheitsfehler hat das Programm aber noch: > Nach dem Beenden bleibt das Messgerät im Remote-Modus. > > Kennt jemand hierfür eine Lösung ? Handbuch Seite 82: > Press the [Local] key or execute the IEEE-488 GTL (Go To Local) > command from the remote interface to return to the local state. Das geht allerdings mit der Socket-Lösung (Port 5025) nicht, dafür musst du dann schon VXI-11 oder HiSLIP verwenden. Das geht wohl mit viGpibControlREN aus VISA.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.