一、二进码十进数
二进码十进数(英语:Binary-Coded Decimal,简称BCD)是一种十进制数编码的形式。
每个十进制数用一串二进制来表示。常见的有以4位表示1个十进制数字,称为压缩的BCD码(compressed or packed);或者以8位表示1个十进制数字,称为未压缩的BCD码(uncompressed or zoned)。
BCD码的主要优点:在机器格式与人可读的格式之间容易转换,以及十进制数值的高精度表示,经常用于会计系统中。
许多PLC将时钟的日期和时间以BCD码编码存储。对应IEC 61131-3标准中DATE_AND_TIME(DT)数据类型。
下面是一个简单易实现的使用LED来表示二进制值的二进制时钟。在此时钟中,LED的每一列显示时间的二进制编码十进制数。
BCD码格式很容易转换为ASCII来显示。ASCII字符0~9的数据字节的高四位为0011,低四位正好和0~9的BCD编码相同。
如十进制数1234的BCD码转换为ASCII
二、常用BCD编码方式
对应不同需求有不同的编码方法,大致可以分成有权码和无权码两种:
-
有权码,如:8421、2421、5421
-
无权码,如:余3码(Excess-3)、格雷码
8421码
8421码是最常用的一种BCD编码方式,又称为BCD码。
在这种编码方式中,每个十进制数字都由对应的四位二进制值表示,二进制值每一位的“1”都代表一个固定数值。将每位“1”所代表的十进制数加起来就可以得到它所代表的十进制数字。因为代码中从左至右看每一位“1”分别代表数字“8”“4”“2”“1”,故得名8421码。
每一位“1”代表的十进制数称为这一位的权。因为每位的权都是固定不变的,所以8421码是恒权码。
如十进制数1234的BCD码为0001 0010 0011 0100
三、不同PLC中BCD码
在西门子S7-300/400/1200/1500中,BCD16表示的十进制数范围为-999 到 +999。位 15为“0”,则符号为正,为“1”,则符号为负。位 12 至位 14不使用。
BCD32表示的十进制数范围为-9999999 到 +9999999。位 31为“0”,则符号为正,为“1”,则符号为负。位 28 至位 30不使用。
如下面把整数1000转换为BCD,不会得到正确结果
在西门子S7-200/200 SMART中,BCD表示的十进制数范围为0 到 9999。进行转换是要注意。
施耐德PLC中,如Unity Pro XL平台,BCD16表示的十进制数范围为0 到 9999。BCD32表示的十进制数范围为0 到 99999999。
三菱PLC中,如GX Works2平台,BCD16表示的十进制数范围为0 到 9999。BCD32表示的十进制数范围为0 到 99999999。