Modbus TCP協議解析

在之前的文章中,我們介紹了Modbus RTU協議的內容和實現方法。最近在進行網絡通訊的時候又用到了Modbus TCP協議,因此這裏把自己對Modbus TCP的瞭解總結一下。

一、Modbus TCP協議解析

Modbus TCP和Modbus RTU的區別

這兩個都是Modbus協議,但是兩者之間有有何區別呢?在我看來,Modbus TCP協議是一個運行在TCP/IP網絡連接中的一種協議,而Modbus RTU則是運行在工業控制領域的一種協議,就傳遞數據的功能來說,兩者都能實現。就傳遞數據的路徑來說,Modbus TCP可能更多的是在網絡環境下的數據傳輸。就傳遞的數據的格式來說,二者存在着一定的區別,但是又有相同的地方。下面我們通過具體的例子,來說明。

Modbus TCP協議的構成

Modbus TCP的協議構成可以分爲 報文頭 功能碼 數據碼 (校驗碼)這幾個部分,這裏校驗碼在一般的Modbus TCP中是沒有的。對比Modbus RTU,我們可以看到這兩個協議的組成基本上是一樣的。

Modbus TCP的報文頭

Modbus TCP的報文頭一般來說又分爲以下幾個碼:

名稱 長度 示例 備註
事務處理標識符 2個字節 97 79 客戶機發起,服務器複製,用於事務處理配對,可以自行設定
協議標識符 2個字節 00 00 客戶機發起,服務器複製,表示該協議是TCP協議,是固定值,不可以更改
長度標識符 2個字節 00 06 表示該數據幀中,從本子節到最後一個字節的字節個數,根據當前數據幀的情況設定
單元標識符 1個字節 03 客戶機發起,服務器複製,這是一個站點號,在多設備通訊時,用來表示該數據的來源於哪個設備或者該數據要去往哪個設備

Modbus TCP的功能碼

除了Modbus的構成基本相似,其中的功能碼、數據碼兩部分也是採用通用的格式,例如3爲讀寄存器功能碼,16爲寫寄存器功能碼等等。這裏對功能碼和數據碼不做深入的展開。

名稱 長度 示例 備註
功能碼 1個字節 05 功能碼根據Modbus通用功能碼的定義進行設定,這裏05表示對線圈進行寫操作

Modbus TCP的數據碼

這裏數據碼也是同Modbus RTU協議一樣,不同的功能碼後面的數據碼是不同的。這裏具體什麼樣的功能碼對應什麼樣的數據碼,請自行查閱資料。這裏只是簡單的舉幾個例子。

名稱 長度 示例 備註
線圈地址 2個字節 00 10 表示對地址爲17的線圈進行操作
操作命令 2個字節 FF 00 FF 00 表示將該線圈置1,00 00 表示將該線圈置0

二、持續更新:Modbus TCP實現各種功能碼的示例

1.功能碼 05 (0x05)

功能碼0x05表示寫指令線圈,也就是控制某線圈通斷。代碼的構成如下:

結構 名稱 長度 示例 備註
報文頭
事務處理標識符 2個字節 97 79 客戶機發起,服務器複製,用於事務處理配對,可以自行設定
協議標識符 2個字節 00 00 客戶機發起,服務器複製,表示該協議是TCP協議,是固定值,不可以更改
長度標識符 2個字節 00 06 表示該數據幀中,從本子節到最後一個字節的字節個數,根據當前數據幀的情況設定
單元標識符 1個字節 03 客戶機發起,服務器複製,這是一個站點號,在多設備通訊時,用來表示該數據的來源於哪個設備或者該數據要去往哪個設備
功能碼 功能碼 1個字節 05 05表示對線圈進行寫操作
數據碼
線圈地址 2個字節 00 10 表示對地址爲17的線圈進行操作
操作命令 2個字節 FF 00 FF 00 表示將該線圈置1,00 00 表示將該線圈置0

發送:97 79 00 00 00 06 03 05 00 10 FF 00
收到:97 79 00 00 00 06 03 05 00 10 FF 00

因爲這裏不需要主機返回數據,因此主機將收到的指令複製一下直接發送回來表示接受正常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章