Konkurrierende Zugriffe auf COM-Schnittstelle
-
Hi,
unter POSIX/UNIX-Systemen ist es möglich, dass mehrere Prozesse die gleiche serielle Schnittstelle öffnen. Zugriffe werden dann geregelt, in dem vor jeder Lese/Schreiboperation ein lock() aufgerufen wird, so dass zwei Prozesse nicht durch wilde Zugriffe auf die Schnittstelle einen Datenmischmasch erhalten.
Meine Frage: wie geht das unter Windows? Wie muss ich den COM-Port öffnen, so dass auch andere Prozesse diesen noch benutzen können und wie sperre ich diesen für einen Zugriff?
Blapf!
-
Es kann immer nur eine Anwendung den Com Port öffnen.
-
Hmmmm, das ist ja eine ziemliche Einschränkung, speziell wenn man bedenkt, dass z.B. RS422/RS485-Schnittstellen meist als eine Art Bussystem verwendet werden.
D.h. ich muss hier tatsächlich für jede Operation den Port öffnen und wieder schließen? Und das Öffnen im Fehlerfall mehrfach wiederholen - immer in der Hoffnung, dass ein anderer Prozess, der möglicherweise auch gerade wartet, nicht zufällig schneller ist?
Blapf!
-
Oder Du könntest ein zentraler Service machen, der die entsprechende Serielle Schnittstelle öffnet und die Daten via einen IPC Mechanismus (Shared Memory, Sockets, Mail Slots, etc.) zur Verfügung stellt.
-
Blapf schrieb:
Hmmmm, das ist ja eine ziemliche Einschränkung, speziell wenn man bedenkt, dass z.B. RS422/RS485-Schnittstellen meist als eine Art Bussystem verwendet werden.
Hääää?
Moment mal, ein Bussystem kann mehrere Teilnehmer haben. Ein PC mit COM-Port ist so ein Teilnehmer.
Einen COM-Port zu öffnen und zu schließen hat zunächst gar nix damit zu tun, ob Du aktiver oder passiver Teilnehmer am Bus bist.
Das entscheidet einzig und allein ob der Transmitter-Teil des RS485-Transceivers aktiv ist.
Und dieser wird (meistens) über eine zusätzliche Steuerleitung angesteuert. Häufig wird hierfür RTS verwendet.Warum müssen bei Dir mehrere Prozesse zur gleichen Zeit auf den COM-Port zugreifen?
MartinP.S.: Übrigens, RS422 ist KEIN Bussystem!
-
Mmacher schrieb:
P.S.: Übrigens, RS422 ist KEIN Bussystem!
Nein, beides - RS485 und RS422 - sind keine Bussysteme, beide sind Systeme zur seriellen Datenübertragung, an die man mit einem passenden Protokollaber Geräte wie an einen Bus anhängen kann.
Mmacher schrieb:
Warum müssen bei Dir mehrere Prozesse zur gleichen Zeit auf den COM-Port zugreifen?
Obiges Beispiel: ich habe mehrere Geräte an der gleichen Schnittstelle hängen, welche sich über eine Adresse/ID/was auch immer identifizieren und per speziellem Protokoll über selbige auch angesprochen werden. In einem vernünftigen Softwaredesign kann/sollte man jetzt für jedes der Geräte einen eigenen Prozess starten, die dann über die selbe Schnittstelle jeder auf ein Gerät zugreift. Aber genau das setzt so einen Lock voraus.
Blapf!
-
In einem vernünftigen Softwaredesign kann/sollte man jetzt für jedes der Geräte einen eigenen Prozess starten, die dann über die selbe Schnittstelle jeder auf ein Gerät zugreift.
Warum denn das? Es gibt durchaus auch SW die mit mehreren Geräten umgehen kann.
Was daran unvernünftig sein soll kann ich nicht erkennen.
-
Was ist vernünftiger daran, alles in einen Prozess zu packen, so dass der intern dann - unter vielem anderen mehr - noch wissen muss, wie viele Geräte er eigentlich betreibt? Das ist zusätzlicher Verwaltungsaufwand, der komplett unnötig ist.
Und bevor jetzt hier eine Grundsatzdiskussion losgetreten wird (an der ich mich nicht beteiligen werde): ich empfehle den Wikipedia-Artikel über das KISS-Prinzip.
-
