Serielle Schnittstelle und Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Hi,
hat einer von euch schon mal USPP benutzt? Ich habe folgendes Problem:

Mit der Klasse USPP übertrage ich Packete über die Serielle die aus 2x 255 und dann einem Count (0-255), 4 x 4 Bytes und einem CommandWord (8Bit) bestehen.

Das klappt ja auch wunderbar, wenn man das einmal macht.
Ich hab diese Übertragung in einer Thread laufen und schicke die Daten quasi dauernt ab. Unter Windows ist das kein Problem nur unter Linux stoppt die Übertragung nach ca. 70 mal senden und setzt für eine ca. 1 Sekunde. Dannach läuft der Thread wieder weiter für ca. 70 Übertragungen.

Seltsam, oder? :?

Die Einstellungen sind => Port: /dev/ttyS0(linux), COM1(win), 19200Baud und Timeout von 1 Sekunde.

Ist vielleicht ein Pufferproblem oder ähnliches. Gleich Morgen setz ich in der Übertragung mal ein sleep(0.01) ein oder ähnliches.

Die Daten müssen unbedingt flüssig in über den Port. Wie gesagt unter Windows kein Thema aber unter Linux :?: :!:

Wär sau cool wenn einer ne Idee hätte.
Ich dank schon mal im voraus. :wink:
greetings
sebi
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi anitmicro,

wenn wo ein Puffer ist, sollte es auch eine Methode "flush" oder was ähnliches geben. Ich kenne USPP zwar nicht, würde aber mal nach sowas suchen.


Gruß

Dookie
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Hi Dookie:
ja man kann den Buffer leeren mit flush. Aber vielleicht ist das ja auch ein Problem mit Linux. Von wegen Priority und so *seuftz* :wink:
greetings
sebi
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi antimicro,

könnte da vielleicht auch der GC zwischenfunken?
Versuch mal am Begin der Funktion ein

Code: Alles auswählen

gc.collect()
natürlich musst Du vorher gc importieren.


Gruß

Dookie
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Hi,
jo ich habs hinbekommen. Das lag wohl daran das der PC der die Daten gesendet hat zu schnell war. Ich meine jetzt nicht die Übertragungsgeschwindigkeit sondern die Zeit zwischen den Packeten.

Nach einem einer Pause von 10ms klappte das alles super.

Aber vielen dank für die Hilfe!
greetings
sebi
Antworten