Wandlung von DEZ nach HEX 8 Zeichen

mitchih

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

ich habe folgende Anlage:

Ich lese aus einem Barcodescanner eine Zahl im ASCII Format aus. (14 Zeichen)

Die ersten 8 Zeichen sind meine Auftragsnummer.

Diese Zeichen kopiere ich nun in einen String und wandle sie mit dem FC String_to_DI in eine Dezimalzahl um (32bit)

Nun benötige ich diese Dezimalzahl als BCD Zahl. Dazu nutze ich den Befehl DTB in S7.
Das funktioniert bei 7 stelligen Zahlen prima.

Leider bekomme ich ein Problem wenn mein 8. Zeichen keine 0 ist, dann kommt nur Müll heraus.
Nun habe ich herausgefunden, das die Operation die 32 Bit Ganzahl in eine 7stellige BCD Zahl mit Vorzeichen wandelt. Ich benötige aber 8 Zahlen

Wie kann ich nun meine Zahl am einfachsten wandeln? Gibt es einen FC der die DINT Zahl in eine 8 stellige Zahl ohne vorzeichen wandelt??
 
Es gibt, wie immer ;-) , mehrere Lösungen.
BCD ist ja eine Dualdarstellung der einzelnen Ziffern, wobei für jede Ziffer 4 Bit zur Verfügung stehen.
Da du ja ohnehin mit den Standardbausteinen von Siemens arbeitest, könntest du die 8-Stellig Zahl z.Bsp. in zwei 4-Stelling Zahlen trennen (Dezimalzahlen dividieren durch 10000, einmal das Ergebnis, das andere Mal den Rest verwenden, siehe dazu die Funktion MOD),
also aus 12345678 machst du 1234 und 5678, diese wandelst du dann mit dem Standardbaustein DTB und setzt anschließend die Byte, die deine Ziffern enthalten wieder zu einer gemeinsamen Zahl zusammen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie wär es denn, wenn Du Deine 7-stellige Zahl, vermutlich 7 Bytes, 1 Byte pro Zahl (da STRING) Byte für Byte wandelst. Byte n -> "String_to_DI" -> DTB. (z. B. über eine Schleife in SCL).
 
Zurück
Oben