Forum: PC-Programmierung Timing bei Prüfprogramm mit VISA-Schnittstelle


von Prüfprogrammm (Gast)


Lesenswert?

Hallo zusammen,

ich schreibe gerade ein Nadeladapter-Prüfprogramm für Platinen in C#. 
Als Prüfgerät dient der Multimetereinsatz eines Agilent 34972. Das ganze 
spreche ich per VISA-Schnittstelle über USB an.
Soweit funktioniert das auch ganz gut, eine Sache wäre aber noch 
optimierbar bzw. ist mir auch einfach nicht ganz klar.

Möchte ich eine Spannung Messen mach ich das aktuell beispielsweise mit 
folgendem Code:
1
agilent_string = "MEASure:VOLTage:DC? 100, 0.00003, (@101)\n";
2
viError = visa32.viPrintf(session, agilent_string);
3
Thread.Sleep(3000);
4
viError = visa32.viScanf(session, "%lf", value_d);

Das funktioniert, is aber unschön, weil die 3 Sekunden Wartezeit 1. 
unflexibel sind und 2. das ganze schneller laufen könnte. Rufe ich das 
viscanf zu schnell auf, kommt mist.
Nun drängt sich natürlich die Frage auf, ob es da nicht einen Befehl 
gibt, wo das gewarte ein Ende hat und ich direkt aus der Funktion 
zurückkomme wenn das Gerät gelesen hat. Quasi ein kombiniertes 
printf&scanf, und die Wartezeit dazwischen wird automatisch eingehalten.
Sorry, falls es eine doofe Frage is, aber es is das erste mal, dass ich 
mit der VISA-Schnittstelle arbeite.

Beste Grüße und vielen Dank,
Fabian

von Chris (Gast)


Lesenswert?

Hallo,

schau mal ob ein query nach "*opc?" hilft.
Das sollte blockieren bis die "operation complete" ist, danach kannst du 
regulär die Daten lesen. visa timeout beachten!

Grüße

von Prüfprogrammm (Gast)


Lesenswert?

Hallo Chris,
die Idee is gut, leider bekomme ich es aber net hin. Evtl. passt auch 
die Syntax nicht:
[pre]
agilent_string = "MEASure:VOLTage:DC? 100, 0.00003, (@101)\n";
viError = visa32.viPrintf(session, agilent_string);
viError = visa32.viPrintf(session, "*OPC?\n");
viError = visa32.viScanf(session, "%lf", value_d);
[\pre]

Irgendwo hatte ich noch gelesen, man solle ein read nach dem *OPC? 
schicken, aber auch das hat nicht funktioniert. im value_d steht dann 
immer der Wert "0".

Hat sonst noch jemand Vorschläge? Hatte erwartet hier arbeiten viele mit 
diesen Geräten?:-O

Beste Grüße,
Fabian

von dummschwaetzer (Gast)


Lesenswert?

ich nehm FETCH zum auslesen

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

*OPC? und deine Messung schreiben doch in den selben Output-Buffer, dass 
funktioniert von der Reihenfolge schon nicht.

Was gehen könnte wäre vielleicht (nicht ausprobiert):

CONFigure:VOLTage:DC
INIT
*OPC?
blocking read
FETC?
blocking read

Allgemein auch mal das *ESE kontrollieren.

von Christian R. (supachris)


Lesenswert?

Über welche VISA Implementierung ist das? Wir sprechen VISA Geräte über 
die .NET DLLs von NI an, die dort dabei sind. Da gibt's für sowas ein 
Query(...).

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
Noch kein Account? Hier anmelden.