Hi, ich benötige für ein Projekt einen virtuellen Comport. Also in /dev/ttyIRGENDWAS0 z.B.
Das ganze soll aber später nicht auf einer echten Schnittstelle sondern in einem (Python)Programm landen. Wie kann man so etwas realisieren?
![]() Anmeldungsdatum: Beiträge: 9066 Wohnort: Petersberg |
Hi, ich benötige für ein Projekt einen virtuellen Comport. Also in /dev/ttyIRGENDWAS0 z.B. Das ganze soll aber später nicht auf einer echten Schnittstelle sondern in einem (Python)Programm landen. Wie kann man so etwas realisieren? |
||
Anmeldungsdatum: Beiträge: 356 Wohnort: Oberösterreich |
Pythonprogramm soll dann aus der Datei /dev/ttyIRGENDWAS0 lesen. Wenn du dann etwas auf diese Datei schreibst, so wie auf ein anderes tty*, dann kann das Pythonprogramm das entgegennehmen. |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 9066 Wohnort: Petersberg |
Geht das auch umgekehrt? |
||
Anmeldungsdatum: Beiträge: 356 Wohnort: Oberösterreich |
Pythonprogramm schreibt und ein anderes Programm liest? Klar ☺ |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 9066 Wohnort: Petersberg |
Und das Programm greift mit normalen Dateioperationen darauf zu oder wie läuft das? Wie kann das Programm feststellen, dass etwas an die Schnittstelle geschickt wurde? Einfach permanent Pollen oder gibt es die Möglichkeit für einen Event? |
||
Anmeldungsdatum: Beiträge: 356 Wohnort: Oberösterreich |
Wie machst du es denn bei einem physikalischen Anschluss? Gibt es da Ereignisse wenn etwas kommt und wo fragst du diese ab? |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 9066 Wohnort: Petersberg |
Ja Moment, so rum meine ich das nicht. Das Programm ist ja sozusagen der physikalische Anschluss. Normalerweise ist es ja so: Modem <-> Schnittstelle <-> /dev/tty <-> Terminalprogramm Ich möchte quasi Modem und Schnittstelle durch ein Programm ersetzen, also: Python Programm <-> /dev/tty <-> Terminalprogramm Was du meinst, wenn ich es richtig verstanden habe, ist das Terminalprogramm. Um das geht es mir aber nicht. Auf diese Seite soll mein Programm nicht hin |
||
Anmeldungsdatum: Beiträge: 356 Wohnort: Oberösterreich |
Klar. Aber angenommen du hättest einen physikalischen Anschluss, dann würdest du ja vermutlich bei dem Programm, das den Anschluss anspricht, auch Ereignisse nutzen wollen. Die musst du aber irgendwo herbekommen, sprich: das Programm muss sich irgendwo anmelden, dass es ein Ereignis empfangen will wenn etwas am Anschluss eintrifft. Das gilt es zu simulieren. |
||
![]() Anmeldungsdatum: Beiträge: 1130 |
/dev/tty verhält sich wie eine Datei, dass ist der Sinn von all dem Kram in /dev, irgendwie sehe ich da gerade nicht wo das Problem ist? |
||
Anmeldungsdatum: Beiträge: 356 Wohnort: Oberösterreich |
Das Problem ist, dass Dateien keine Ereignisse auslösen 😉 . |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 9066 Wohnort: Petersberg |
DasIch schrieb:
Naja, ich weiß nicht, wie ich das umsetzen muss. Stell dir folgendes vor. Ich habe ein Terminalprogramm, das Daten zu einer seriellen Schnittstelle sendet oder von dort empfängt. Die Daten werden über eine physikalische Schnittstelle gesendet. Diese physikalische Schnittstelle möchte ich mit einem Programm simulieren. Wenn ich also von meinem Terminalprogramm Daten sende sollen die nachher in meinem Programm ankommen. Öffnet ich die Schnittstelle einfach wie eine Datei und wenn was kommt dann kommt was? |
||
![]() Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
burli schrieb:
Ein fifo ist nicht einfach eine Datei, sondern mehr sowas wie eine Pipe ! Und wenn Du mal in man fifo nachschaust, findest Du den Hinweis:
Dieses Signal könntest Du im Prinzip wohl abfangen, um Deinen Schnittstellen-Simulator zu wecken, sobald Daten anstehen. LG, track |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 9066 Wohnort: Petersberg |
Ok, ich habs jetzt. Ich habe, wie oben beschrieben, einen virtuellen Port angelegt. Mit einem einfachen Programm kann ich Daten empfangen f = open('/dev/ttyVCP0', 'r') text = f.read(1) print text f.close() mit f = open('/dev/ttyVCP0', 'w') f.write('Hello World') f.close() kann ich Daten senden. Zwei Probleme: zum einen muss ich sowohl Terminal Programm als auch Python Script als root ausführen. Ich nehme an, ich muss dem virtuellen Port einfach nur den richtigen User bzw die richtige Gruppe zuweisen. Das zweite Problem, was ich allerdings noch nicht getestet habe ist wohl, dass der virtuelle Port beim nächsten Neustart verschwunden ist. Wie kann ich den Port permanent anlegen und wie kann ich den einem User oder einer Usergruppe zuweisen? |
||
Anmeldungsdatum: Beiträge: 356 Wohnort: Oberösterreich |
Nutze das Skript /etc/rc.local, das wird beim Systemstart ausgeführt. Hinweis: Es wäre auch mal lieb wenn du einmal Danke sagst, dafür dass dir ein paar Leute weiterhelfen. |
||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 9066 Wohnort: Petersberg |
cn schrieb:
Alles klar. Es funktioniert. Ich hab allerdings den User angeben müssen. Die Gruppe "users" hat nicht funktioniert. Man könnte höchstens die Gruppe "plugdev" verwenden oder eine neue anlegen
Ich bedanke mich bei so etwas immer. Aber normalerweise am Ende, nicht für jede einzelne Frage. In einem normalen Gespräch macht man das normalerweise ja auch nicht, oder zumindest nur in gewissen Situationen. Jedenfalls Danke für die Hilfe. Es tut jetzt, was ich wollte |