【嵌入式筆記】Modbus TCP

1.概述

定義:Modbus TCP 是 Modbus 協議的變體,基于 TCP/IP 協議棧,用于通過以太網實現工業設備間的通信。
背景:由施耐德電氣(原 Modicon 公司)在 1999 年發布,將傳統的 Modbus RTU/ASCII 適配到現代網絡環境。

核心特點:

  1. 基于客戶端/服務器模型,客戶端(主站)發起請求,服務器(從站)響應。
  2. 默認使用 TCP 端口 502,支持高速、遠距離通信。
  3. 二進制表現形式、緊湊的數據結構,通信效率高;
  4. 基于可靠連接的服務

2. 協議結構

Modbus TCP 報文由 MBAP 頭(Modbus Application Header) 和 PDU(協議數據單元) 組成:

MBAP 頭(7 字節)

  1. 事務標識符(2 字節):匹配請求與響應(如 0x0001)。
  2. 協議標識符(2 字節):固定為 0x0000,表示 Modbus 協議。
  3. 長度字段(2 字節):后續數據的字節數(包括單元標識符)。
  4. 單元標識符(1 字節):標識從站設備(類似 RTU 的從機地址)。

PDU(功能碼 + 數據)

  1. 功能碼(1 字節):定義操作類型(如 0x03 讀保持寄存器)。
  2. 數據字段(N 字節):請求或響應的具體內容
  3. 示例
  • 請求(讀取保持寄存器)
事務ID協議ID長度單元ID功能碼起始地址寄存器數量
00 0100 0000 06010300 0000 02
  • 響應
事務ID協議ID長度單元ID功能碼字節數數據
00 0100 0000 0701030400 0A 00 0B

3.通信流程

  1. 建立連接
    客戶端(主站)通過 TCP 端口 502 連接服務器(從站)。
  2. 構造請求
    MBAP 頭:事務ID(唯一標識)、協議ID(0x0000)、長度(單元ID+PDU字節數)、單元ID(從站地址)。
    PDU:功能碼(如 0x03 讀寄存器) + 數據(地址、數量等)。
  3. 發送請求
    客戶端通過 TCP 連接發送報文至服務器。
  4. 處理請求
    服務器驗證報文,執行操作(讀/寫數據),生成響應(成功或異常)。
  5. 返回響應
    服務器返回響應報文,格式與請求類似:
    成功:功能碼 + 數據(如寄存器值)。
    失敗:功能碼 + 0x80 + 異常碼。
  6. 解析響應
    客戶端匹配事務ID,提取數據或處理錯誤。
  7. 關閉連接(可選)
    短連接:單次通信后斷開。
    長連接:復用連接多次通信。
  • 核心要點
    端口:502(TCP)。
    事務ID:唯一匹配請求與響應。
    功能碼:定義操作類型(讀/寫)。
    長度字段 = 單元ID(1字節) + PDU字節數。
    字節序:大端(高位在前)。

  • 一句話總結:建連 → 組包 → 發請求 → 處理 → 回響應 → 解析 → 關連(可選)。

4. 與Modbus RTU的區別

  1. 從機地址不再重要,可通過IP地址區分;
  2. 取消CRC校驗,因為TCP/IP數據中已存在校驗;
  3. 多了MBAP報文頭。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905524.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905524.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《解鎖React Native與Flutter:社交應用啟動速度優化秘籍》

React Native和Flutter作為當下熱門的跨平臺開發框架,在優化應用啟動性能方面各有千秋。今天,我們就深入剖析它們獨特的策略與方法。 React Native應用的初始包大小對啟動速度影響顯著。在打包階段,通過精準分析依賴,去除未使用的…

R語言學習--Day02--實戰經驗反饋

最近在做需要用R語言做數據清洗的項目,在網上看再多的技巧與語法,都不如在項目中實戰學習的快,下面是我通過實戰得來的經驗。 判斷Rstudio是否卡死 很多時候,我們在運行R語言代碼時,即使只是運行框選的幾行代碼&#…

How Sam‘s Club nudge customers into buying more

Here’s how Sam’s Club (or similar warehouse memberships) nudge customers into buying more: It’s a classic psychological strategy rooted in sunk cost fallacy and loss aversion. 1. Prepaid Membership Creates a “Sunk Cost” Once you’ve paid the annual …

OpenHarmony系統HDF驅動開發介紹(補充)

一、HDF驅動簡介 HDF(Hardware Driver Foundation)驅動框架,為驅動開發者提供驅動框架能力,包括驅動加載、驅動服務管理、驅動消息機制和配置管理。 簡單來說:HDF框架的驅動和Linux的驅動比較相似都是由配置文件和驅動…

自然語言處理 (NLP) 入門:NLTK 與 SpaCy 的初體驗

自然語言處理入門:NLTK 與 SpaCy 的初體驗 在當今數字化飛速發展的浪潮中,自然語言處理(NLP)已經成為了極具熱度的技術領域。自然語言處理的核心目標是讓計算機能夠理解、分析并生成人類語言,其應用場景極為廣泛&…

LLaVA:開源多模態大語言模型深度解析

一、基本介紹 1.1 項目背景與定位 LLaVA(Large Language and Vision Assistant)是由Haotian Liu等人開發的開源多模態大語言模型,旨在實現GPT-4級別的視覺-語言交互能力。該項目通過視覺指令微調技術,將預訓練的視覺編碼器與語言模型深度融合,在多個多模態基準測試中達到…

如何利用大模型對文章進行分段,提高向量搜索的準確性?

利用大模型對文章進行分段以提高向量搜索準確性,需結合文本語義理解、分塊策略優化以及向量表示技術。以下是系統性的解決方案: 一、分塊策略的核心原則 語義完整性優先 分塊需確保每個文本單元在語義上獨立且完整。研究表明,當分塊內容保持單一主題時,向量嵌入的語義表征能…

Java高頻面試之并發編程-17

volatile 和 synchronized 的區別 在 Java 并發編程中,volatile 和 synchronized 是兩種常用的同步機制,但它們的適用場景和底層原理有顯著差異。以下是兩者的詳細對比: 1. 核心功能對比 特性volatilesynchronized原子性不保證復合操作的原…

技術債務積累,如何進行有效管理

識別和評估技術債務、明確技術債務的優先級、制定系統的還債計劃、持續監控與預防技術債務產生是有效管理技術債務積累的重要策略。其中尤其要注重識別和評估技術債務,只有準確識別技術債務的種類和嚴重程度,才能制定出高效且有針對性的解決方案&#xf…

安裝windows版本的nacos

一、下載nacos安裝包 瀏覽器搜索nacos,進入nacos官網 https://nacos.io/docs/latest/overview/ 選擇下載windows版本的nacos 二、解壓縮 三、進入bin目錄,cmd命令行窗口 四、啟動nacos 查看日志 五、打開可視化頁面查看 以上,就是安裝wind…

小結:Android系統架構

https://developer.android.com/topic/architecture?hlzh-cn Android系統的架構,分為四個主要層次:應用程序層、應用框架層、庫和運行時層以及Linux內核層。: 1. 應用程序層(Applications) 功能:這一層包…

鴻蒙5.0項目開發——鴻蒙天氣項目的實現(歡迎頁)

【高心星出品】 文章目錄 歡迎頁面效果數據字典創建數據庫表格Splash頁面頁面功能歡迎頁代碼亮點 項目按照從數據庫連接層–視圖層–業務邏輯層這種三層架構開發,所以先設計了數據庫表格的結構,在EntryAbility中創建表格。 歡迎頁面效果 數據字典 sear…

使用譜聚類將相似度矩陣分為2類

使用譜聚類將相似度矩陣分為2類的步驟如下: 構建相似度矩陣:提供的1717矩陣已滿足對稱性且對角線為1。 計算度矩陣:對每一行求和得到各節點的度,形成對角矩陣。 計算歸一化拉普拉斯矩陣:采用對稱歸一化形式 LsymI?D…

MySQL 8.0 OCP 英文題庫解析(三)

Oracle 為慶祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免費考取原價245美元的MySQL OCP 認證。 從今天開始,將英文題庫免費公布出來,并進行解析,幫助大家在一個月之內輕松通過OCP認證。 本期公布試題16~25 試題16:…

【SQL】如何在 SQL 中統計結構化字符串的特征頻率

在數據分析場景中,我們經常會遇到需要解析結構化字符串并統計特征出現次數的需求。本文將以常用數據庫為例,探討如何高效處理類似 [特征A][特征B][特征C] 格式的字符串數據,并實現特征頻率統計。以下是完整的實現思路和解決方案。 一、問題場…

Docker Compose 的安裝方法

以下是 Docker Compose 的安裝方法整理,綜合了多篇指南的推薦步驟和注意事項: 一、安裝前準備 確保已安裝 Docker Docker Compose 依賴 Docker 引擎運行,需先安裝 Docker。若未安裝,可通過以下命令一鍵安裝(國內服…

配置Nginx解決http host頭攻擊漏洞【詳細步驟】

前言 大概內容: 安全系統滲透測試出host頭攻擊漏洞,下面是解決步驟,本人已測過無問題。 server_name aaabbb.com; if ($http_Host !~* ^127.0.0.1|aaabbb.com|localhost$){return 403;}

自研時序大模型講解(4月29日)直播回顧

4 月 29 日,清華團隊揭秘:時序大模型如何讓數據“活”起來線上直播圓滿結束。清華大學軟件學院博士生,IoTDB 原生機器學習引擎 AINode 研發同學劉雍在線上面向數千人次的時序數據分析人員與 AI 大模型行業關注者,就時序大模型的發…

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作獲取第二維度,第三維度

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作獲取第1 維度,第二維度 attention_weights = torch.ones_like(prompt_embedding[:, :, 0]) 這行代碼的作用是創建一個與 prompt_embedding[:, :, 0] 形狀相同且所有元素都為 1 的張量,它用于初始化…

鴻蒙Next API17新特性學習之如何使用新增鼠標軸事件

今天咱們接著學習鴻蒙開發文檔API17版本的新特性——對鼠標軸事件的支持。這對于需要精細交互的應用來說是一個非常有用的特性,例如地圖滾動、文檔瀏覽等場景。本文將詳細介紹在鴻蒙 Next 中如何使用新增的鼠標軸事件。 開發步驟 環境準備 在開始開發之前&#x…