找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1676|回复: 10
打印 上一主题 下一主题
收起左侧

51单片机C语言modbus通信协议数据处理问题

[复制链接]
跳转到指定楼层
楼主
各位大佬们好,最近在学习modbus通信协议,废了老大劲终于把数据从传感器里面读出来了,但是卡在数据处理这一步了处理方法说明书上写的很详细,可是这部分代码实在是不会写,希望有大佬指点一二。
比如这个例子,读到的数据顺序为 66 66 42 7B,需要将其转为二进制后分成1位符号位、8位指数位和23位尾数,然后分别化为整数后再计算



如果有大佬愿意指点一下,小弟感激不尽

f10aee1eabe52aa068369bcb903e5de.png (360.25 KB, 下载次数: 53)

f10aee1eabe52aa068369bcb903e5de.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-7-23 18:48 | 只看该作者
  1. int main(int argc, char *argv[]) {
  2.         float *f;
  3.         uint8_t ch[4]={0x66,0x66,0x7b,0x42};
  4.         f=ch;
  5.         printf("%f ",*f);
  6.         return 0;
  7. }
复制代码

根本就不用算啊!上面f=ch一句话就转过去了。以上代码用MinGW验证通过。

不过要注意的是x86本身是小端,C51编译器按大端保存超过1字节的数据,所以ch[4]里面的数据顺序要反过来。
回复

使用道具 举报

板凳
ID:94031 发表于 2022-7-23 19:25 | 只看该作者
4个字节 66 66 42 7B 转为浮点数为 2.7184266e+23,参考程序:

回复

使用道具 举报

地板
ID:883242 发表于 2022-7-23 19:32 | 只看该作者
xuyaqi 发表于 2022-7-23 19:25
4个字节 66 66 42 7B 转为浮点数为 2.7184266e+23,参考程序:

你把大小端弄反了。
回复

使用道具 举报

5#
ID:94031 发表于 2022-7-23 19:52 | 只看该作者
Hephaestus 发表于 2022-7-23 19:32
你把大小端弄反了。

这跟对方传感器传来的数据顺序有关。
回复

使用道具 举报

6#
ID:883242 发表于 2022-7-23 19:54 | 只看该作者
xuyaqi 发表于 2022-7-23 19:52
这跟对方传感器传来的数据顺序有关。

人家都举例“66 66 42 7B”的含义是62.85了,你还蒸熟的鸭子只剩下嘴硬了有意思吗?
回复

使用道具 举报

7#
ID:375889 发表于 2022-7-24 14:38 | 只看该作者
Hephaestus 发表于 2022-7-23 18:48
根本就不用算啊!上面f=ch一句话就转过去了。以上代码用MinGW验证通过。

不过要注意的是x86本身是小端 ...

谢谢指导,这样确实可以一步到位了,还有个问题是怎么把接收到不断变化的值放到ch【】里面处理啊,我自己写的一直报错,不知道该怎么修改了
回复

使用道具 举报

8#
ID:375889 发表于 2022-7-24 14:39 | 只看该作者
xuyaqi 发表于 2022-7-23 19:25
4个字节 66 66 42 7B 转为浮点数为 2.7184266e+23,参考程序:

非常感谢解惑
回复

使用道具 举报

9#
ID:883242 发表于 2022-7-24 22:32 | 只看该作者
爱马达的小电动 发表于 2022-7-24 14:38
谢谢指导,这样确实可以一步到位了,还有个问题是怎么把接收到不断变化的值放到ch【】里面处理啊,我自己 ...

总要把代码和报错内容贴出来吧?你什么都不说别人也都不是算命的。
回复

使用道具 举报

10#
ID:883242 发表于 2022-7-25 17:57 | 只看该作者
xuyaqi 发表于 2022-7-23 19:52
这跟对方传感器传来的数据顺序有关。

楼主都说了“66 66 42 7B”是62.85的意思,你搞个2.7e23是来搞笑的吗?
回复

使用道具 举报

11#
ID:94031 发表于 2022-7-25 19:12 | 只看该作者
Hephaestus 发表于 2022-7-25 17:57
楼主都说了“66 66 42 7B”是62.85的意思,你搞个2.7e23是来搞笑的吗?

主要是楼主把 66 66 7b 42 写成 66 66 42 7B 造成还原错误,数据正常后还原也正常了,62.85。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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