我目前的是 直接发送四个字节,32位浮点数据,占用二个寄存器
接着就是麻烦来了,原来这么多这么多人不会将四个字节还原成浮点数!!售后电话经常接到这种问题,如何将这四个字节还原!!
跟他说用联合体就好了,还要追着问,用什么算法还原,我真说不出来。跟他说电脑自己会完成,还不懂,我不知道怎么说了
就好比有人经常问,怎么样才能将10进制数用16进制表示出来一样
决定为了减少这弱智问题,还是老老实实用二个字节吧,小数点后一位,就人为放大10倍,当整型数据发给他。然后再到协议里规定下,,除10,你就还原了
不知道标准的Modbus通信中,对浮点数是如何处理的??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我就是打算用两个寄存器来存储,不过发现传输时都为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;不知是哪里出问题了,还请指教。
一周热门 更多>