LabVIEWForum.de
Kalibrator Omicron CMC 256 - Wert halten - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Kalibrator Omicron CMC 256 - Wert halten (/Thread-Kalibrator-Omicron-CMC-256-Wert-halten)



Kalibrator Omicron CMC 256 - Wert halten - hammerheadbene - 19.06.2013 06:17

Hallo liebe Gemeinde,

ich stoße gerade auf ein Problem, wo ich nicht weiter weiß.

Mit Hilfe einer Applikation (angehängt als vi) steuere ich den Kalibrator CMC 256 von Omicron an und kann die verschiedenen Werte für Spannung, Strom und Phasenwinkel einstellen. Dies funktioniert alles soweit wunderbar, so lange ich die Applikation unter LabVIEW oder unter der generieierten .exe ausführe. Ich möchte jedoch aus dem vi eine .NET Interop-Assembly (DLL) erstellen - an sich kein Problem, habe das nun auch schon öfters für andere Geräte gemacht.
Aber bei der Ansteuerung eines Kalibrators ist der entscheidende Unterschied, dass die Werte gehalten werden sollen und nicht nur einmal gelesen wie bei einem Mutimeter bspw. In LabVIEW realisiere ich dies über die while-Schleife. Diese kann ich jedoch in der DLL nicht verwenden, da ich sonst erst in den nächsten Programmschritt komme, wenn das vi abgearbeitet ist. Nehme ich einfach die while-Schleife raus, wird das vi beim Aufruf im Programm zwar komplett abgearbeitet, aber die Ausgänge auch wieder am Ende zurückgesetzt - die Werte an den Ausgängen bleiben somit nicht stehen.

Wie kann ich also realisieren, dass die Werte dauerhaft an den Ausgängen anstehen und zeitgleich das vi aber geschlossen/komplett abgearbeitet wird.

Hoffe das ist halbwegs verständlich Blink


RE: Kalibrator Omicron CMC 256 - Wert halten - Holy - 20.06.2013 19:08

Um sicher zu gehen das ich dein Problem verstanden habe hier nochmal eine stichpunktartige Zusammenfassung:
  • VI funktioniert in der Entwicklungsumgebung in der hochgeladenen Form
  • Ausgabe der Werte ist solange aktiv bis du mit dem "Stop"-Button dein VI beendest
  • Die exportierte Funktion in der Assembly stellt das gezeigte VI dar (ggf. ohne While-Schleife)
  • Weglassen der While-Schleife führt in der Assembly dazu, dass die Ausgabe beendet wird

Dazu ergibt sich meinerseits die Frage ob beim Weglassen der While-Schleife auch bei Ausführung in der Entwicklungsumgebung die Ausgabe beendet wird.

Meine Vermutung wäre, wenn alle Angaben korrekt sind und die Frage mit Ja beantwortet wird, das der ActiveX-Treiber beim Close alle Ausgaben anhält und die Verbindung deinitialisiert. Die Lösung wäre entsprechend zumindest das "Close" als eigenständige Funktion zu exportieren und erst aufzurufen wenn du die Ausgabe stoppen willst.

Eine Frage am Rand ist natürlich noch woher kommt eigentlich die Globale Variable mit den Daten und welche Bedeutung hat das? Ist die Schleife eigentlich nur drin um das Close zu verhindern oder gibst du zyklisch neue Werte vor?


RE: Kalibrator Omicron CMC 256 - Wert halten - hammerheadbene - 24.06.2013 08:01

Hallo Holy,

deine Zusammenfassung ist genau richtig und alle Punkte kann ich mit "ja" beantworten.

Wenn ich die While-Schleife weglasse dann wird auch in der Entwicklungsumgebung die Ausgabe beendet -> das ist ja genau mein Problem.
Das man das Close als eigenständige Funktion iwie exportieren und dann in der Entwicklungsumgebung auch extra ansteuern muss, habe ich mir auch schon so gedacht. Aber genau hier liegt der Hund begraben, wie mache ich dies? Und selbst wenn ich nur das close weglasse - sobald die VI-Kette abgearbeitet ist, wird der Ausgang deaktiviert. Dies verhindert eben die While-Schleife, die mich wiederum in der Entwicklungsumgebung stört - Teufelskreis.

Die globale Variable ist dafür da, um zyklisch immer die verschiedenen Werte (Spannung, Strom und Phasenwinkel) dem Kalibrator vorgeben zu können. Die Schleife hat dementsprechend beide Wirkungsfunktionen. Einmal um das close zu verhindern und zum anderen um Werte zyklisch anzupassen.


RE: Kalibrator Omicron CMC 256 - Wert halten - Lucki - 24.06.2013 09:31

Habe das Vi mal angeschaut. Nur kleiner Tip: dieses häßliche Strickmuster
[attachment=45094]
läßt sich so ersetzen,
[attachment=45095]
wobei bei den hier noch leeren Arraykonstanten für obere und untere Grenzwerte natürlich noch die richtigen Werte gesetzt werden müssen. (Für nicht zu setzende Grenzwerte "-Inf" und "Inf" verwenden.)


RE: Kalibrator Omicron CMC 256 - Wert halten - Holy - 24.06.2013 19:43

(24.06.2013 08:01 )hammerheadbene schrieb:  Hallo Holy,

deine Zusammenfassung ist genau richtig und alle Punkte kann ich mit "ja" beantworten.

Wenn ich die While-Schleife weglasse dann wird auch in der Entwicklungsumgebung die Ausgabe beendet -> das ist ja genau mein Problem.
Das man das Close als eigenständige Funktion iwie exportieren und dann in der Entwicklungsumgebung auch extra ansteuern muss, habe ich mir auch schon so gedacht. Aber genau hier liegt der Hund begraben, wie mache ich dies? Und selbst wenn ich nur das close weglasse - sobald die VI-Kette abgearbeitet ist, wird der Ausgang deaktiviert. Dies verhindert eben die While-Schleife, die mich wiederum in der Entwicklungsumgebung stört - Teufelskreis.

Die globale Variable ist dafür da, um zyklisch immer die verschiedenen Werte (Spannung, Strom und Phasenwinkel) dem Kalibrator vorgeben zu können. Die Schleife hat dementsprechend beide Wirkungsfunktionen. Einmal um das close zu verhindern und zum anderen um Werte zyklisch anzupassen.

Rein programmiertechnisch ist der korrekte Ansatz für dein LabVIEW-Testprogramm der selbe wie für dein .NET Programm. Du aktualisierst die Ausgabedaten wenn diese sich ändern und rufst Close auf wenn du das Programm beenden möchtest. Das nach Ende der "VI-Kette" der Ausgang deaktiviert wird, auch ohne Close, liegt vermutlich an einer automatischen Freigabe des Objektes. Ich halte es für eher unwahrscheinlich, dass der ActiveX Treiber dir Ausgabe deaktiviert wenn du nicht zyklisch die Ausgabe aktualisierst.

Das Close als eigenständige Funktion zu exportieren kannst du in einer Buildspezifikation. Kannst du in der Kategorie "Quelldateien" (Source Files) alles einstellen.