Step 7 Real to BCD

SAB2002

Level-2
Beiträge
50
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ,

ich habe eine Problemchen. Ich brauche via PB (BLKMV)ein Realwert zur Digitalanzeige senden. Aber, es ist so gebildet, dass ein Byte hat zwei Ziffern z.b. Wert 565.7 also B1-57, B2-56, B3,B4,B5,B6,B7-0, B8(Digit)-1. Ich hab versucht die Quelle (SCL) zu schreiben, hat's ,aber, nicht geklappt. Kann man, vielleicht, helfen?

Gruß,

Alex
 
Kommastelle im Real-Wert umrechnen bzw. umlegen:
565.7 * 10.0 = 5657

Gleitkommazahl (Real) in Ganzzahl (DINT) wandeln.
REAL_TO_DINT() bzw. RND

Ganzzahl durch 100 teilen:
5657 / 100 = 56
5657 MOD 100 = 57

Ergebniss 56 und 57 den beiden Bytes zuweisen.
 
Anzeige hat 4 Stellen. Man schickt 8 Bytes Block via PB. Byte 1-zwei Ziffern, Byte 2-zwei Ziffern, dann B3-B7 die Nullen. Komma ist so angesteuert B8=0-0000, B8=1-000.0, B8=2-00.00, B8=3-0.000

Gruß,

Alex
 
Zuletzt bearbeitet:
z.b. Wert 565.7 also B1-57, B2-56, B3,B4,B5,B6,B7-0, B8(Digit)-1
Hallo Alex,

im Thematitel schreibst Du "Real to BCD" - wo steckt da nun das BCD? Sind Deine Beispielwerte in den Bytes vielleicht in Hexadezimal-Schreibweise?
Dann müßtest Du in dem Beispiel von uncle_tom nach der Ganzzahldivision mit 100 noch die Werte 56 und 57 in BCD wandeln ( INT_TO_BCD(x) ), oder zuerst in BCD wandeln ( DINT_TO_BCD(REAL_TO_DINT(x)) ) und danach mit 256 dividieren.

Soll das so aussehen?
Code:
Real: 565.7

      B1 B2 B3 B4 B5 B6 B7 B8
BCD : 56 57 00 00 00 00 00 01 (hex)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja. Das habe ich gemeint. Erst in BCD wandeln und dann an Anzeige senden. Sorry, wenn ich es unverständlich geschrieben habe. Also, Wert "abc.d" (allgemein, damit als Quelle nutzen) muss erst in BCD umwandeln
B1B2B3B4B5B6B7B8
abcd000000000001
in Hex
 
Zuletzt bearbeitet:
Zurück
Oben