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
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.
Warum macht nicht das eine Programm (der "Server") alles, und das andere Programm (das "Dienstprogramm") teilt seine Konfigurationswünsche dem einen Programm mit?
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.
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.
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.
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.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.