Modbus通信时,大家浮点数是如何处理的?

2020-01-14 18:52发布

我目前的是 直接发送四个字节,32位浮点数据,占用二个寄存器

接着就是麻烦来了,原来这么多这么多人不会将四个字节还原成浮点数!!售后电话经常接到这种问题,如何将这四个字节还原!!

跟他说用联合体就好了,还要追着问,用什么算法还原,我真说不出来。跟他说电脑自己会完成,还不懂,我不知道怎么说了

就好比有人经常问,怎么样才能将10进制数用16进制表示出来一样


决定为了减少这弱智问题,还是老老实实用二个字节吧,小数点后一位,就人为放大10倍,当整型数据发给他。然后再到协议里规定下,,除10,你就还原了


不知道标准的Modbus通信中,对浮点数是如何处理的??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
29条回答
shuipaopao
2020-01-17 15:30
东海傲虾 发表于 2013-8-14 13:20
我就是用两个寄存器来存储的啊,不过有很多设备就像你说的一样,传整数,然后人为还原,我总觉得这样做不好 ...

我就是打算用两个寄存器来存储,不过发现传输时都为0;不知是哪里问题。例如:我定义一个联合体
                union
                {
                                  float YV;
                                  unsigned char c[4]; //本次液体加油体积
                }ThistimeOil;
然后赋值ThistimeOil.YV=53.2;
定义一个寄存器数组uint16 STATE_Register[2];
将寄存器数组赋值 STATE_Register[0]=ThistimeOil.c[0]<<8+ThistimeOil.c[1];

                         STATE_Register[1]=ThistimeOil.c[2]<<8+ThistimeOil.c[3];
最后将数组用串口发出去,发现数值都是0;不知是哪里出问题了,还请指教。

一周热门 更多>