LabVIEWForum.de - Globale Variable mit Excel

LabVIEWForum.de

Normale Version: Globale Variable mit Excel
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
meine Name ist Stefan. Mittlerweile beschäftige ich mich seit Oktober mit LabVIEW und bin nun auf ein Problem gestoßen, welches ich nicht alleine bis jetzt beheben konnte.
Im Laufe meiner Arbeit habe ich einige VI zur Kommunikation mit dem Controller MCP2210 programmiert. Dafür verwendete ich eine vorgefertige DLL von Microchip.
(MCP2210 Breakout Modul)
Folgende VI's habe ich programmiert:
- SPI_Initialize (wird einmal am Start aufgerufen)
- SPI_WriteReadData (kann mehrfach aufgerufen)
- SPI_Close (wird am Ende ausgeführt)
In SPI_Initialize werden net Referenzen erzeugt und in eine Globale Variable geschrieben.
Wenn ich diese VI in LabVIEW zusammennutze funktioniert alles.
Meine aktuelle Aufbaue besteht darin aus Excel herraus LabVIEW Programme auszuführen. Wenn ich nun die 3 Programme nach einander ausführe, erhalte ich bei SPI_WriteReadData die Fehlermeldung, dass das Argument der Funktionen nicht "null" sein darf.
Der gleich Fehler tritt auf wenn das VI SPI_WriteReadData einzeln ausgeführt wird.
Meine Vermutung ist nun, dass die Global Variable nicht richtig beschrieben bzw. gelesen wird oder nach abschließen von SPI_Initialize gelöscht wird.
Kommt jemand dieses Problem bekannt vor?

Gruß Stefan

lv12_img
Hallo Stefan,

Zitat:Meine Vermutung ist nun, dass die Global Variable … nach abschließen von SPI_Initialize gelöscht wird.
Genau!

Eine globale Variable bleibt nur solange im Speicher, wie sie von irgendeinem ebenfalls noch im Speicher befindlichen VI referenziert wird. Gehen die VIs aus dem Speicher, ist auch die globale Variable weg!

- Warum überhaupt dieser Umweg, die VIs aus Excel heraus aufzurufen? Warum nicht alles in LabVIEW?
- Globale Variablen entsprechen nicht dem DATAFLOW-Prinzip von LabVIEW, wo das hinführt, hast du ja gerade gemerkt…

Zitat:Meine aktuelle Aufbaue besteht darin aus Excel herraus LabVIEW Programme auszuführen.
Wie machst du das momentan genau? Falls jedes VI eine eigene EXE darstellt, benutzen die sowieso nicht die identische globale Variable, sondern jeweils eine andere in ihrem eigenen Kontext…
Wie rufst du VIs von Excel aus auf? Was hast du da gemacht? Aus jedem VI eine Exe oder was?

Gehen wir mal vom Bsp., dass du aus jedem VI eine Exe gemacht hast. Dann rufst du "Init" auf. Wenn das fertig ist, ist die Instanz beendet und damit auch die Globale Variable weg. "WriteRead" erzeugt dann logischerweise einen Fehler.

Gruß, Jens

EDIT: Mögliche Lösung: Ein VI/Exe erstellen, die Init + Write/Read + Close enthält und das starten.
Und nicht überraschend, Gerd hat dieselben Ideen. Smile
Zitat:- Warum überhaupt dieser Umweg, die VIs aus Excel heraus aufzurufen? Warum nicht alles in LabVIEW?
Der Grund für die Nutzung mit Excel ist, ich soll mir eine Alternative zu TestStand überlegen.
Das bedeutet, der spätere Sinn besteht darin möglichst einfach verschiedene Test-Cases nach einander auszuführen.
Laut meinen Kollegen ist die Erstellung einer Sequenz mit TestStand relativ unübersichtlich im Vergleich zur Script basierder Variante.

Zitat:Wie rufst du VIs von Excel aus auf? Was hast du da gemacht? Aus jedem VI eine Exe oder was?
Die VI werden direkt ausgeführt.
Zm Aufruf verwenden ich zum Beispiel folgenden Code in Excel:
Set lvapp = CreateObject("Labview.Application")
Set viref = lvapp.GetVIReference("Pfad zum VI")
viref.ShowFPOnCall = True
Call viref.call(paramNames, paramVals)
paramNames und paramVals sind Arrays mit der Größe der Anzahl aller Ein -und Ausgang, welche im Frontpaneldefiniert sind.
Das gleiche Prinzip wird auch von einen LabVIEW Beispiel genutzt.
Bei mir ist es unter "C:\Program Files\National Instruments\LabVIEW 2012\examples\comm\freqresp.xls" zu finden.

Zitat:EDIT: Mögliche Lösung: Ein VI/Exe erstellen, die Init + Write/Read + Close enthält und das starten.
Wäre vom prinzip erstmal möglich, dann müsste ich aber die Ini + Close jedesmal aufrufen, wenn ich etwas schreiben oder lesen möchte.

Gibt es vielleicht eine Möglichkeit die Variablen im Speicher zu halten, weil mit TestStand muss es ja auch irgendwie möglich sein?

Gruß Stefan
Hallo Stefan,

Zitat:Gibt es vielleicht eine Möglichkeit die Variablen im Speicher zu halten, weil mit TestStand muss es ja auch irgendwie möglich sein?
Nicht in deiner Variante, da du jedesmal explizit eine neue LabVIEW-Instanz aufmachst (CreateObject("LabVIEW.Application"))…
Danke erstmal für eure schnelle Antwort.
Ich werde mir dann mal eine alternative Lösung überlegen.
Gruß Stefan
Referenz-URLs