找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2379|回復(fù): 10
收起左側(cè)

51單片機(jī)C語言modbus通信協(xié)議數(shù)據(jù)處理問題

[復(fù)制鏈接]
ID:375889 發(fā)表于 2022-7-23 15:27 | 顯示全部樓層 |閱讀模式
各位大佬們好,最近在學(xué)習(xí)modbus通信協(xié)議,廢了老大勁終于把數(shù)據(jù)從傳感器里面讀出來了,但是卡在數(shù)據(jù)處理這一步了處理方法說明書上寫的很詳細(xì),可是這部分代碼實(shí)在是不會(huì)寫,希望有大佬指點(diǎn)一二。
比如這個(gè)例子,讀到的數(shù)據(jù)順序?yàn)?66 66 42 7B,需要將其轉(zhuǎn)為二進(jìn)制后分成1位符號(hào)位、8位指數(shù)位和23位尾數(shù),然后分別化為整數(shù)后再計(jì)算

1658561111(1).jpg

如果有大佬愿意指點(diǎn)一下,小弟感激不盡
f10aee1eabe52aa068369bcb903e5de.png
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 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ù)制代碼

根本就不用算!上面f=ch一句話就轉(zhuǎn)過去了。以上代碼用MinGW驗(yàn)證通過。

不過要注意的是x86本身是小端,C51編譯器按大端保存超過1字節(jié)的數(shù)據(jù),所以ch[4]里面的數(shù)據(jù)順序要反過來。
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2022-7-23 19:25 | 顯示全部樓層
4個(gè)字節(jié) 66 66 42 7B 轉(zhuǎn)為浮點(diǎn)數(shù)為 2.7184266e+23,參考程序: 浮點(diǎn).png

回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-23 19:32 | 顯示全部樓層
xuyaqi 發(fā)表于 2022-7-23 19:25
4個(gè)字節(jié) 66 66 42 7B 轉(zhuǎn)為浮點(diǎn)數(shù)為 2.7184266e+23,參考程序:

你把大小端弄反了。
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2022-7-23 19:52 | 顯示全部樓層
Hephaestus 發(fā)表于 2022-7-23 19:32
你把大小端弄反了。

這跟對方傳感器傳來的數(shù)據(jù)順序有關(guān)。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-23 19:54 | 顯示全部樓層
xuyaqi 發(fā)表于 2022-7-23 19:52
這跟對方傳感器傳來的數(shù)據(jù)順序有關(guān)。

人家都舉例“66 66 42 7B”的含義是62.85了,你還蒸熟的鴨子只剩下嘴硬了有意思嗎?
回復(fù)

使用道具 舉報(bào)

ID:375889 發(fā)表于 2022-7-24 14:38 | 顯示全部樓層
Hephaestus 發(fā)表于 2022-7-23 18:48
根本就不用算。∩厦鎓=ch一句話就轉(zhuǎn)過去了。以上代碼用MinGW驗(yàn)證通過。

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

謝謝指導(dǎo),這樣確實(shí)可以一步到位了,還有個(gè)問題是怎么把接收到不斷變化的值放到ch【】里面處理啊,我自己寫的一直報(bào)錯(cuò),不知道該怎么修改了
回復(fù)

使用道具 舉報(bào)

ID:375889 發(fā)表于 2022-7-24 14:39 | 顯示全部樓層
xuyaqi 發(fā)表于 2022-7-23 19:25
4個(gè)字節(jié) 66 66 42 7B 轉(zhuǎn)為浮點(diǎn)數(shù)為 2.7184266e+23,參考程序:

非常感謝解惑
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-24 22:32 | 顯示全部樓層
愛馬達(dá)的小電動(dòng) 發(fā)表于 2022-7-24 14:38
謝謝指導(dǎo),這樣確實(shí)可以一步到位了,還有個(gè)問題是怎么把接收到不斷變化的值放到ch【】里面處理啊,我自己 ...

總要把代碼和報(bào)錯(cuò)內(nèi)容貼出來吧?你什么都不說別人也都不是算命的。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-25 17:57 | 顯示全部樓層
xuyaqi 發(fā)表于 2022-7-23 19:52
這跟對方傳感器傳來的數(shù)據(jù)順序有關(guān)。

樓主都說了“66 66 42 7B”是62.85的意思,你搞個(gè)2.7e23是來搞笑的嗎?
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2022-7-25 19:12 | 顯示全部樓層
Hephaestus 發(fā)表于 2022-7-25 17:57
樓主都說了“66 66 42 7B”是62.85的意思,你搞個(gè)2.7e23是來搞笑的嗎?

主要是樓主把 66 66 7b 42 寫成 66 66 42 7B 造成還原錯(cuò)誤,數(shù)據(jù)正常后還原也正常了,62.85。 浮點(diǎn).png

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表