Seite 1 von 1
Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 12:52
von mr_n12345
Hallo an alle,
zuerst mal bin neu hier und falls ich etwas falsch mache, bitte um Nachsicht!
mein erste Frage ist, ob es eine Möglichekit gibt , um zu überprüfen ob per seriel port etwas gesendet wird?
also etwas wie:
Code: Alles auswählen
ser = serial.Serial('COM4', 115200)
cc=ser.readline()
if cc == NONE:
print("Error")
oder so???
Und meine andere Frage wäre, wie ich meine Empfangenen Daten vergleichen könnte?
Im unteren Code würde ich gerne die If:
verwenden, aber der Code gibt nie was aus bzw. springt nie in die If schleife!?
Hier mein kompletter Code:
Code: Alles auswählen
import serial
ser = serial.Serial('COM4', 115200)
if (ser.isOpen()):
while True:
cc=ser.readline()
#print(cc)
a = cc.decode()
#print(a)
if a == "Hand sends:":
print("Reciving Hand Quaternions")
else:
print ("Port not open")
Der Output vom Code ist:
Hand sends:
1.00
-0.00
Danke schon mal an alle die Antworten!
Schönen Tag!!!
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:02
von __deets__
Es gibt keine if-Schleife. Das ist eine if-Anweisung. Um Ausdruecke in if-Anweisungen gehoeren keine Klammern. Wenn man ein Serial-Objekt anlegt, ist das immer automatisch geoeffnet, oder es gibt einen Fehler, das muss man also nicht pruefen. Auf None prueft man mit dem is-Operator, also
Aber den Fall hast du nicht, denn laut
https://pyserial.readthedocs.io/en/late ... ial.Serial ist das Verhalten fuer readline entweder zu warten, bis eine Zeile geliefert wird, oder du hast einen timeout gesetzt (was du nicht hast laut Code), dann wuerdest du einen leeren Byte-String b"" bekommen.
Und deine Frage lautet, ob "per Serial port etwas gesendet wird" - ich glaube du verwechselst das, du pruefst ja auf einkommende Daten, also willst du wissen, ob etwas *empfangen* wird. Mir ist nicht so ganz klar, was du genau willst. Wie gesagt, readline blockiert einfach bis etwas kommt. Ist das nicht das gewuenschte Verhalten?
Zu guter Letzt: der vermeintliche Output passt nicht zum Code. Da ist keine print-Anweisung.
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:09
von mr_n12345
Hallo, als erstes danke für die Antwort.
Ja sorry ich meinte empfangen!
Ok wusste nicht das
readline
solange blockiert bis etwas kommt, der tip mit dem timeout ist super.
Meine andere Frage war, warum mein code die IF Anweiseung
Code: Alles auswählen
if a == "Hand sends:":
print("Reciving Hand Quaternions")
nicht ausführt?
Ich denke es muss an den Datentypen liegen.
Wie gesagt bin neu in Python.
Danke fpr die Hilfe!
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:16
von __deets__
Wenn es nicht klappt, dann ist es nicht dasselbe. Kann es sein, dass dir ein newline fehlt? Du liest ja bis zu einem Zeilenendezeichen ("\n"), da musst du auch mit vergleichen. Oder es vorher mit string.strip() entfernen.
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:17
von __blackjack__
@mr_n12345: Die ``if``-Anweisung wird ausgeführt wenn `readline()` zurückkehrt. Vielleicht wird der Code im ``if``-Block dann nicht ausgeführt. Das passiert wenn `a` nicht gleich "Hand sends:" ist. Entweder weil der Datentyp vom Wert von `a` nicht `str` ist, oder falls es eine Zeichenkette ist, dann weil der Wert nicht übereinstimmt. Kann beispielsweise passieren wenn `a` noch etwas enthält an das Du nicht gedacht hast — beispielsweise ein Wagenrücklaufzeichen oder ein Zeilenendezeichen.
Typ und tatsächlichen Inhalt könntest Du beispielsweise durch ein ``print(type(a), repr(a))`` vor dem ``if`` mal anschauen.
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:20
von mr_n12345
Danke für die Antwort.
Ok das die If Anweisung nicht ganz stimmt merke ich auch.
Soweit ich weis, liest readline bis
# read a '\n' terminated line
Du meinst also ich müsste das \n mitabfragen?
danke
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:24
von mr_n12345
oh super, danke.
Der letzte tipp mit
hat mir geholfen.
Es hat tatsächlich an \r\n gelegen.
<class 'str'> 'Hand sends: \r\n'
Danke an alle!!!!!!!
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:45
von mr_n12345
aber die Frage ob es eine möglichekit gibt um zu Überprüfen ob seriel port überhautp zeichen sendet habe ich nich nicht ganz gelöst bzw die antworten verstanden.
Wie gesagt ich würde einfach gerne den port schlisen wenn ich merke, dass seit 10sec ncihts mehr gesendet wurde.
Vlt wäre jemand so nett mir da kurz tipps zu geben?
Wie gesagt bin am anfang von python.
Danke!!!!
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:47
von mr_n12345
und noch eine fragen, kann ich mit serial.readline() eine abfrage machen, dass er nach 3 gelesenen zeilen aufhören soll?
Igrendeine if oder while?
vlt hätte jemand einen ansatz für mich
DANKE!!!!!!!!!!!
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 13:55
von __deets__
Gezählt wird weder mit if noch mit while. Sondern mit for.
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 14:06
von mr_n12345
Code: Alles auswählen
c = ser.read()
cc = c.decode()
print(type(cc), repr(cc))
if cc == "\n"
Jemand eine Erklärung für mich warum die
nicht funktioniert?
Fehlermeldung:
if cc == "\n"
^
SyntaxError: invalid syntax
Danke
Re: Seriel Port Datentypen
Verfasst: Mittwoch 13. Oktober 2021, 14:10
von __deets__
Da fehlt was am Ende der Zeile. Und ein bisschen mehr Einsatz, statt im Minutentakt sich die absoluten Grundlagen erklaeren zu lassen, schadet nicht.