Modbus 通訊在工業(yè)現(xiàn)場應(yīng)用非常廣泛,當(dāng)然也會有多技術(shù)難點(diǎn),本文主要講解基于通訊的數(shù)據(jù)處理,不講通訊的基礎(chǔ)知識,你過你連Modbus通訊的報(bào)文都不知道是什么,那可以不用往下看了。
通訊讀取普通的數(shù)據(jù)可能大家都會處理,如果遇到浮點(diǎn)數(shù)的數(shù)據(jù)類型,那就需要一定的處理才能使用。
一、Modbus RTU中的浮點(diǎn)數(shù)處理
這位同學(xué)在通訊中遇到一個(gè)浮點(diǎn)數(shù)的問題,搞了好久沒有處理好。


在我的追問下,得知是和一個(gè)溫度儀表通訊,采集儀表的02和03地址數(shù)據(jù),這個(gè)數(shù)據(jù)是一個(gè)32位的數(shù)據(jù),從表格里面我獲取到一個(gè)重要詳細(xì),這個(gè)數(shù)據(jù)是以大端模式進(jìn)行排布的。

浮點(diǎn)數(shù)的大端模式存儲遵循IEEE標(biāo)準(zhǔn)格式,高位字節(jié)存儲在內(nèi)存低地址,低位字節(jié)存儲在內(nèi)存高地址。而三菱PLC中浮點(diǎn)數(shù)是以端的類型排布的,因此,需要把數(shù)據(jù)的高16位和低16位交換處理。
如下圖,浮點(diǎn)數(shù)數(shù)據(jù)保存在D0~D3這4個(gè)寄存器,我們要先把D0和D1通過SWAP和ADD指令進(jìn)行合并,然后保存到D100這個(gè)32位浮點(diǎn)數(shù)數(shù)據(jù)的高位寄存器(D101);然后把D2和D3通用的方法合并到D100(地位寄存器)。最后通過一條浮點(diǎn)數(shù)傳送指令傳送到D102,就能得到最終的數(shù)據(jù)。

二、Modbus ASCII中的浮點(diǎn)數(shù)處理
Modbus有2種類型的報(bào)文,RTU比較簡單處理,如果得到的數(shù)據(jù)是字符類型的浮點(diǎn)數(shù),比如和智能相機(jī)通訊,對方測量到某物體長度位5.2534mm,把這個(gè)數(shù)據(jù)通過ASCII碼發(fā)送過來時(shí),需要對照ASCII表(下圖只是ASCII表中一部分),5對應(yīng) H35,小數(shù)點(diǎn).對應(yīng)H2E,2對應(yīng)H32,3對應(yīng)H33,4對應(yīng)H34,也就是這個(gè)浮點(diǎn)數(shù)轉(zhuǎn)換成字符應(yīng)該是 35 2E 32 35 33 34。

假如這個(gè)字符串給到了PLC的D0~D5這6個(gè)寄存器,下面用PLC用MOV指令模擬數(shù)據(jù)給如

數(shù)據(jù)的排布由于是8位的數(shù)據(jù)類型,需要兩兩合并成一個(gè)16位的寄存器,使用SWAP指令把第2、第4、第6個(gè)寄存器轉(zhuǎn)移到高位,再加上上一個(gè)寄存器,就能合并成16位數(shù)據(jù),結(jié)果保存到D10、D11、D12,最后通過一條字符串轉(zhuǎn)浮點(diǎn)數(shù)的指令DEVAL,把數(shù)據(jù)轉(zhuǎn)換成浮點(diǎn)數(shù)保存到D20(由于三菱軟件浮點(diǎn)數(shù)只顯示3位,所以最后一位看不到,但是真實(shí)數(shù)據(jù)是有的,你用于其他計(jì)算或者顯示到觸摸屏,都會運(yùn)算最后一位小數(shù)的)

相信通過以上內(nèi)容,大家以后都能應(yīng)對浮點(diǎn)數(shù)轉(zhuǎn)換的問題了。
-
MODBUS
+關(guān)注
關(guān)注
28文章
2457瀏覽量
83193 -
通訊
+關(guān)注
關(guān)注
9文章
945瀏覽量
36534 -
浮點(diǎn)數(shù)
+關(guān)注
關(guān)注
0文章
62瀏覽量
16415 -
RTU
+關(guān)注
關(guān)注
0文章
450瀏覽量
30591
原文標(biāo)題:通訊中浮點(diǎn)數(shù)數(shù)據(jù)的處理
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
labview數(shù)據(jù)類型與PLC 數(shù)據(jù)類型之間的轉(zhuǎn)換(來自于寫入浮點(diǎn)數(shù)到匯川 PLC中的數(shù)據(jù)轉(zhuǎn)換關(guān)鍵的修改)
labview和單片機(jī)通訊浮點(diǎn)數(shù)如何處理?
定點(diǎn)數(shù)和浮點(diǎn)數(shù)的區(qū)別是什么
浮點(diǎn)數(shù)在單片機(jī)數(shù)據(jù)采集監(jiān)控系統(tǒng)中的應(yīng)用
浮點(diǎn)數(shù)的表示方法
浮點(diǎn)數(shù)常用的編碼方法
modbus 如何讀取浮點(diǎn)數(shù)
浮點(diǎn)數(shù)在內(nèi)存中的存儲
如何在FPGA中正確處理浮點(diǎn)數(shù)運(yùn)算
談一談浮點(diǎn)數(shù)的精度問題
什么是浮點(diǎn)數(shù)?浮點(diǎn)數(shù)在內(nèi)存中的存儲
什么是浮點(diǎn)數(shù)
西門子PLC浮點(diǎn)數(shù)程序案例分享
通訊中浮點(diǎn)數(shù)數(shù)據(jù)的處理
評論