modbus中对采用IEEE 754 标准的浮点数处理

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

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值