Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich hatte bisher noch nie mit VISA zu tun - heute habe ich Premiere.
Ich habe mich ein bisschen über das Resourcen-Management gewundert. So gibt es zwar VISA Open, aber in der Hilfe finde ich, dass VISA Write selbst eine Session öffnet. Tatsächlich funktioniert Write auch ohne Open. Nur wann brauche ich da das Open überhaupt?
Und wann genau muss ich nun Close ausführen? Habe rausgefunden, dass mehrere Sessions offen sein können. Daher sieht es für mich z.Z. so aus, als ob jeder Write- oder Read-Befehl eine Session öffnet, die sofort danach wieder geschlossen werden muss, um nicht in einem Chaos von offenen Sessions zu enden. Oder nutzt ein Write-/ Read-Befehl offene Sessions und öffnet nur eine neue, wenn keine andere verfügbar ist? Dann wäre ja nur ein Close ganz am Ende erforderlich...
Wozu brauche ich überhaupt Sessions? Oder woher weiß Close, welche Session geschlossen werden soll, wenn ihm doch nur die Schnittstelle (z.B. COM1) übergeben wird?
Wie ihr seht, bin ich gerade ziemlich verwirrt, da das Handling der Resourcen wesentlich anders als bei anderen Hardware-Zugriffen (z.B. DAQ, CAN, ...) zu sein scheint. Kann jemand weiterhelfen?
Ich hatte bisher noch nie mit VISA zu tun - heute habe ich Premiere.
Ich habe mich ein bisschen über das Resourcen-Management gewundert. So gibt es zwar VISA Open, aber in der Hilfe finde ich, dass VISA Write selbst eine Session öffnet. Tatsächlich funktioniert Write auch ohne Open. Nur wann brauche ich da das Open überhaupt?
Und wann genau muss ich nun Close ausführen? Habe rausgefunden, dass mehrere Sessions offen sein können. Daher sieht es für mich z.Z. so aus, als ob jeder Write- oder Read-Befehl eine Session öffnet, die sofort danach wieder geschlossen werden muss, um nicht in einem Chaos von offenen Sessions zu enden. Oder nutzt ein Write-/ Read-Befehl offene Sessions und öffnet nur eine neue, wenn keine andere verfügbar ist? Dann wäre ja nur ein Close ganz am Ende erforderlich...
Wozu brauche ich überhaupt Sessions? Oder woher weiß Close, welche Session geschlossen werden soll, wenn ihm doch nur die Schnittstelle (z.B. COM1) übergeben wird?
Wie ihr seht, bin ich gerade ziemlich verwirrt, da das Handling der Resourcen wesentlich anders als bei anderen Hardware-Zugriffen (z.B. DAQ, CAN, ...) zu sein scheint. Kann jemand weiterhelfen?
Open ist tatsächlich redundant, schadet aber auch nicht. Close ist dann nötig wenn Du den Port wieder freimachen willst um in anderen Applikationen dann Deiner LabVIEW Applikation zur Verfügung zu stehen.
Neue Ports werden nicht bei jedem Read angelegt. Wenn Du ein Open oder VISA Read/Write ausführst bekommst Du auch eine VISA resource out. Diese führst Du zum folgenden VI und das erkennt, dass es eine bereits geöffnete Resource ist und verwendet diese, statt einer neuen zu öffnen.
Das Handling ist nicht so gravierend anders in neueren LabVIEW Versionen. DAQ, IMAQ usw. verwenden in den neusten LabVIEW Versionen dasselbe Konzept, auch wenn die Implementation auf interner LabVIEW Ebene durchaus unterschiedlich ist.
Also brauche ich Close wirklich nur, wenn ich den Port für andere Programme frei machen will oder mein Programm beende? Sehr gut!
Weiterhin verwende ich nicht die VISA resource outs, weil ich den Portnamen in einem Config String habe. Dieser wird dann an jeder Stelle einfach übergeben, wo die Adresse gebraucht wird. Ich hoffe mal, dass dann Read/ Write trotzdem noch bereits geöffnete Resourcen erkennen!?
' schrieb:Ahja, ok. Jetzt bin ich um einiges schlauer.
Also brauche ich Close wirklich nur, wenn ich den Port für andere Programme frei machen will oder mein Programm beende? Sehr gut!
Weiterhin verwende ich nicht die VISA resource outs, weil ich den Portnamen in einem Config String habe. Dieser wird dann an jeder Stelle einfach übergeben, wo die Adresse gebraucht wird. Ich hoffe mal, dass dann Read/ Write trotzdem noch bereits geöffnete Resourcen erkennen!?
Hmm kannst es ja testen, aber sauber programmieren ist das eigentlich nicht. Ich mache das immer so dass ich irgendwo ein explizites "XXXXX Initialize" habe, das den Port öffnet und alle nötigen Initilialisierungen durchführt (Identifikationscheck dass man mit dem richtigen Instrument plaudert, Reset, allgemeine Parametereinstellungen usw.) und die daraus kommenden VISA Resource in einem Schieberegister oder einer intelligenten globalen Variable speichere und diesen danach immer verwende. Hat mir noch nie Windeier gelegt.