Forum: PC-Programmierung Mit 2 Programmen gleichz. auf ser. Schnittstelle zugreifen


von Jens P. (picler)


Lesenswert?

Hallo allerseits,

ich habe das Problem, dass ich von zwei selbstgeschriebenen Programmen 
auf die serielle Schnittstelle zugreifen muss. Das eine Programm stellt 
dabei eine Art Server dar und reagiert auf die Daten, welche übertragen 
werden. Das zweite Programm ist ein Dienstprogramm, mit dem 
Einstellungen und Konfigurationsdaten geändert werden. Bisher habe ich 
den Zugriff auf die serielle Schnittstelle so gelöst, dass das 
Serverprogramm ständig die Existenz einer "Lock"-Datei abfragt und bei 
deren vorhandensein die Schnittstelle freigibt. Diese "Lock"-Datei wird 
beim Start vom Dienstprogramm angelegt und bei der Beendigung gelöscht. 
Leider ist das nicht gerade ein sauberer Programmierstil, doch mir ist 
bisher nichts besseres eingefallen. Außerdem ist in dieser Zeit der 
Server lahmgelegt.

Deshalb meine Frage: Gibt es eine Möglichkeit auf eine serielle 
Schnittstelle mit zwei Programmen gleichzeitig zuzugreifen? Theoretisch 
müsste es ja über eine Art virtueller COM-Port gehen, wo eine vorhandene 
Schnittstelle einfach geclont wird. Doch ich weiß ehrlich gesagt nicht 
so richtig wie ich das programmieren soll. Google liefert leider auch 
nicht dass was ich suche. Oder ich suche falsch...

OS ist Windows XP / 7 und als Programmiersprache nutze ich VB2008.

Danke schon mal im Voraus.

Jens

von Peter II (Gast)


Lesenswert?

Jens PICler schrieb:
> Deshalb meine Frage: Gibt es eine Möglichkeit auf eine serielle
> Schnittstelle mit zwei Programmen gleichzeitig zuzugreifen

nein, ist auch überhaupt nicht sinnvoll.

Entweder schreibt man sich ein 3.Programm was ein dienst ist, dieser ist 
dann für die Schnittstelle verantwortlich. Und jedes deiner Programm 
redet dann nur mit dem Dienst.

Oder du machst es schon gemacht hast, statt einer Datei kann man auch 
ein benamten Mutex verwenden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Warum macht nicht das eine Programm (der "Server") alles, und das andere 
Programm (das "Dienstprogramm") teilt seine Konfigurationswünsche dem 
einen Programm mit?

von mullwark (Gast)


Lesenswert?

Erinnert mich an GPS-Empfänger, deren Daten dann gleichzeitig für 
mehrere Programme wie elektronische Seekarten, Radargeräte, etc. zur 
Verfügung gestellt werden müssen. Dort ist das so gelöst, daß ein 
Programm die Daten aufnimmt und dann über eine Schnittstelle zum 
nächsten weiterreicht.
Da die selbstgeschrieben sind, sollte es doch möglich sein, daß deine 
"Art Server" dem Dienstprogramm die Daten weitergibt.

von Brater (Gast)


Lesenswert?

Setze doch den seriellen Port als Web-Server um. Es gibt beispielsweise 
für den Arduino zur Kommunikation ein kleines Programm, das sich an den 
COM-Port hängt und dann kann jedes Programm per Socket darauf zugreifen. 
Das Programm ist nicht auf Arduino beschränkt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

mullwark schrieb:
> Erinnert mich an GPS-Empfänger, deren Daten dann gleichzeitig für
> mehrere Programme wie elektronische Seekarten, Radargeräte, etc. zur
> Verfügung gestellt werden müssen.

Hier kann auch hub4com (Teil von http://com0com.sourceforge.net/) 
verwendet werden.

von meine wenigkeit (Gast)


Lesenswert?

Ein usb-seriell adapter für ca 9€ dürft die einfachste und schnellste 
lösung sein würde ich sagen.

Alternativ, sofern du dir richtig arbeit machen willst: es gibt tcp/ip 
over serial implementationen die du umsetzen könntest. Damit hast du 
dann eine paketorientierte umgebung mit sockets wie in einem netzwerk 
was eine portierung auf ein tcp/ip basiertes netzwerk erleichtern würde.

von Stefan (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Warum macht nicht das eine Programm (der "Server") alles, und das andere
> Programm (das "Dienstprogramm") teilt seine Konfigurationswünsche dem
> einen Programm mit?

Mach in Deinem Server eine Pipe auf über die dann andere Programme mit 
der Schnittstelle durch den Server kommumizieren.
Ist der Server down (keine Pipe) kommunizieren die Programme direkt.

Stefan

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

ich verstehe nicht, wieso die Zugriffe überhaupt getrennt wurden - der 
Server muss doch sowieso beim Start die Parameter für die serielle 
Schnittstelle einstellen, hat also bereits die nötigen Funktionen - man 
muss ihn nur bei Bedarf beauftragen, geänderte Parameter zu übernehmen 
und die Schnittstelle entsprechend neu einzustellen.

So etwas wie Schnittstellenparameter an mehreren verschiedenen 
Programmstellen zu manipulieren ist immer ein Fehler. Allenfalls kann 
man auf die Primitiv-Logik zurückgreifen, Änderungen in eine 
Config-Datei zu schreiben und dananch den Server zu stoppen und neu zu 
starten, um die Änderungen zu übernehmen, das Linux-übliche Verfahren. 
Ist aber eben nicht sehr komfortabel.

Gruss Reinhard

von Jens P. (picler)


Lesenswert?

Vielen Dank für die Anworten. Ich werde mir mal hub4com genauer ansehen. 
Das scheint genau das zu machen wie ich es mir vorstelle. Ansonsten wäre 
es auch eine Lösung, den Server alles machen zu lassen und ihm nur die 
Konfigurationsänderungen mitzuteilen. Manchmal hat man eben Tomaten auf 
den Augen ;-)

Gruß Jens

von Peter II (Gast)


Lesenswert?

Jens PICler schrieb:
> Vielen Dank für die Anworten. Ich werde mir mal hub4com genauer ansehen.
> Das scheint genau das zu machen wie ich es mir vorstelle.

bestimmt nicht. Was ist wenn beide Senden? Dann kommen die bytes 
gemischt beim Empfänger an - ob das gut geht?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.