LabVIEWForum.de
RS232 sperren - 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: RS232 sperren (/Thread-RS232-sperren)



RS232 sperren - Simsdibims - 19.09.2007 07:50

Hallo,
ich benutzte die VISA-Serial-Funktionen für die Seriellkommunikation über das Bitbusprotokoll.
Wie finde ich heraus, ob der jeweilige COM-Port bereits genutzt wird (gesperrt ist), und wenn nicht,
den COM-Port für meine Application zu verwenden und für die anderen Anwendungen zu sperren?!
Möglich?
Gruß Simon


RS232 sperren - eg - 19.09.2007 08:48

Sobald du den COM-Port geöffnet hast, ist er für andere Applikationen gesperrt.
Zum Rausfinden ob besetzt oder nicht, kannst du einfach versuchen den Port zu öffnen und wenn du dabei einen Fehler bekommst, ist der Port besetzt.

eg


RS232 sperren - Simsdibims - 19.09.2007 09:06

' schrieb:Sobald du den COM-Port geöffnet hast, ist er für andere Applikationen gesperrt.
Zum Rausfinden ob besetzt oder nicht, kannst du einfach versuchen den Port zu öffnen und wenn du dabei einen Fehler bekommst, ist der Port besetzt.

eg

Muss man den überhaupt öffnen?! Hab bisher nur Configure Serial Port verwendet und zum Schluss Close...


RS232 sperren - eg - 19.09.2007 09:08

' schrieb:Muss man den überhaupt öffnen?! Hab bisher nur Configure Serial Port verwendet und zum Schluss Close...


Nicht notwendigerweise. Configure reicht schon aus.

eg


RS232 sperren - rolfk - 19.09.2007 09:49

' schrieb:Nicht notwendigerweise. Configure reicht schon aus.

Im Falle von VISA ist die Öffnen Funktion eigentlich ein bisschen eine Uraltlast. Funktionsmässig tut jede VISA Funktion ein Öffnen auf die VISA Resource wenn diese nicht schon geöffnet ist. Die Close Funktion hat dagegen schon eine Wirkung. Nachdem man irgendeine VISA Funktion auf eine VISA Resource angewendet hat ist es immer sinnvoll, um die Resource wieder zu schliessen wenn sie nicht mehr benötigt wird.
Einige VISA Resourcen können geshared werden aber die serielle Schnittstelle sicher nicht. Und solange ein Prozess einen COM Port offen hat, kann kein anderer Prozess diesen öffnen. Indem man die VISA Resource schliesst wird der COM Port wieder freigegeben, ansonsten hält LabVIEW an dem COM Port fest bis man es ganz abschliesst.

Rolf Kalbermatter


RS232 sperren - Simsdibims - 19.09.2007 10:09

Ok danke euch schonmal,
ich habe jedoch bemerkt, dass die eine die andere LabVIEW Applikation schon stört, wenn man auch Befehle Richtung
COM-Port abschickt und dabei das Errorcluster nicht beachtet. Und Configure Serial Port kann man aus einer zweiten Applikation
ja parallel machen ohne dass ein Fehler kommt. Beim Schreiben ist es dann ja schon zu spät...


RS232 sperren - rolfk - 21.09.2007 08:03

' schrieb:Ok danke euch schonmal,
ich habe jedoch bemerkt, dass die eine die andere LabVIEW Applikation schon stört, wenn man auch Befehle Richtung
COM-Port abschickt und dabei das Errorcluster nicht beachtet. Und Configure Serial Port kann man aus einer zweiten Applikation
ja parallel machen ohne dass ein Fehler kommt. Beim Schreiben ist es dann ja schon zu spät...

Configure Serial Port ruft nur VISA Properties auf. Die beinflussen Attribute der VISA Session und manche davon werden wohl auch den seriellen Port auf OS Ebene ansprechen müssen um ihre Arbeit korrekt zu tun aber die meisten eben nicht. Solange Du innerhalb der selben LabVIEW Applikation an verschiedenen Stellen den selben COM Port ansprichst geht das schon. Die Ausschliessung für mehrmaliges Benützen der seriellen Schnittstelle ist ein Betriebssystemseinschränkung, keine VISA Einschränkung. Nur das Betriebsystem verbietet das Öffnen eines Ports wenn er schon durch einen anderen Prozess geöffnet ist und da kann VISA nicht umhin. Aber innerhalb eines Prozesses kannst Du denn selben Port in VISA mehrmals öffnen respektive VISA öffnet ihn dann eben nicht mehr wenn er schon offen ist. Dass das meist keine gute Idee ist sollte natürlich schon deutlich sein. Externe Instrumente sind typischerweise inherent State driven. Das heisst sie können unmöglich etwas Aussenden bevor sie nicht das entsprechende Kommando empfangen haben und wenn Du dann versuchst ein Instrument and verschiedenen Stellen anzusprechen ohne strikte Sequenzeinhaltung kann es passieren dass Stelle A die Antwort auf das Kommand empfängt das Stelle B ausgesendet hat. Dass ein serieller Port exklusive per Prozess verwaltet wird im OS hat schon einen guten Grund, aber das VISA nicht strikt einmaligen Zugriff zulässt hat auch so seine Vorteile in gewissen Situationen.

Dass man da halt aufpassen muss um Race-Conditions zu verhindern ist nun einmal nicht zu umgehen.

Rolf Kalbemratter