Pyton 3 Serial Fehler

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.
AnDre86
User
Beiträge: 31
Registriert: Dienstag 2. Januar 2018, 14:35

Also an sich sollte das Funktionieren ja? Dann kann ich mir nur vorstellen das es an der PCIE liegt die das Problem verursacht den normale Texte ohne Zeichen wiederholung funktionieren ja auch. OK danke sehr für den Tip ich werde das mal Testen und das Script erweitern :)

LG
AnDre86
User
Beiträge: 31
Registriert: Dienstag 2. Januar 2018, 14:35

Habe mal etwas gelesen hoffe ich habe das so richtig verstanden, kann es sein das am ASCII von Hyperterminal hapert?
Quasi das problem mit den bit gibt?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Noe. Ein A ist ein A ist ein A.
AnDre86
User
Beiträge: 31
Registriert: Dienstag 2. Januar 2018, 14:35

Ok,
nachdem ich jetzt im Hyperterminal, bei Zeilenverzögerung und Zeichenverzögerung jeweils 1 Millisekunde hinzugefügt habe scheint es zu funktionieren.

Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
============= RESTART: C:\Users\x\Documents\script\test 2.py =============
COM1
Test Daten Test Daten Test Daten Test Daten


Test Daten Test Daten Test Daten Test Daten


Test Daten Test Daten Test Daten Test Daten


Eine Textdatei lasse ich mir auch erstellen, muss nur noch herausfinden wie immer eine neue erstellt wird wenn ich das script neu starte.

Aufjedenfall vielen Dank für eure Hilfe.

LG

Code: Alles auswählen

import serial, time
ser = serial.Serial()
ser.baudrate = 19200
ser.port = 'COM1'
ser.timeout = 1
ser.open()


if ser.isOpen():
    print (ser.name)
    
while True:
    serial_line = ser.readline()
     
    if len(serial_line) > 0:
        print(serial_line.decode(encoding='utf-8',errors='replace'))
        time.sleep(1)
        date = time.strftime("%d.%m.%Y")
        log = str(serial_line.decode(encoding='utf-8'))
        f = open(r"C:\Users\x\Desktop\Test\Messung.txt", "a")
        f.write(log)
        f.close()
AnDre86
User
Beiträge: 31
Registriert: Dienstag 2. Januar 2018, 14:35

Hallo nochmals,

habe nochmal eine Frage, da das ja jetzt läuft hätte ich gerne eine möglichkeit beim erneuten Ausführen des Scriptes das immer eine neue .txt erstellt wird ohne die alte .txt zu überschreiben oder was hin zu zu schreiben. Momentan füge ich immer nur neues hin zu.

Würde gerne auch das Aktuelle Datum im Namen haben aber habe noch keine passende Lösung gefunden.

Habt ihr nen Tip dazu?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@AnDre86: am besten öffnet man Dateiobjekte mit `with`:

Code: Alles auswählen

with serial.Serial('COM1', 19200, timeout=1) as ser:
    while True:
        serial_line = ser.readline()
        if serial_line:
            log = serial_line.decode('utf-8')
            print(log)
            with open(r"C:\Users\x\Desktop\Test\Messung.txt", "a") as f:
                f.write(log)
da das Protokoll doch wahrscheinlich zeilenbasiert ist, macht das timeout hier nicht wirklich Sinn:

Code: Alles auswählen

with serial.Serial('COM1', 19200) as ser:
    while True:
        serial_line = ser.readline()
        log = serial_line.decode('utf-8')
        print(log)
        with open(r"C:\Users\x\Desktop\Test\Messung.txt", "a") as f:
            f.write(log)
Zu Deiner Frage: Dateinamen sind auch nur Strings, so dass man sie einfach mit Variablen zusammen formatieren kann.
AnDre86
User
Beiträge: 31
Registriert: Dienstag 2. Januar 2018, 14:35

Das ist aber eine sehr kurze und elegante Lösung.
Hab mir die ganze Zeit schon nen Kopf zerbrochen wie ich aus dem Loop komme.

Jetzt hab ich aber noch eine Frage dazu, das wird ja nur einmal ausgeführt was mache ich wenn ich aber in 3 kurzen Zeitabständen 3 mal Daten gesendet bekomme ohne immer wieder das Script neu öffnen zu müssen?

Danke für eure Hilfe.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@AnDre86: das verstehe ich nicht, Du hast doch eine Endlosschleife.
AnDre86
User
Beiträge: 31
Registriert: Dienstag 2. Januar 2018, 14:35

Mein fehler funktioniert so gut. :)

Habs auch mit dem Datum hinbekommen.

Code: Alles auswählen

                date = time.strftime("%d.%m.%Y")
                with open(r"C:\Users\x\Desktop\Test\{date}.txt".format(**vars()), "a") as f:
                    f.write(log)
Dann steht die Grund Funktion sehr schön, danke allen für die Hilfe. Dann kann ich es ja nach und nach ausbauen.

LG
Zuletzt geändert von AnDre86 am Freitag 5. Januar 2018, 11:37, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@AnDre86: mach es explizit:

Code: Alles auswählen

with open(r"C:\Users\xx\Desktop\Test\{date}.txt".format(date=date), "a") as f:
    f.write(log)
um die Dateien richtig sortiert zu bekommen, wird das Jahr immer als erstes ausgegeben:

Code: Alles auswählen

date = time.strftime("%Y.%m.%d")
AnDre86
User
Beiträge: 31
Registriert: Dienstag 2. Januar 2018, 14:35

ok alles klar :)
Antworten