Messwert auswerten

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
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

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
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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'
When we say computer, we mean the electronic computer.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@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))
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

Ja richtig das ist ein Text_browser
Vielen Dank für die Unterstützung
Antworten