在modbus通讯中,经常会碰到浮点数读写,其中一种简便方法是将浮点数按小数点位数放大10的n次方倍传输,接收后再安放大倍数缩小,
还有一种方式就是直接传输IEEE 754 标准的浮点数。
浮点数保存的字节格式如下:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
这里S 代表符号位,1是负,0是正
E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。
M 24位的尾数保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了较高的有效位数,提高了精度。
零是一个特定值,幂是0 尾数也是0。
浮点数-12.5作为一个十六进制数0xC1480000保存在两个寄存器中,这个值如下:
0xC1 0x48 0x00 0x00
下面的例子说明上面的值-12.5如何转换。
浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表所列的那样分开,例如:
格式 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
二进制 1100 0001 0100 1000 0000 0000 0000 0000
十六进制 C 1 4 8 0 0 0 &n

本文介绍了在Modbus通讯中浮点数的两种传输方式,重点讲解了基于IEEE754标准的浮点数如何通过C/C++程序进行转换。包括浮点数的二进制表示、各部分含义及如何通过代码实现浮点数与十六进制数之间的相互转换。

1万+

被折叠的 条评论
为什么被折叠?



