modbus學習筆記 幀

2022-03-07 09:17:40 字數 1466 閱讀 3896

幾個需要先搞懂的概念

modbus定義了四種資料型別,這四種資料型別分別叫「離散量輸入」「線圈」「輸入暫存器」「儲存暫存器」,這四種資料型別的功能見上表,其實他這名字很容易讓人搞混了,我們只要記住這四個僅僅是四種資料型別的名字就行了,不要與現實中其他同名的東西搞混就行(例如「線圈」在這了就是乙個資料型別,這種資料型別是可讀可寫的,不要與物理上的線圈混為一談)

資料型別功能解析:

離散量輸入——唯讀,獲取某個io狀態(1bit)。

線圈——讀寫,主要用於設定某個值。

輸入暫存器——唯讀,獲取某個16bit資料的值。

保持暫存器——讀寫,設定某個16bit資料的值。

下圖是乙個modbus的幀格式,其中pdu由兩部分組成,功能碼和資料。

功能碼是乙個8位的資料,的作用是說明該幀是幹什麼的。比如,0x01代表讀取線圈,0x02代表讀取輸入離散量,詳細功能見下圖

下面正式開始說明modbus的幀。

上圖中,左邊是請求,右邊是響應。

請求幀的pdu資料是:02  00  c4  00  16

02  是功能碼,根據功能碼的定義(上表)02的意思是讀取離散資料量。

00  c4  這兩個是起始位址,00是高8位,c4是低8位。離散資料量可以有很多,都被放置在乙個陣列中(比如a[100])。

00  16  是要讀取的資料的數量,00 是高8位,16是低8位。意思就是讀取0x16個資料(注意這裡是16進製制,轉換成10進製就是22)連同上一行資料(00c4)合起來的意思就是從0x00c4開始,讀取0x0016個資料。

右邊是響應。

響應的pdu是:02  03  ac  db  35

02  功能碼。

03  說明返回了0x03個位元組的資料。

ac  db  35  這三個位元組的資料就是請求中需要讀取的從ox00c4開始的0x0016個資料,由於0x16(十進位制是22)個資料(就是22個bit,因為離散資料量是單個bit的)在

兩個位元組(兩個位元組只有16個bit)裡放不下,所有這裡需要3個位元組(並未全部占全,剩下的兩個用0補齊)。

那麼資料如何對應位址呢?

請求中需要得到的資料是0x00c5——0x00da(共0x16個)。

於是,0xc5——0xcc、0xcd——0xd4、0xd5——0xda。

對應的就是上面圖中響應幀的204-197,212-205,218-213.注意,高位在前。

Modbus學習筆記

1 modbus是一種通訊協議,區別於diy的通訊介面,modbus的介面是公布且標準的,使用者主要定義具體暫存器功能即可。2 mdbus可以base在rs232 rs485或者tcp ip基礎上。3 上位機傳送資料由 位址碼 功能碼 位址高位 位址低位 長度高位 長度低位 校驗碼 組成。4 下位機...

Modbus學習 初學modbus

freemodbus的github原始碼 freemodbus移植 經驗分享 freemodbus原始碼詳解 freemodbus原始碼獲取 modbus通訊協議原來是這麼回事!看完秒懂了 modbus協議 modbus網路是乙個工業通訊系統,由帶智慧型終端的可程式設計序控制器和計算機通過公用線路或...

遊戲幀同步學習筆記

三 幀同步 四 狀態同步與幀同步對比 現代多人遊戲中,多個客戶端之間的通訊大多以同步多方狀態為主要目標,為了實現這一目標,主要有兩個技術方向 狀態同步 幀同步。1 什麼是狀態同步 狀態同步簡單來說就是同步遊戲中的各種狀態,當客戶端傳送遊戲動作到伺服器,伺服器接收到之後,通過計算遊戲行為的結果,然後廣...