COM Port lesen

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
reneschmidt
User
Beiträge: 48
Registriert: Montag 4. Januar 2016, 15:14

Hallo zusammen,

vorab möchte ich sagen, das ich bisher noch nicht oft in die Situation gekommen bin mit Seriellen Daten zu arbeiten. Aber irgendwann ist ja immer das erst mal...

Es geht um folgendes: Ich habe ein RFID Reader welcher per USB an ein Linux System (in Testfall ein Raspberry) angeschlossen ist. Dieser Reader wird als COM Schnittstelle erkannt. Wenn ich ein cat auf die Schnittstelle mache kann ich die RFID Codes auch lesen. (Sobald ein Chip gelesen wird, sehe ich Ihn. Der Reader liefert auf dem COM Port nur die Chipnummer und ein CR.

Das einfach lesen über ein CAT ist natürlich etwas sehr wenig...
ganz einfache Frage:
Ich möchte gerne per Python die ganze zeit auf diesem Port hören und sobald ein Chip gelesen wird, soll eine mit diesem Wert eine Aktion ausgelöst werden. Während diese Aktion läuft, wäre es natürlich toll, wenn trotzdem weiter auf dem Port "zugehört" würde und nach Abschluss der Aktion erneut die Aktion mit dem nächsten Chip Code ausgeführt werden würde. (Das letztere ist allerdings eher ein Wunsch und kein muss, da zwischen den Chips immer Ablaufbedingt ca 1 Sekunde zeit ist und das sollte für die Aktion die ausgelöst wird ungefähr reichen. Im Ersten Schritt würde ich aber gerne erst mal den RFID Code in eine Textdatei schreiben.

Daher als erster Teil der Frage:
Wie schaffe ich es, das Python permanent auf den COM Port hört und sobald etwas kommt, das in eine Textdatei schreibt. Im Internet habe ich viel gefunden, wie man kurzzeitig auf einen Port hören kann, aber ich habe nicht verstanden, wie man Python davon überzeugt, die ganze zeit zuzuhören und bei einer Reaktion dann etwas zu tun.

Zum zweiten Teil:
Wie schaffe ich es, sobald etwas kommt, eine Aktion auszuführen und während die Aktion läuft trotzdem weiter zuzuhören?


Vielen Dank für die Hilfe
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sowas kannst du zb mit asyncio machen. Da kann man darauf warten, das Daten über Dateideskriptoren (und das ist dein Com Port) reinkommen, und gleichzeitig tasks abarbeiten.
reneschmidt
User
Beiträge: 48
Registriert: Montag 4. Januar 2016, 15:14

kannst Du das etwas genauer beschreiben? ich bin mir im Moment nicht mal sicher, wie ich für diesen Fall die Anbindung des ComPorts machen kann
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du mal in die asyncio-Dokumentation geschaut? Und damit mal experimentiert, was da so für Beispiele sind?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und googeln kann man auch: https://tinkering.xyz/async-serial/
Antworten