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


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

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

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

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

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

相信通過以上內容,大家以后都能應對浮點數轉換的問題了。
-
MODBUS
+關注
關注
28文章
2457瀏覽量
83188 -
通訊
+關注
關注
9文章
945瀏覽量
36532 -
浮點數
+關注
關注
0文章
62瀏覽量
16415 -
RTU
+關注
關注
0文章
450瀏覽量
30590
原文標題:通訊中浮點數數據的處理
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
labview數據類型與PLC 數據類型之間的轉換(來自于寫入浮點數到匯川 PLC中的數據轉換關鍵的修改)
labview和單片機通訊浮點數如何處理?
浮點數在內存中的存儲
通訊中浮點數數據的處理
評論