Seite 1 von 1

Messwert auswerten

Verfasst: Montag 25. Juni 2018, 07:45
von Ulrich_G
Guten Morgen,
bin noch neu bei Python und habe eine Frage bezüglich eines Messwertes, den ich über einen RS232 Port ausgelesen habe.
Als Ergebnis bekomme ich b'+2.17732562E-03\n'
Der eigentliche Messwert ist aber natürlich nur +2.17732562E-03
Wie kann ich den ausgelesen String in einen Zahlenwert (z.B. 0,002177) wandeln?

Mit dieser Funktion komme ich leider nicht weiter:

Code: Alles auswählen

def val(data):
    y=0
    nst=""
    dlist = ['0','1', '2', '3', '4', '5', '6', '7', '8', '9']
    for x in data:
        for i in dlist:
            if x == i:
                nst=nst+x
    n=len(nst)
    dcont=n
    acum=0
    for z in range(n):
        y=0
        for i in dlist:
            if nst[z] == i:
                d=y
                mult=1
                dcont=dcont-1
                for j in range(dcont):
                    mult=mult*10
                acum=acum+(d*mult)
            y=y+1
            
    return acum
Der Messwert wird so ausgelesen:

Code: Alles auswählen

    def RS232_write(self):
        ser = serial.Serial('COM1',9600, 8, 'N',1)  # open serial port
        ser.write(b':MEASure:PRIMary:VOLTage:DC?\n')     # write a string
        i = str((ser.readline()))
        print(val(i))
        self.textBrowser.append(i)
        ser.close()             # close port

Re: Messwert auswerten

Verfasst: Montag 25. Juni 2018, 07:55
von sls
Ulrich_G hat geschrieben: Montag 25. Juni 2018, 07:45 Der eigentliche Messwert ist aber natürlich nur +2.17732562E-03
Wie kann ich den ausgelesen String in einen Zahlenwert (z.B. 0,002177) wandeln?
z.B. so:

(Im Python-Interpreter)

Code: Alles auswählen

>>> float(b'+2.17732562E-03')
0.00217732562
>>> "{:.6f}".format(_)
'0.002177'
Python stellt mittels float()-Datentyp und format()-Method alle nötigen Werkzeuge bereit.

EDIT: das ganze geht in Python natürlich auch in eine Zeile:

Code: Alles auswählen

>>>"{:.6f}".format(float(b'+2.17732562E-03'))
'0.002177'

Re: Messwert auswerten

Verfasst: Montag 25. Juni 2018, 08:09
von Sirius3
@Ulrich_G: Dein Problem ist, dass Du einen Byte-String mittels `str`in die Repräsentation eines Bytestrings umwandelst, mit der man nichts mehr anfangen kann, außer ausgeben.

Serial-Objekte sollte man wie File-Objekte mit dem with-Statement öffnen. Die Kommentare sind allesamt sinnfrei, weil sie nichts sagen, was nicht ohnehin schon dasteht. Der Funktionsname ist falsch, da nicht das Schreiben das wichtige ist, sondern das Lesen. Was ist `textBrowser` für ein Objekt (nach Namenskonvention eigentlich text_browser)?

Code: Alles auswählen

def read_voltage():
    with serial.Serial('COM1',9600, 8, 'N',1) as ser:
        ser.write(b':MEASure:PRIMary:VOLTage:DC?\n')
        return float(ser.readline())

[...]

    def add_voltage_to_textBrowser(self):
        voltage = read_voltage()
        self.textBrowser.append('{:.6f}'.format(voltage))

Re: Messwert auswerten

Verfasst: Montag 25. Juni 2018, 08:23
von Ulrich_G
Ja richtig das ist ein Text_browser
Vielen Dank für die Unterstützung