现场的仪表,比如积算仪、巡检仪、无线钢水测温仪、无线称重校验仪,送出来的数据,有的是定点数,有的浮点数。作为PLC或二次仪表、显示大屏幕,都需要查询它们的瞬时值并显示出来。
以二次数显表为例,接收的它们的数据后,需要转换成BCD数进行显示。定点数的接收与转换比较简单,浮点数由于是由阶码确定小数点的位置,所以在转换过程中,稍微的增加了点难度。
浮点数共4字节,32位
例如124.75,浮点数为42F98000H
|
4
|
2
|
F
|
9
|
8
|
0
|
0
|
0
|
0100
|
0010
|
1111
|
1001
|
1000
|
0000
|
0000
|
0000
|
字节3
|
字节2
|
字节1
|
字节0
|
|
|
|
|
|
|
|
|
字节3的第7位表示符号,1表示负数,0表示正数
4个字节都左移一位
例如124.75,浮点数为42F98000H
|
4
|
2
|
F
|
9
|
8
|
0
|
0
|
0
|
0100
|
0010
|
1111
|
1001
|
1000
|
0000
|
0000
|
0000
|
字节3
|
字节2
|
字节1
|
字节0
|
1000
|
0101
|
1111
|
0011
|
0000
|
0000
|
0000
|
000X
|
移位后此字节为阶码
|
这些是尾数
|
阶码-127=小数点移动的位数,85H=133,133-127=+6,正数表示小数点右移,负数表示小数点左移。
尾数前面隐藏了一个1. 补齐后如下
字节3
|
字节2
|
字节1
|
字节0
|
|
1.
|
1111
|
0011
|
0000
|
0000
|
0000
|
000X
|
注意小数点
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
小数点右移6位后如下
字节3
|
字节2
|
字节1
|
字节0
|
|
1
|
1111
|
00.11
|
0000
|
0000
|
0000
|
000X
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
现在把四个字节都左移,使得整数字节和小数字节分开,如下
字节3
|
字节2
|
字节1
|
字节0
|
111
|
1100
|
1100
|
0000
|
0000
|
0000
|
0XXX
|
|
整数字节
|
小数字节
|
|
|
|
|
|
|
|
|
整数转换为十进制,7CH=124
小数字节高位定义为第1位,以后为2 3 4 5 6.。。。。。。第1位=2^(-1),第2位=2^(-2),第3位=2^(-2),第n位=2^(-n)