Signal von der seriellen Schnittstelle lesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
slotman
User
Beiträge: 3
Registriert: Mittwoch 4. April 2018, 21:15

Hallo zusammen,

seit Stunden versuche ich per Python 3.6.1 unter win 10 eine COM5 (sub-D/DE-9) auszulesen.
Ich bekomme ja Input, ich kann nur den Input, den ich bekomme nicht vom dem Rest der Kommunikation trennen.

Mein Code bisher

Code: Alles auswählen

import serial

ser = serial.Serial(port='COM5', baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, timeout=1)
ser.flushInput()

try:
    ser.isOpen()
    print("Serial port is open")
except:
    print("Error")
    exit()
	
if (ser.isOpen()):
    try:
        while(1):
            print(ser.read())
    except Exception:
        print("error")
else:
    print("can not open port")
Als Output erhalte ich das hier (nur ein Auszug)

Code: Alles auswählen

b'\xe0'
b'\x9e'
b'\xfe'
b'x'
b'\xff'
b'\x00'
b'\xfe'
b'f'
b'\xfc'
b'x'
b'\xc3'
b'\x9e'
b'\xf8'
b'\xe6'
b'\x18'
b'\xfc'
b'\x1e'
Auf dieser Schnittstelle kommen über ein Interface, dass zur Zeitnahme dient, alle 5-10 Sekunden ein Signal, sollten dann 4 verschiedene sein.

Wie bekomme ich die Signale die ich brauche und berechnen muss von dem anderen "Protokoll" Geschwätz getrennt?
Ich habe schon versucht eine Datei ohne die Signale, die ich generieren kann mit einer Datei in der ich Signale absetze, zu vergleichen;
denke aber, dass ich noch was ganz anderes machen muss. Finde leider im Web darüber nichts.
Ich hoffe, jemand kennt sich damit aus und hat ein paar Tipps.

Grüße & Danke
Jürgen
:)

PS: Ich hoffe, das Board ist dafür das Richtige.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@slotman: was erwartest Du denn? Sind baudrate und parity richtig?

Der Code enthält viel unnützen Quatsch, weder if noch while braucht klammern und nakte Excepts, die nichts sinnvolles machen, sollte man am besten ganz weglassen:

Code: Alles auswählen

import serial
 
ser = serial.Serial(port='COM5', baudrate=9600, bytesize=serial.EIGHTBITS, 
    parity=serial.PARITY_NONE, timeout=1)
ser.flushInput()
 
while True:
    print(ser.read())
slotman
User
Beiträge: 3
Registriert: Mittwoch 4. April 2018, 21:15

Hallo Sirius3,

die Daten der Schnittstelle sollten richtig sein:
Bild

Wegen der Syntax: Ich schreibe das noch so, dass ich das als Anfänger auch lesen kann. ;-)

Was ich erwarte? Das ist genau das Problem... bei hterm sehe ich auch nichts außer FC,252 und binär 11111100.
Sobald ich ein Signal absetze, nichts. Das Interface setzt aber Signale ab, ein altes Programm auf Windows 98 empfängt die Signale und kann diese verarbeiten. Nur gibt es den Programmierer nicht mehr und ich wollte mir jetzt ein kleines Python Prog coden.
Die Daten sind doch hex-Code oder?
slotman
User
Beiträge: 3
Registriert: Mittwoch 4. April 2018, 21:15

Stelle ich 115200 baud kommen nur noch

Code: Alles auswählen

b'\x00'
b'\x00'
b'\x00'
b'\x00'
b'\x00'
b'\x00'
b'\x00'
b'\x00'
b'\x00'
b'\x00'
rüber.

Vielleicht muss ich mal alle baud Varianten testen?
Antworten