(二)Modbus TCP協議使用說明

来源:https://www.cnblogs.com/wenhao-Web/archive/2020/05/30/12993675.html
-Advertisement-
Play Games

一、Modbus TCP數據幀 ModbusTCP的數據幀可分為兩部分:MBAP+PDU。 在 TCP/IP 上使用一種專用報文頭識別 MODBUS 應用數據單元。將這種報文頭稱為 MBAP 報文頭(MODBUS 協議報文頭)。這種報文頭提供一些與串列鏈路上使用的 MODBUS RTU 應用數據單元 ...


一、Modbus TCP數據幀

  ModbusTCP的數據幀可分為兩部分:MBAP+PDU

  TCP/IP 上使用一種專用報文頭識別 MODBUS 應用數據單元。將這種報文頭稱為 MBAP 報文頭(MODBUS 協議報文頭)。這種報文頭提供一些與串列鏈路上使用的 MODBUS RTU 應用數據單元比較的差別 :

  1.  MBAP 報文頭中的單個位元組單元標識符取代 MODBUS 串列鏈路上通常使用的 MODBUS從地址域。這個單元標識符用於設備的通信,這些設備使用單個IP地址支持多個獨立Modbus終端單元,例如:網橋、路由器和網關。
  2. 用接收者可以驗證完成報文的方式設計所有 MODBUS 請求和響應。對於 MODBUS PDU有固定長度的功能碼來說,僅功能碼就足夠了。對於在請求或響應中攜帶一個可變數據的功能碼來說,數據域包括位元組數。
  3. 當在 TCP 上攜帶 MODBUS 時,即使將報文分成多個信息包來傳輸,辦事在 MBAP 報文頭上攜帶附加長度信息,以便接收者能識別報文邊界。顯式和隱式長度規則的存在以及CRC-32 差錯校驗碼的使用(在乙太網上)將對請求或響應報文產生極小的未檢出干擾。 

二、MBAP報文頭

  原文鏈接:https://www.cnblogs.com/ioufev/articles/10830028.html

  MBAP的長度為7個位元組,組成如下:

  

事務處理標識協議標識長度單元標識符
2位元組 2位元組 2位元組 1位元組

 

內容解釋
事務處理標識 可以理解為報文的序列號,一般每次通信之後就要加1以區別不同的通信數據報文。
協議標識符 00 00表示ModbusTCP協議。
長度 表示接下來的數據長度,單位為位元組。
單元標識符 可以理解為設備地址。

 

四、幀結構PDU

 

  PDU由功能碼+數據組成。功能碼為1位元組,數據長度不定,由具體功能決定。

  功能碼

  Modbus的操作對象有四種:線圈、離散輸入、輸入寄存器、保持寄存器。

對象含義
線圈 PLC的輸出位,開關量,在Modbus中可讀可寫
離散量 PLC的輸入位,開關量,在Modbus中只讀
輸入寄存器 PLC中只能從模擬量輸入端改變的寄存器,在Modbus中只讀
保持寄存器 PLC中用於輸出模擬量信號的寄存器,在Modbus中可讀可寫

  根據對象的不同,常用的Modbus的功能碼有:

功能碼含義
0x01 讀線圈
0x05 寫單個線圈
0x0F 寫多個線圈
0x02 讀離散量輸入
0x04 讀輸入寄存器
0x03 讀保持寄存器
0x06 寫單個保持寄存器
0x10 寫多個保持寄存器

 

  0x01:讀線圈

  在從站中讀1~2000個連續線圈狀態,ON=1,OFF=0

  • 請求:MBAP 功能碼 起始地址H 起始地址L 數量H 數量L(共12位元組)
  • 響應:MBAP 功能碼 數據長度 數據(一個地址的數據為1位)
  • 如:在從站0x01中,讀取開始地址為0x0002的線圈數據,讀0x0008位
    00 01 00 00 00 06 01 01 00 02 00 08
  • 回:數據長度為0x01個位元組,數據為0x01,第一個線圈為ON,其餘為OFF
    00 01 00 00 00 04 01 01 01 01

  0x05:寫單個線圈
  將從站中的一個輸出寫成ON或OFF,0xFF00請求輸出為ON,0x000請求輸出為OFF

  • 請求:MBAP 功能碼 輸出地址H 輸出地址L 輸出值H 輸出值L(共12位元組)
  • 響應:MBAP 功能碼 輸出地址H 輸出地址L 輸出值H 輸出值L(共12位元組)
  • 如:將地址為0x0003的線圈設為ON
    00 01 00 00 00 06 01 05 00 03 FF 00
  • 回:寫入成功
    00 01 00 00 00 06 01 05 00 03 FF 00

  0x0F:寫多個線圈
  將一個從站中的一個線圈序列的每個線圈都強製為ON或OFF,數據域中置1的位請求相應輸出位ON,置0的位請求響應輸出為OFF

  • 請求:MBAP 功能碼 起始地址H 起始地址L 輸出數量H 輸出數量L 位元組長度 輸出值H 輸出值L
  • 響應:MBAP 功能碼 起始地址H 起始地址L 輸出數量H 輸出數量L

  0x02:讀離散量輸入
  從一個從站中讀1~2000個連續的離散量輸入狀態

  • 請求:MBAP 功能碼 起始地址H 起始地址L 數量H 數量L(共12位元組)
  • 響應:MBAP 功能碼 數據長度 數據(長度:9+ceil(數量/8))
  • 如:從地址0x0000開始讀0x0012個離散量輸入
    00 01 00 00 00 06 01 02 00 00 00 12
  • 回:數據長度為0x03個位元組,數據為0x01 04 00,表示第一個離散量輸入和第11個離散量輸入為ON,其餘為OFF
    00 01 00 00 00 06 01 02 03 01 04 00

  0x04:讀輸入寄存器
  從一個遠程設備中讀1~2000個連續輸入寄存器

  • 請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12位元組)
  • 響應:MBAP 功能碼 數據長度 寄存器數據(長度:9+寄存器數量×2)
  • 如:讀起始地址為0x0002,數量為0x0005的寄存器數據
    00 01 00 00 00 06 01 04 00 02 00 05
  • 回:數據長度為0x0A,第一個寄存器的數據為0x0c,其餘為0x00
    00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00

  0x03:讀保持寄存器
  從遠程設備中讀保持寄存器連續塊的內容

  • 請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12位元組)
  • 響應:MBAP 功能碼 數據長度 寄存器數據(長度:9+寄存器數量×2)
  • 如:起始地址是0x0000,寄存器數量是 0x0003
    00 01 00 00 00 06 01 03 00 00 00 03
  • 回:數據長度為0x06,第一個寄存器的數據為0x21,其餘為0x00
    00 01 00 00 00 09 01 03 06 00 21 00 00 00 00

  0x06:寫單個保持寄存器
  在一個遠程設備中寫一個保持寄存器

  • 請求:MBAP 功能碼 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12位元組)
  • 響應:MBAP 功能碼 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12位元組)
  • 如:向地址是0x0000的寄存器寫入數據0x000A
    00 01 00 00 00 06 01 06 00 00 00 0A
  • 回:寫入成功
    00 01 00 00 00 06 01 06 00 00 00 0A

  0x10:寫多個保持寄存器
  在一個遠程設備中寫連續寄存器塊(1~123個寄存器)

  • 請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L 位元組長度 寄存器值(13+寄存器數量×2)
  • 響應:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12位元組)
  • 如:向起始地址為0x0000,數量為0x0001的寄存器寫入數據,數據長度為0x02,數據為0x000F
    00 01 00 00 00 09 01 10 00 00 00 01 02 00 0
  • 回:寫入成功
    00 01 00 00 00 06 01 10 00 00 00 01

五、Modbus TCP示例報文

  ModBusTcp與串列鏈路Modbus的數據域是一致的,具體數據域可以參考串列Modbus。這裡給出幾個ModbusTcp的鏈路解析說明,輔助新人分析報文。

  原文鏈接:https://blog.csdn.net/mikasoi/article/details/81782159

  1、數據請求

97 76 00 00 00 06 04 04 00 7D 00 7D

 

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理標識符Hi

客戶機發起,伺服器複製,用於事務處理配對

0x96

1

事務處理標識符Lo

0x0000

2

協議標識符號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x0006

2

長度

從本位元組下一個到最後

 

0x04

1

單元標識符

客戶機發起,伺服器複製

串口鏈路或其他匯流排上遠程終端標識

功能碼

0x04

1

功能碼,讀寄存器

參考標準modbus協議

數據

0x007D

2

起始地址

 

0x 007D

2

寄存器數量

 

校驗

 

  2、數據請求回覆

97 76 00 00 00 FD 04 04 FA AB 9E 41 18 7A E1 3F 94 7A E1 3F 94 0A 3D 3F 97 51 EC 3F 98 CC CD C0 6C 33 33 C0 E3 CC CD C0 EC EB 85 41 F1 D7 0A 41 E9 47 AE 41 ED EB 85 41 F1 19 9A 43 D0 E6 66 43 C9 4C CD 43 CF EB 85 41 F3 66 66 42 0F CC CD 41 C2 E6 66 44 0A 1E B8 41 FB A3 D7 42 0C CC CD 41 BC C0 00 44 0A B8 52 41 F6 5C 29 42 0F 47 AE 41 D1 C6 66 44 0A 00 00 00 00 C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 0A 00 0A 00 0A 00 04 00 04 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F

 

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理標識符Hi

客戶機發起,伺服器複製,用於事務處理配對

0x96

1

事務處理標識符Lo

0x0000

2

協議標識符號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x00FD

2

長度

從本位元組下一個到最後

 

0x04

1

單元標識符

客戶機發起,伺服器複製

串口鏈路或其他匯流排上遠程終端標識

功能碼

0x04

1

功能碼,讀寄存器

參考標準modbus協議

數據

0x FA

1

位元組個數

 

0x----

 

數據

校驗

 

  3、寫多個寄存器

  

97 79 00 00 00 09 04 10 00 00 00 01 02 00 01

 

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理標識符Hi

客戶機發起,伺服器複製,用於事務處理配對

0x79

1

事務處理標識符Lo

0x0000

2

協議標識符號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x0009

2

長度

從本位元組下一個到最後

 

0x04

1

單元標識符

客戶機發起,伺服器複製

串口鏈路或其他匯流排上遠程終端標識

功能碼

0x10

1

功能碼,讀寄存器

參考標準modbus協議

數據

0x0000

2

起始地址

 

0x 0001

2

寫寄存器數量

 

0x 02

1

寫位元組的個數

 

00 01

2

目標值

 

校驗

 

  

  4、寫多個寄存器響應

  

97 79 00 00 00 06 04 10 00 00 00 01

 

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理標識符Hi

客戶機發起,伺服器複製,用於事務處理配對

0x79

1

事務處理標識符Lo

0x0000

2

協議標識符號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x0006

2

長度

從本位元組下一個到最後

 

0x04

1

單元標識符

客戶機發起,伺服器複製

串口鏈路或其他匯流排上遠程終端標識

功能碼

0x10

1

功能碼,讀寄存器

參考標準modbus協議

數據

0x0000

2

起始地址

 

0x 0001

2

寄存器個數

 

校驗

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0. 前言 前幾天FreeSql的作者向我推薦了FreeSql框架,想讓我幫忙寫個文章介紹一下。嗯,想不到我也能帶個貨了。哈哈,開個玩笑~看了下覺得設計的挺有意思的,所以就謝了這篇文章。 簡單介紹一下,FreeSql 是NCC組織的沙盒級項目,是一款功能強大的 ORM 組件,支持 .NET Core ...
  • 首先創建實體類 1 public class MacState 2 { 3 /// <summary> 4 /// 請求狀態 5 /// </summary> 6 public string success { get; set; } 7 /// <summary> 8 /// 錯誤信息 9 /// ...
  • 上一篇(https://www.cnblogs.com/meowv/p/12966092.html)文章使用AutoMapper來處理對象與對象之間的映射關係,本篇主要圍繞定時任務和數據抓取相關的知識點並結合實際應用,在定時任務中迴圈處理爬蟲任務抓取數據。 開始之前可以刪掉之前測試用的幾個Hello ...
  • 一:背景 1. 講故事 如果你常翻看FCL的源碼,你會發現這裡面有不少方法藉助了C/C++的力量讓C#更快更強悍,如下所示: [DllImport("QCall", CharSet = CharSet.Unicode)] [SecurityCritical] [SuppressUnmanagedCo ...
  • tmux簡單使用Tmux ("Terminal Multiplexer"的簡稱), 是一款優秀的終端復用軟體,類似 GNU screen,但比screen更出色。tmux來自於OpenBSD,採用BSD授權。使用它最直觀的好處就是, 通過一個終端登錄遠程主機並運行tmux後,在其中可以開啟多個控制台 ...
  • 在常用感測器中,模數轉換器是其中至關重要的環節,模數轉換器的精度以及系統的成本直接影響到系統的實用性。因此。如何提高模數轉換器的精度和降低系統的成本是衡量系統是否具有實際應用價值的標準。 圖 1 ADC工作流程 一、ADC簡單介紹 ADC可分為SAR型、積分型、Σ-Δ型、摺疊型等方式。SAR ADC ...
  • 郵件伺服器搭建 前言 本篇參考 https://blog.51cto.com/5001660/2377785 一個電子郵件系統應具有的三個主要組成構件,這就是用戶代理、郵件伺服器 ,以及郵件發送協議(如SMTP)和郵件讀取協議(如POP3)。POP3是郵局協議 (Post Office Protoc ...
  • Vim 是 Linux 下的常用文本編輯器,但也經常被稱為是一個上古神器,因為它對於初學者而言相當不友好,也不好入門。 但是,對於高手而言,他們不僅將 Vim 玩得很溜,而且還將它當作代碼開發的主要工具。為什麼?因為 VS 等 IDE 比較龐大,運行起來比較慢,而 Vim 就相當輕量了,瞬間就能打開 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...