STM32:Modbus通信協議核心解析:關鍵通信技術

知識點1【 Modbus通信】

1、Modbus的概述

Modbus是OSI模型第七層的應用層報文傳輸協議

協議:說明有組包和解包的過程

2、通信機制

Modelbus是一個請求/應答協議

通信機制:主機輪詢,從機應答的機制。每個從設備有唯一的地址主設備通過地址指定通信對象

輪詢:在通信或控制系統中,由主設備主動發送,周期性地向從設備發起請求并獲取數據的機制。

特點

(1)系統中只有一個主機:主機通信

(2)系統中的從機不可以主動向主機發送數據

(3)系統上電后,所有的主從設備都應該處于監聽總線的狀態,也就是接收狀態

(4)如果要發起一次通信,必須從主機的主動發起

通信流程

(1)主機首先切換成發送模式,發送數據包

(2)馬上轉成接收模式

3、Modbus報文格式

縮略語

報文介紹(重點

地址域:從設備的ID號 1Byte

功能碼:執行的具體操作 1Byte

數據域:發送或者接收的有效數據 252Byte

差錯校驗:判斷數據傳輸是否正確 2Byte

異常響應

這段話,中我們可以看到異常響應,那什么是異常響應,如何區分異常響應和正確響應呢?

異常響應概述

服務器(從設備)客戶端(主設備) 返回的錯誤通知,用于指示請求無法撐場處理

異常響應的辨別

功能碼為原功能碼 + 0x80(即最高位置1),范圍為128-255(十進制)

通信的架構圖

(1)正確的響應

(2)錯誤的相應

知識點2【功能碼】

功能碼分為三類

1、公共功能碼

2、用戶定義功能碼:

3、保留功能嗎:

其中最常用的也就是公共功能碼

常用功能碼介紹

1、0x01:可讀可寫 按照bit操作

  • 請求格式

    從站地址 | 0x01 | 起始地址高位 | 起始地址低位 | 寄存器數量高位 | 寄存器數量低位 | CRC

  • 響應格式

    從站地址 | 0x01 | 數據字節數 | 線圈狀態(按位打包) | CRC

  • 示例

    讀取地址0x0000開始的5個線圈狀態,返回值為0x15(二進制00010101,表示線圈0-4的狀態為ON、OFF、ON、OFF、ON)。

2、0x02:只讀 按照bit操作

  • 請求格式

    從站地址 | 0x02 | 起始地址高位 | 起始地址低位 | 輸入數量高位 | 輸入數量低位 | CRC

  • 響應格式

    從站地址 | 0x02 | 數據字節數 | 離散輸入狀態(按位打包) | CRC

  • 示例

    讀取地址0x0002開始的3個離散輸入,返回0x05(二進制00000101,表示輸入2-4的狀態為ON、OFF、ON)。

3、0x03:讀保持寄存器,按照寄存器讀取

  • 請求格式

    從站地址 | 0x03 | 起始地址高位 | 起始地址低位 | 寄存器數量高位 | 寄存器數量低位 | CRC

  • 響應格式

    從站地址 | 0x03 | 數據字節數 | 寄存器值(每寄存器2字節) | CRC

  • 示例

    讀取地址0x000A開始的2個保持寄存器,返回值為0x00FF0x1234

4、0x06: 按照寄存器操作

  • 請求格式

    從站地址 | 0x06 | 寄存器地址高位 | 寄存器地址低位 | 寫入值高位 | 寫入值低位 | CRC

  • 響應格式

    從站地址 | 0x06 | 寄存器地址高位 | 寄存器地址低位 | 寫入值高位 | 寫入值低位 | CRC(與請求相同,表示操作成功)

  • 示例

    向地址0x0001寫入值0xABCD,請求與響應報文一致。

5、0x16:寫入多個寄存器

  • 請求格式

    從站地址 | 0x10 | 起始地址高位 | 起始地址低位 | 寄存器數量高位 | 寄存器數量低位 | 字節數 | 寄存器值列表(每值2字節) | CRC

  • 響應格式

    從站地址 | 0x10 | 起始地址高位 | 起始地址低位 | 寄存器數量高位 | 寄存器數量低位 | CRC

  • 示例

    向地址0x0000寫入兩個寄存器值0x12340x5678,請求中包含字節數0x04和值列表。

注意

請求和響應部分 手冊中的圖如下,我這里來說一下分析時候的注意事項

無論是請求還是響應都是 PDU部分,即 功能碼和數據 部分

并且Modbus是大端存儲,我們存數據的時候先存入 高地址

知識點3【Modbus在數據鏈路層的實現】

1、請求方式

(1)單播模式

(2)廣播模式

2、地址的規則

尋址地址共256個

主節點沒有地址,每個子節點必須有一個地址

3、傳輸過程中的注意事項

(1)間隔時間

由于沒有起始位和停止位,Modbus使用的是以3.5個字符作為 兩個報文 之間的最短間隔時間。

(2)相鄰字符最大間隔

同一幀數據中相鄰字符間隔時間大于1.5個字符

上面的時間單位都是字符,哪一個字符是多久呢?請看下面介紹

(3)RTU模式每個字節(11位)格式

奇偶校驗位 是可以沒有的,收發端保持一致即可

是不是很熟悉,和串口一摸一樣。

因為Modbus是應用層協議,而串口 是物理層和數據鏈路層 的標準,因此到達數據鏈路層,他們的格式都是一樣的。

串口是一個廣義概念,泛指異步串行通信接口。并不只局限于USART。RS485,RS232也都是串口。

因此這里的一個字符時間就是:

字符時間

以波特率9600為例

總結

  • 幀間空閑時間(Inter-Frame Delay)必須 ≥?3.5個字符時間,以區分連續的數據幀。
  • 幀內字符間隔(Inter-Character Timeout)必須 ≤?1.5個字符時間,否則視為幀結束。

4、RS485和Modbus 的關系

通信:硬件層,軟件層組成

硬件層:

RS485——解決的是數據的傳輸問題,也就是如何將一個“0“或”1”傳輸到另外一端。

軟件層:

Modbus——在硬件的基礎上,解決數據傳輸的含義,傳的數據代表什么。

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

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

相關文章

LeetCode 3362.零數組變換 III:貪心+優先隊列+差分數組——清晰題解

【LetMeFly】3362.零數組變換 III:貪心優先隊列差分數組——清晰題解 力扣題目鏈接:https://leetcode.cn/problems/zero-array-transformation-iii/ 給你一個長度為 n 的整數數組 nums 和一個二維數組 queries ,其中 queries[i] [li, ri] …

ORM++ 封裝實戰指南:安全高效的 C++ MySQL 數據庫操作

ORM 封裝實戰指南:安全高效的 C MySQL 數據庫操作 一、環境準備 1.1 依賴安裝 # Ubuntu/Debian sudo apt-get install libmysqlclient-dev # CentOS sudo yum install mysql-devel# 編譯時鏈接庫 (-I 指定頭文件路徑 -L 指定庫路徑) g main.cpp -stdc17 -I/usr/i…

JESD204B 協議介紹

一、協議概述 JESD204B是由JEDEC(固態技術協會)制定的高速串行接口標準,專為模數轉換器(ADC)、數模轉換器(DAC)與邏輯器件(如FPGA、ASIC)之間的數據傳輸設計。其核心目標…

yolov8,c++案例匯總

文章目錄 引言多目標追蹤案例人體姿態估計算法手勢姿態估計算法目標分割算法 引言 以下案例,基于c,ncnn,yolov8既可以在windows10/11上部署, 也可以在安卓端部署, 也可以在嵌入式端部署, 服務器端可支持部署封裝為DLL,支持c/c#/java端調用 多目標追蹤案例 基于yolov8, ncnn,…

運動規劃實戰案例 | 圖解基于狀態晶格(State Lattice)的路徑規劃(附ROS C++/Python仿真)

目錄 1 控制采樣 vs 狀態采樣2 State Lattice路徑規劃2.1 算法流程2.2 Lattice運動基元生成2.3 幾何代價函數2.4 運動學約束啟發式 3 算法仿真3.1 ROS C仿真3.2 Python仿真 1 控制采樣 vs 狀態采樣 控制采樣的技術路線源自經典的運動學建模思想。這種方法將機器人的控制指令空…

BERT框架:自然語言處理的革命性突破

引言 在自然語言處理(NLP)領域,2018年Google推出的BERT(Bidirectional Encoder Representations from Transformers)框架無疑是一場革命。作為基于Transformer架構的雙向編碼器表示模型,BERT通過預訓練學習…

【Fifty Project - D31】

結束了一個超級消耗周末,滿安排之健身梅溪湖游泳做飯喝酒羽毛球賽 完全力竭了,久久不能恢復過來,暫停健身安排了 端午后再繼續 今日完成記錄 TimePlan完成情況7:30 - 8:10有氧爬坡√9:00 - 11:…

信息學奧賽一本通 1547:【 例 1】區間和

【題目鏈接】 ybt 1547:【 例 1】區間和 【題目考點】 1. 線段樹 2. 樹狀數組 【解題思路】 本題要求維護區間和,實現單點修改、區間查詢。 解法1:線段樹 線段樹原理,及實現方法見:洛谷 P3374 【模板】樹狀數組…

力扣面試150題--求根節點到葉節點數字之和

Day 48 題目描述 思路 我們利用sum這個全局變量來保存總和值,遞歸函數sum來計算每個根到葉子節點路徑所代表的數,由于我們需要遍歷到每條根到葉子節點的路徑,所有我采取了前序遍歷,如果不是葉子節點,就計算到該節點代…

DJI上云API官方demo學習

1、websocket,所在位置如下圖,調用的可以用//websocket搜索 2、用到的http客戶端,axios 3、很多和后端交互都是走的http請求

uniapp開發小程序,如何根據權限動態配置按鈕或頁面內容

前言 寫了好幾個項目,發現小程序對權限控制非常麻煩,于是有了這個想法,但是網上找了一圈沒有一個比較完善的講解,因為小程序不支持自定義指令,所以不能像后臺那樣方便,于是就將幾個博主的想法結合。 思路就…

LSTM+Transformer混合模型架構文檔

LSTMTransformer混合模型架構文檔 模型概述 本項目實現了一個LSTMTransformer混合模型,用于超臨界機組協調控制系統的數據驅動建模。該模型結合了LSTM的時序建模能力和Transformer的自注意力機制,能夠有效捕捉時間序列數據中的長期依賴關系和變量間的復…

測量尺子:多功能測量工具,科技改變生活

測量尺子是一款專業的測距儀測量萬能工具箱類型手機APP,旨在為用戶提供最貼心的測量助手。它擁有和現實測量儀器一樣的測量標準,更簡單便捷且精準的測量方式,最新AR科技測量更是大大拓寬了可以被測量的高度和深度。無論是日常使用、學習還是工…

結課作業01. 用戶空間 MPU6050 體感鼠標驅動程序

目錄 一. qt界面實現 二. 虛擬設備模擬模擬鼠標實現體感鼠標 2.1 函數聲明 2.2 虛擬鼠標實現 2.2.1 虛擬鼠標創建函數 2.2.2 鼠標移動函數 2.2.3 鼠標點擊函數 2.3 mpu6050相關函數實現 2.3.1 i2c設備初始化 2.3.2 mpu6050寄存器寫入 2.3.3 mpu6050寄存器讀取 2.3.…

深入淺出 Python Testcontainers:用容器優雅地編寫集成測試

在現代軟件開發中,自動化測試已成為敏捷開發與持續集成中的關鍵環節。單元測試可以快速驗證函數或類的行為是否符合預期,而集成測試則確保多個模塊協同工作時依然正確。問題是:如何讓集成測試可靠、可重復且易于維護? 這時&#…

JVM 的垃圾回收器

新生代回收器 通性 會觸發StW,暫停所有應用線程復制算法 Serial 單線程回收適合單線程系統 ParNew 多線程回收優先保證響應速度,降低 STW(STW 越大,執行垃圾回收的時間越長,回收的垃圾越多,減少垃圾回…

【筆記】排查并解決Error in LLM call after 3 attempts: (status code: 502)

#工作記錄 一、問題描述 在部署運行部署對沖基金分析工具 ai-hedge-fund 時,不斷出現以下報錯,導致項目運行異常: Error in LLM call after 3 attempts: (status code: 502) Error in LLM call after 3 attempts: [WinError 10054] 遠程主…

GO 語言進階之 Template 模板使用

更多個人筆記見: github個人筆記倉庫 gitee 個人筆記倉庫 個人學習,學習過程中還會不斷補充~ (后續會更新在github上) 文章目錄 Template 模板基本示例語法1. 基本輸出語法2. 控制結構3. 空白字符控制4. Must函數 Temp…

origin繪圖之【如何將多條重疊、高度重疊的點線圖、折線圖分開】

在日常的數據可視化工作中,Origin 作為一款功能強大的科研繪圖軟件,廣泛應用于實驗數據處理、結果展示與論文圖表制作等領域。然而,在處理多組數據、特別是繪制多條曲線的折線圖或點線圖時,常常會遇到這樣一個困擾:多條…

Java基礎 Day19

一、泛型(JDK5引入) 1、基本概念 在編譯階段約束操作的數據類型,并進行檢查 好處:統一數據類型,將運行期的錯誤提升到了編譯期 泛型的默認類型是 Object 2、泛型類 在創建類的時候寫上泛型 在創建具體對象的時候…