Gast
#2547244
Hallo Forum,
ich habe folgendes Problem, bei dessen Lösung ich im Moment
irgendwie auf dem Schlauch stehe bzw. nicht so recht weiter-
komme:
Es gibt ein Meßinstrument mit GPIB-Schnittstelle, welches ich
von einem PC aus über einen USB-GPIB-Adapter fernsteuern will.
Das Steuerprogramm auf dem PC soll in VB.Net geschrieben werden
und auf die GPIB-Schnittstelle über Agilent VISA zugreifen.
Nun ist es leider so, daß ich in real zum Programmschreiben nicht
dauernd Zugriff auf das Meßgerät habe, da es während dieser Zeit
fast dauernd auch von anderen Leuten benutzt werden muß.
Ich kann nun meine Meßprogramme zunächst "trocken" - ohne
angeschlossenes Instrument - schreiben, jedoch ist das Debuggen/
die Inbetriebnahme des Programms ohne Instrument eigentlich nicht
wirklich möglich.
Was mir nun vorschwebt ist eine Art "virtuelles" Instrument.
Auf dem Steuer-PC soll ein weiteres Programm laufen, das über
VISA am selben (virtuellen) GPIB0-Adapter hängt und dauernd
diesen virtuellen Bus abhört, also quasi Daten einliest.
Die eingelesenen Daten müssen dann sinnvoll analysiert werden,
ob sie Kommandos aus dem Command Set des Instruments enthalten.
Wenn ein solches Kommando erkannt wird, dann soll das virtuelle
Instrument antworten, z. B. indem es irgendwelche Dummymeßdaten
auf den virtuellen GPIB-Bus zurückgibt oder sonst in der Weise
antwortet, wie es ein reales Instrument auch machen würde.
Hier mal ein Beispiel, ins Unreine geschrieben:
Meßprogramm: viOpenDefaultRM(defrm1)
Meßprogramm: viOpen(defrm1, virt_instr1$, 0, 0, viSession1)
virt_Instrument: viOpenDefaultRM(defrm2)
virt_Instrument: viOpen(defrm2, virt_instr2$, 0, 0, viSession2)
Meßprogramm: viVPrintf(viSession1, "*IDN?" + vbCrLf, 0)
virt_Instrument: Do
virt_Instrument: viVScanf(viSession2, strRes)
virt_Instrument: Loop until ...viVScanf = irgendwas empfangen
virt_Instrument: 'analysiere strRes und kreiere den passenden
'Antwortstring dazu
virt_Instrument: viVPrintf(viSession2, Antwort$ + vbCrLf, 0)
virt_Instrument: viClose(viSession2)
virt_Instrument: viClose(defrm2)
Meßprogramm: viClose(viSession1)
Meßprogramm: viClose(defrm1)
Ich hoffe, es ist klar geworden, auf was ich heraus will...
Wenn ich allerdings im virt-Instr-Programm ein viVScanf in einer
Schleife ablaufen lasse, detektiere ich damit nur einen Timeout,
solange das Meßprogramm nichts sendet.
Es gibt wohl irgendwelche VI_Events, auf die man dann mit reagieren
kann,
aber angeblich funktioniert das unter VB(.net) irgendwie nicht oder
aber doch und wenn dann nicht einfach...
Die VB.Net-Beispiele, die ich gefunden habe, behandeln eigentlich
nur, wie ich die Meßprogrammseite programmatisch umsetzte, sprich,
wie ich vom PC aus ein echtes GPIB-Instrument steuere. Was ich aber
bräuchte, wäre ein Beispiel für den umgekehrten Fall, nämlich daß
der PC das GPIB-Instrument ist.
Ich gehe davon aus, daß das Printf-Scanf-Pingpong-Spiel von oben
nur die Grobstruktur einer solchen Programm-Programm-Kommunikation
sein kann, im Detail da aber noch mehr notwendig ist. Ev. muß sich
das virtuelle Instrument ja z. B. um den Status irgendwelcher (virt.)
Busleitungen kümmern (ATN, SRQ,...), damit überhaupt eine Kommunikation
zustande kommt. Und da hört es halt leider bei mir auf.
Kennt sich jemand mit dieser Thematik aus, bzw. hat so etwas
vielleicht sogar schon einmal umgesetzt oder kennt ein Beispiel,
an dem man sich orientieren kann ?
Ein Google-Suche hat leider nicht viel verwertbares zu Tage
gefördert. Es gibt für Labview im NI-Forum ein Beispiel für
ein Non-controller-Programm, da ich kein Labview habe, nützt
mir das aber nichts. Ebenfalls gefunden habe ich einen Hinweis
auf "NI-Device", was wohl so etwas in der Richtung machen soll,
wie ich es mir vorstelle, jedoch ebenfalls wenig Details und
keine Info, ob VB.Net unterstützt wird. Ich würde eigentlich
auch lieber auf der Agilent-Schiene bleiben, da der Rest der
Meßprogramme schon darauf aufsetzt.
Herzlichen Dank schon mal für die Antworten !