Seite 1 von 1

Umrechnug von float in Prozent

Verfasst: Dienstag 16. Juni 2015, 22:49
von Tobias_K
Hallo zusammen,

habe mich gerade eben hier angemeldet und komm natürlich schon mit der ersten Frage ;-)

Zum eigentlichen Problem:
Ich habe hier ein regelbares Labornetzteil, welches sich per RS-232 steuern lässt. Leider ist das Protokol dazu nicht wirklich toll.
Um die Spannung einzustellen, wird die Maximale Spannung angenommen und als 100 Prozent gewertet.
z.B.: Das Netzeil kann maximal 80V Ausgangsspannung und ich will ihm 40V als Ausgangsspannung einstellen. Dann muss ich dem Netzeil per RS232 den Befehl 50,0% senden.

Prinzipiell wäre das ja noch ganz simpel. Allerdings will das Netzteil den Integer-Anteil der Prozent als HighByte und den float-Anteil der Prozent (also die Nachkommastelle) als LowByte.

Mir fehlt einfach eine Idee, wie ich den float wert, z.B.: 50,4 Volt, in zwei Bytes in prozentualler Darstellung zerlegen kann...

Vielleicht liegts auch einfach an der Uhrzeit, dass ich da heute nicht mehr draufkomm.

Ich hoffe ihr könnt mir nen Tip geben.

Beste Grüße,

Tobias

Re: Umrechnug von float in Prozent

Verfasst: Dienstag 16. Juni 2015, 23:26
von snafu
Ab Python 3 haben Integer eine `.to_bytes()`-Methode. Für 50,0% wäre es folgendes:

Code: Alles auswählen

>>> (50).to_bytes(1, 'big') + (0).to_bytes(1, 'big')
b'2\x00'
Oder eben umgekehrt - je nachdem, wie herum gelesen wird.

Das "big" ist die Byteorder. Sie kann "big" oder "little" sein und bezieht sich auf die Leserichtung für die Ausgabe. Bei einem einzigen Byte als Ausgabe ist es natürlich völlig egal, was man da wählt.

EDIT: Ich hab viel zu kompliziert gedacht. ``chr(50) + chr(0)`` geht genau so. Und das gibt's auch unter Python 2.7.

Re: Umrechnug von float in Prozent

Verfasst: Dienstag 16. Juni 2015, 23:30
von BlackJack
@Tobias_K: Deine Beschreibung ist nicht wirklich ausreichend. *Wie* soll denn der Nachkommaanteil als Byte repräsentiert werden‽

Re: Umrechnug von float in Prozent

Verfasst: Dienstag 16. Juni 2015, 23:35
von snafu
Stimmt. Eine "1" könnte als ",10" oder als ",01" interpretiert werden. Gibt es eine definierte Anzahl der Nachkommastellen?

Re: Umrechnug von float in Prozent

Verfasst: Dienstag 16. Juni 2015, 23:40
von BlackJack
@snafu: Eine 1 könnte auch als 0.00390625 interpretiert werden. Das wäre meine Vermutung. Aber eine Bestätigung wäre schon nicht schlecht.

Re: Umrechnug von float in Prozent

Verfasst: Mittwoch 17. Juni 2015, 07:35
von Sirius3
Wenn's so wäre, köönnte man gleich schreiben: in Einheiten von 1/25600 der maximalen Spannung:

Code: Alles auswählen

struct.pack('>h',int(50.4 * 256))