BCD: Binär Codierte Dezimalzahlen, auch BCD-Code genannt

In der informationsverarbeitenden Technologie wird als Zahlensystem das Dualsystem benutzt, da man technisch nur erfassen kann, ob Strom fließt oder nicht fließt. Diese beiden Zustände werden im Dualsystem durch die beiden Signale 0 und 1 abgebildet. Der Mensch denkt und rechnet im Dezimalsystem, auch Zehnersystem genannt, in dem die Ziffern 0 - 9 vorkommen. Für einen Programmierer muss es eine Möglichkeit geben, große Ziffernfolgen mit vielen Bits des Dualsystems schnell in Dezimal abzulesen, auszuwerten oder selbst Ziffernfolgen des Dualsystems in das System einzugeben. Eine Möglichkeit hierfür ist, Dezimalzahlen binär zu kodieren. Diesen Code nennt man Binär kodierte Dezimalzahlen oder einfach BCD-Code.

Für BCD-Zahlen gibt es keine besondere Norm. Auch in Step7 gibt es keinen besonderen Datentypen für BCD-Code. BCD-Zahlen sind eine Teilmenge der Hexadezimalzahlen, für die man die Datentypen BYTE, WORD und DWORD benutzt. Daher werden BCD-Zahlen als Hexadezimalzahlen in STEP7 eingegeben, es werden aber nur die Ziffern 0 bis 9 verwendet, so wie beim Dezimalsystem. Die hexadezimalen Ziffern A bis F werden nicht verwendet. Durch die Verwendung der BCD-Zahlen auf der Grundlage des 8421-Codes (wird am häufigsten verwendet und ist auch die bekannteste BCD-Kodierung) ist es möglich, Zahlendarstellungen vereinfacht darzustellen. Damit ist es möglich, Binärworte so darzustellen, dass man den dezimalen Wert ziffernweise ablesen kann. Wir gehen davon aus, das das direkte Lesen und Verstehen von Dualzahlen kein Problem darstellt.

Die Abkürzung BCD steht für Binary Coded Decimal. Dabei wird jede Stelle einer Dezimalzahl unter Benutzung des binären Zeichenvorrats (0, 1) kodiert. Für die Kodierung der Dezimalziffern 0 bis 9 benötigt man mindestens 4 Binärstellen. Daher werden BCD-Zahlen ebenfalls in 4-Bit Blöcken dargestellt. Mit 4 Bits lassen sich insgesamt 16 verschiedene Zahlenwerte (0 - 15) darstellen. Man benötigt aber nur die Werte für 0 - 9. Deshalb unterteilt man BCD-Ziffernfolgen in gültige (0 - 9) und ungültige (10 - 15) Ziffernfolgen. Alle gültigen Ziffernfolgen werden als Tetraden bezeichnet. Alle ungültigen Ziffernfolgen bezeichnet man als Pseudotetraden, da sie nicht benutzt werden und somit unnötig und überflüssig sind.

Übersicht über die Dezimalzahlen 0 bis 9 und die dazugehörigen BCD-Zahlen im 8421-Code:

Dezimalzahl BCD-8421-Zahl Hexadezimalzahl Bezeichnung
0 0000 0 Tetraden
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
Folgende Kombinationen werden nicht verwendet
10 1010 A Pseudotetraden
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

Die nicht verwendeten Ziffernfolgen, die in der Tabelle mit aufgeführt sind, da man sie theoretisch mit 4 Bits darstellen kann, sind die Pseudotetraden. Mit 4 Tetraden (16 Bits) kann man einen dezimalen Zahlenwert innerhalb des Bereichs 0 bis 9999 darstellen. Dabei muss man jede Tetrade als eine Ziffer im Dezimalsystem vorstellen. Von rechts nach links gesehen hat man wie im Dezimalsystem Einer, Zehner, Hunderter, Tausender usw.

Der am häufigsten verwendete BCD-Code wird als 8421-Code genannt, da die Wertigkeit der vierstelligen Dualzahl 1111 von Stelle zu Stelle sich verdoppelt. Rechnet man diese in Dezimal um, hat man die Zahlenwerte 1, 2, 4 und 8 (von rechts nach links lesend) oder 8, 4, 2, 1 (von links nach rechts lesend). Beispiel für eine Dezimalzahl, die als BCD-Code dargestellt wird.

  • Dezimalzahl: 5862
  • Als BCD-Code: 0101 1000 0110 0010
Tausender Hunderter Zehner Einer
5 8 6 2
0101 1000 0110 0010

BCD-Zahlen bei Speicherprogrammierbaren Steuerungen

BCD-Zahlen werden in Step7 beim Einstellen von Zahlen und bei der Anzeige von Ziffern benutzt. Weiterhin verwendet man BCD-Zahlen bei der Eingabe von Zeiten bei Zeitgliedern und bei der Eingabe von Zählwerten bei Zählern. Diese Eingaben sind 16 Bit breit. Für die Eingabe von Zeiten und Zählwerten werden aber die Bits 0 bis 11 verwendet, mit der Maximaleingabe der "9".

Bit 12 bis Bit 15 bleiben bei Zählern unbenutzt, sind also irrelevant und haben den Wert 0. Siehe auch Zählfunktionen - Zählwerteingabe.

Bei der Eingabe eines Zeitwerts werden zur Angabe der Zeitbasis die Bits 12 und 13 verwendet. Siehe auch Zeitfunktionen.

Verwendet werden hierbei zwei Bitlängen. Entweder 16-Bit breite oder 32-Bit breite BCD-Zahlen. Dabei gibt es vorzeichenlose und vorzeichenbehaftete BCD-Zahlen.

Beispiel für die Eingabe einer vorzeichenlosen 16-Bit breiten BCD-Zahl, die so direkt in Step7 verarbeitet wird:

Dezimalzahl: 5683

  • In Step7: W#16#5683
  • Eingabe über BCD-Zahleneinsteller: 5683
  • Bitmuster: 0101 0110 1000 0011

Beispiel für die Eingabe einer vorzeichenbehafteten 16-Bit BCD-Zahl, die so direkt in Step7 mit Hilfe der Umwandlungsfunktion 16-Bit BCD TO INT verarbeitet wird. Die Umwandlungsfunktion 16-Bit BCD TO INT wertet den am weitesten links stehenden Stellenwert als Vorzeichenstelle. Das bedeutet, dass vorzeichenbehaftete 16-Bit BCD-Zahlen einen dezimalen Zahlenumfang von -999 bis +999 haben. Der am weitesten links stehende Stellenwert wird nach "0" oder "1" ausgewertet. "0" bedeutet hierbei positiv und "1" bedeutet negativ. Die Schreibweise der am weitesten links stehenden Tetrade ist dann folgendermaßen:

  • 0*** für positive, vorzeichenbehaftete 16-Bit BCD-Zahlen
  • 1*** für negative, vorzeichenbehaftete 16-Bit BCD-Zahlen

Beispiel für die positive Dezimalzahl: +358

  • In Step7: W#16#0358
  • Eingabe über BCD-Zahleneinsteller: 0358
  • Bitmuster: 0000 0011 0101 1000

Beispiel für die negative Dezimalzahl: -358

  • In Step7: W#16#8358
  • Eingabe über BCD-Zahleneinsteller: 8358
  • Bitmuster: 1000 0011 0101 1000