搜索
bottom↓
回复: 28

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

[复制链接]

出0入0汤圆

发表于 2013-8-12 17:01:01 | 显示全部楼层 |阅读模式
我目前的是 直接发送四个字节,32位浮点数据,占用二个寄存器

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

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

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


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


不知道标准的Modbus通信中,对浮点数是如何处理的??

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-8-12 17:04:45 | 显示全部楼层
用指针,,,

出100入0汤圆

发表于 2013-8-12 17:18:03 | 显示全部楼层
楼上在说笑吗

出0入0汤圆

发表于 2013-8-12 17:18:03 | 显示全部楼层
直接搞成1000倍的,传整数,自己除1000去,10000也行。
对不能深刻理解数值的人最好办法。

出0入0汤圆

发表于 2013-8-12 17:25:28 | 显示全部楼层
楼主在说我吗?我还真搞不懂浮点数的表达,世界上浮点数表达方法就一种吗?

出0入0汤圆

 楼主| 发表于 2013-8-12 17:32:33 | 显示全部楼层
一般我给的说明书都会有实例,告诉他数据大小端,第一个字节是什么,第二个是什么,还会有实际的示例,就差给段代码了!

可还是有很多人问,崩溃中


要不下次代码也给上,说明如何用联合体或结构体取数

出0入131汤圆

发表于 2013-8-12 18:12:36 | 显示全部楼层
用指针应该是可以的

出0入42汤圆

发表于 2013-8-12 18:24:33 | 显示全部楼层
wochai 发表于 2013-8-12 17:18
楼上在说笑吗

这个真不是说笑的。
你让浮点数指针指向char*的缓冲区就对了, 前提大小端弄对

出0入0汤圆

发表于 2013-8-12 19:28:11 | 显示全部楼层
好吧,楼主问的是在modbus中浮点数怎么表示,用指针是怎么转换,风牛马不相及

出0入0汤圆

发表于 2013-8-12 21:12:52 | 显示全部楼层
modbus中的浮点数是按照IEEE754标准,有自己严格的规定,可不是你想怎么弄就怎么弄的

出0入0汤圆

发表于 2013-8-14 12:31:16 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-8-14 12:45:51 | 显示全部楼层
浮點與Modbus無關。

1.一箇浮點數可以根據IEEE 754標準,用四箇字節表示。
2.通過將浮點數擴大若干倍的手段,可以將一箇浮點數的非整數部份包含的信息移到整數部份,從而避免使用浮點數。

出0入0汤圆

发表于 2013-8-14 13:20:49 | 显示全部楼层
我就是用两个寄存器来存储的啊,不过有很多设备就像你说的一样,传整数,然后人为还原,我总觉得这样做不好吧,还是用两个寄存器吧。

出0入0汤圆

发表于 2013-8-14 13:23:48 | 显示全部楼层
我见过一个设备是把整数段和小数段分开发送的,类似乘1000这种吧

出0入0汤圆

发表于 2013-8-14 13:29:41 | 显示全部楼层
跟楼主的方式一样。。。

出0入0汤圆

发表于 2014-5-7 15:41:42 | 显示全部楼层
用指针,举例:
FP32 gfRotation_P;
u16 *ModBus_D[] =
{        (u16 *)&gfRotation_P,                               
        (u16 *)&gfRotation_P + 1
}
在MODBUS信息帧处理函数中直接操作指针数组
如:*(pointer_2+j)=(u8)(*ModBus_D[i-ModBus_DbaseAdrr]>>8);
以上代码测试通过

出0入0汤圆

发表于 2014-5-7 18:32:12 | 显示全部楼层
一般用户都是用组态软件的,这个组态软件直接支持。还有一小部分用户不是用组态软件,要自已换算,确
实是很麻烦的事,我现在仪表modbus通信都是整数,组态软件支持,用户自已写软件也好换算,用户不一
定是用C或C++的啊,不能用指针这些。

出0入0汤圆

发表于 2014-5-7 21:47:57 | 显示全部楼层
工业里面全部是伪浮点数,就是小时点精确到某一固定位,然后直接整数发送,用户端根据定义再变回带小数的浮点数,好处是节省存储空间,节省通讯帧。毕竟工业里面浮点数的小数不是越多越好。

出0入4汤圆

发表于 2018-4-26 15:06:31 | 显示全部楼层
东海傲虾 发表于 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;不知是哪里出问题了,还请指教。

出0入12汤圆

发表于 2018-4-26 15:20:24 | 显示全部楼层
搞成整数时,有些组态软件不能处理

出0入0汤圆

发表于 2018-4-26 15:51:38 | 显示全部楼层
4个字节,用两个连续寄存器

出0入0汤圆

发表于 2018-4-26 16:06:06 | 显示全部楼层

指针可以,占据四个字节,可以处理单精度浮点数。

出0入0汤圆

发表于 2018-4-26 16:18:06 | 显示全部楼层
我现在仪表里同一个数据,有整数的,有float数格式的,都可以读出来,像5A的电流,读整数的读出来是5000,读float数,读出来是5.000,不会处理float数的,让用户读整数处理。

出0入0汤圆

发表于 2018-4-26 16:18:41 | 显示全部楼层
扩100倍后用整数吧

出0入0汤圆

发表于 2018-4-26 17:32:10 来自手机 | 显示全部楼层
关注一下,我之前都是放大了传的。。。

出0入8汤圆

发表于 2018-4-27 08:55:03 | 显示全部楼层
modbus可以认为是内存的数据搬运, 至于是什么类型,当然是看用户的心情, 你想怎么看就是什么数据, 因为Modbus发送的时候, 不可能告诉你数据类型是什么
typedef union
{
        sint32 siAll;
        uint32 uiAll;
        float  fAll;
        struct
        {
                uint08 Byte4;
                uint08 Byte3;
                uint08 Byte2;
                uint08 Byte1;
        }Solo;
}U32toByte_def;
解析的时候把数据填到对应的字节,
发送时,把数据填到对应的字节再按照UINT16来发送就可以了


至于上面的朋友说FLOAT有IEEE标准, 实际情况还是守法的人吃不到好果子的,

出0入169汤圆

发表于 2018-4-27 12:55:00 | 显示全部楼层
人工*10或*100发送,不然对方一大通问题真不好沟通

出0入0汤圆

发表于 2018-4-27 12:59:34 | 显示全部楼层
简单粗暴 *100 取整发送!!   协议里标明  比例

出0入0汤圆

发表于 2018-4-28 08:23:56 | 显示全部楼层
有时候用户的问题确实奇葩,简单的取整也是无奈之举
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 01:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表