MODBUS RTU通信協議詳解與調試指南

一、MODBUS RTU簡介

MODBUS RTU(Remote Terminal Unit)是一種基于串行通信(RS-485/RS-232)的工業標準協議,采用二進制數據格式,具有高效、可靠的特點,廣泛應用于PLC、傳感器、變頻器等工業設備。

1. 主要特點

  • 通信方式:主從模式(Master/Slave)

  • 傳輸介質:RS-485(推薦)/ RS-232

  • 數據格式:二進制(HEX)

  • 校驗方式:CRC-16(循環冗余校驗)

  • 默認波特率:9600、19200、38400、115200等

  • 最大從站地址:247(地址范圍1~247,0為廣播地址)


二、MODBUS RTU數據幀格式

1. 基本幀結構

字段說明長度(字節)
從站地址設備地址(1~247)1
功能碼操作類型(讀/寫等)1
數據域寄存器地址、數據等N
CRC校驗循環冗余校驗(低字節在前)2

2. 常用功能碼

功能碼名稱操作
01讀取線圈狀態讀取單個/多個DO(0x/1x)
02讀取輸入狀態讀取DI(1x)
03讀取保持寄存器讀取多個AO(4x)
04讀取輸入寄存器讀取AI(3x)
05寫單個線圈控制單個DO(0x)
06寫單個寄存器寫入單個AO(4x)
10(0x10)寫多個寄存器寫入多個AO(4x)

三、MODBUS RTU通信示例

1. 讀取保持寄存器(功能碼03)

請求幀(Master → Slave)

[從站地址][功能碼][起始地址高8位][起始地址低8位][寄存器數量高8位][寄存器數量低8位][CRC低8位][CRC高8位]

示例:讀取從站地址1的保持寄存器40001(0x0000),讀取1個寄存器

01 03 00 00 00 01 84 0A

解析

  • 01:從站地址1

  • 03:功能碼03(讀保持寄存器)

  • 00 00:寄存器地址0x0000(對應40001)

  • 00 01:讀取1個寄存器

  • 84 0A:CRC校驗

響應幀(Slave → Master)

[從站地址][功能碼][字節數][數據1高8位][數據1低8位][CRC低8位][CRC高8位]

示例:返回數據1234(0x04D2)

01 03 02 04 D2 B8 5F

解析

  • 01:從站地址1

  • 03:功能碼03

  • 02:返回2字節數據

  • 04 D2:數據0x04D2(十進制1234)

  • B8 5F:CRC校驗


四、MODBUS RTU調試方法

1. 使用串口調試助手

  1. 連接設備

    • 使用USB轉485轉換器連接PC和設備

    • 確保A/B線正確連接(A-A,B-B)

    • 終端電阻(120Ω)在長距離通信時需啟用

  2. 參數設置

    • 波特率:9600(默認)

    • 數據位:8

    • 停止位:1

    • 校驗位:無

  3. 發送MODBUS RTU指令

    • 輸入16進制格式指令,如?01 03 00 00 00 01 84 0A

    • 點擊發送,觀察返回數據

  4. 解析響應

    • 檢查返回的CRC是否正確

    • 解析數據域(如?04 D2?表示1234)

2. 使用MODBUS Poll(專業調試工具)

  • 可自動計算CRC

  • 支持多種功能碼測試

  • 提供數據解析和圖表顯示


五、CRC-16校驗計算

MODBUS RTU采用CRC-16校驗,計算步驟如下(C語言示例):

c

#include <stdint.h>uint16_t crc16(uint8_t *data, uint16_t length) {uint16_t crc = 0xFFFF;for (uint16_t i = 0; i < length; i++) {crc ^= data[i];for (uint8_t j = 0; j < 8; j++) {if (crc & 0x0001) {crc >>= 1;crc ^= 0xA001;} else {crc >>= 1;}}}return crc;
}

示例
計算?01 03 00 00 00 01?的CRC:

c

uint8_t data[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01};
uint16_t crc = crc16(data, 6);  // 返回 0x840A(低字節在前:0A 84)

六、常見問題與解決方案

問題可能原因解決方案
無響應1. 接線錯誤(A/B反接)
2. 波特率不匹配
3. 從站地址錯誤
檢查接線、波特率、地址
CRC校驗錯誤1. 數據損壞
2. 校驗算法錯誤
檢查通信線路,重新計算CRC
返回異常碼(錯誤響應)1. 功能碼不支持
2. 寄存器不存在
檢查設備文檔,確認功能碼和寄存器范圍

七、總結

  • MODBUS RTU是工業自動化中最常用的串行通信協議之一。

  • 數據幀包含?地址+功能碼+數據+CRC,采用?16進制(HEX)?傳輸。

  • 調試時需確保?波特率、數據位、停止位、校驗位?一致。

  • CRC校驗?是確保數據完整性的關鍵。

掌握MODBUS RTU協議,可以高效調試PLC、傳感器、變頻器等設備,適用于工業自動化、SCADA系統、能源監控等場景。 🚀

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

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

相關文章

TCP/UDP協議原理和區別 筆記

從簡單到難吧 區別就是TCP一般用于安全穩定的需求&#xff0c;UDP一般用于不那么需要完全數據的需求&#xff0c;比如說直播&#xff0c;視頻等。 再然后就是TPC性能慢于UDP。 再然后我們看TCP的原理&#xff08;三次握手&#xff0c;數據傳輸&#xff0c;四次揮手&#xff0…

Jackson使用詳解

JSON Jackson是java提供處理json數據序列化和反序列的工具類&#xff0c;在使用Jackson處理json前&#xff0c;我們得先掌握json。 JSON數據類型 類型示例說明字符串&#xff08;String&#xff09;"hello"雙引號包裹&#xff0c;支持轉義字符&#xff08;如 \n&a…

C語言| 指針變量的定義

C語言| 指針的優點-CSDN博客 * 表示“指向”&#xff0c;為了說明指針變量和它所指向的變量之間的聯系。 int * i&#xff1b;//表示指針變量i里面存放的地址&#xff0c;所指向的存儲單元里的【數據】。 【指針變量的定義】 C語言規定所有變量&#xff0c;在使用前必須先定…

Java 快速轉 C# 教程

以下是一個針對 Java 開發者快速轉向 C# 的簡明教程&#xff0c;重點對比 Java 與 C# 的異同&#xff0c;幫助你快速上手。 項目結構&#xff1a; .sln &#xff1a;解決方案文件&#xff0c;管理多個項目之間的依賴關系。.csproj &#xff1a;項目文件&#xff0c;定義目標框…

EasyExcel詳解

文章目錄 一、easyExcel1.什么是easyExcel2.easyExcel示例demo3.easyExcel read的底層邏輯~~4.easyExcel write的底層邏輯~~ 二、FastExcel1.為什么更換為fastExcel2.fastExcel新功能 一、easyExcel 1.什么是easyExcel 內容摘自官方&#xff1a;Java解析、生成Excel比較有名的…

jvm安全點(三)openjdk17 c++源碼垃圾回收之安全點結束,喚醒線程

1. VMThread::inner_execute() - 觸發安全點?? cpp 復制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 進入安全點&#xff0c;阻塞所有線程 // ...執行GC等操作... SafepointSynchronize::…

102. 二叉樹的層序遍歷遞歸法:深度優先搜索的巧妙應用

二叉樹的層序遍歷是一種經典的遍歷方式&#xff0c;它要求按層級逐層訪問二叉樹的節點。通常我們會使用隊列來實現層序遍歷&#xff0c;但遞歸法也是一種可行且有趣的思路。本文將深入探討遞歸法解決二叉樹層序遍歷的核心難點&#xff0c;并結合代碼和模擬過程進行詳細講解。 …

首個窗口級無人機配送VLN系統!中科院LogisticsVLN:基于MLLM實現精準投遞

導讀 隨著智能物流需求日益增長&#xff0c;特別是“最后一公里”配送場景的精細化&#xff0c;傳統地面機器人逐漸暴露出適應性差、精度不足等瓶頸。為此&#xff0c;本文提出了LogisticsVLN系統——一個基于多模態大語言模型的無人機視覺語言導航框架&#xff0c;專為窗戶級別…

WPF Datagrid 數據加載和性能

這篇文章并非討論 WPF Datagrid 的性能數據&#xff0c;而只是簡單介紹一下為了使其性能良好&#xff0c;你需要注意哪些方面。我不太想使用性能分析器來展示實際數據&#xff0c;而是盡可能地使用了 Stopwatch 類。這篇文章不會深入探討處理海量數據的技術&#xff0c;例如分頁…

matlab求矩陣的逆、行列式、秩、轉置

inv - 計算矩陣的逆 用途&#xff1a;計算一個可逆矩陣的逆矩陣。 D [1, 2; 3, 4]; % 定義一個2x2矩陣 D_inv inv(D); % 計算矩陣D的逆 disp(D_inv);det - 計算矩陣的行列式 用途&#xff1a;計算方陣的行列式。 E [1, 2; 3, 4]; determinant det(E); % 計算行列式 disp…

ridecore流水線解讀

文章目錄 流水線stage分屬前后端PCpipelineIFIDDPDP 與 SW 中間沒有latchSWCOM 源碼地址 流水線stage分屬前后端 IF -> ID -> DP -> SW -> EX -> COM分類階段說明前端IF指令獲取階段。PC 使用分支預測器&#xff0c;訪問指令存儲器。典型前端操作。前端ID解碼并…

【SpringBoot】關于MP使用中配置了數據庫表前綴的問題

problem 使用MP時&#xff0c;在application.yml配置文件中配置了MP匹配數據庫表中的表名時的前綴作了規定&#xff0c;如下&#xff1a; 那么當我運行時報錯了錯誤&#xff0c;報錯信息如下&#xff1a; 因為我數據庫表的書類表名是book&#xff0c;MP在匹配時使用了表名前…

印度Rummy游戲支付通道申請策略:技巧類游戲的合規與創新

本文為印度支付申請科普文&#xff0c;自去年開始&#xff0c;印度Rummy類游戲申請印度支付都需要擁有AIGF的會員及產品證書。 如需要rummy可以通過AIGF審核的源。碼&#xff0c;或咨詢AIGF的相關內容&#xff0c;可以聯。系老妙。 印度作為全球棋牌類游戲增長最快的市場之一&…

日志與策略模式

什么是設計模式 IT?業 ,為了讓 菜雞們不太拖?佬的后腿, 于是?佬們針對?些經典的常?的場景, 給定了?些對應的解決?案, 這個就是 設計模式 日志認識 計算機中的?志是記錄系統和軟件運?中發?事件的?件&#xff0c;主要作?是監控運?狀態、記錄異常信 息&#xff…

解鎖Ubuntu高效部署!自動安裝配置文件YAML全解析

我們之前介紹了兩種Ubuntu系統的安裝方式&#xff0c;分別對應桌面版&#xff08;準備搞OpenStack了&#xff0c;先裝一臺最新的Ubuntu 23.10&#xff09;和服務器版&#xff08;Ubuntu 22.04 LTS服務器版本安裝演示&#xff09;。但對于有些用戶&#xff0c;因為技術問題&…

關系代數和關系數據庫語言(SQL)

閱讀提示&#xff1a;本篇文章較長&#xff0c;建議從目錄上選取想看的內容。代碼上的話&#xff0c;我習慣用小寫&#xff0c;如果看不習慣建議跳過。有問題歡迎討論&#xff01;&#xff01;&#xff01; 一、基礎概念 1.1數據庫的概念 數據庫(Database)是按照數據結構來組…

EXO 可以將 Mac M4 和 Mac Air 連接起來,并通過 Ollama 運行 DeepSeek 模型

EXO 可以將 Mac M4 和 Mac Air 連接起來&#xff0c;并通過 Ollama 運行 DeepSeek 模型。以下是具體實現方法&#xff1a; 1. EXO 的分布式計算能力 EXO 是一個支持 分布式 AI 計算 的開源框架&#xff0c;能夠將多臺 Mac 設備&#xff08;如 M4 和 Mac Air&#xff09;組合成…

區塊鏈基本理解

文章目錄 前言一、什么是分布式賬本(DLT)二、什么是P2P網絡?二、共識算法三、密碼算法前言 區塊鏈是由一個一個數據塊組成的鏈條,按照時間順序將數據塊逐一鏈接,通過哈希指針鏈接,所有的數據塊共同維護一份分布式賬本(DLT),每個節點(可以理解為一個玩家,一臺計算機)都擁…

Node.js中的洋蔥模型

文章目錄 前言 前言 Node.js中的洋蔥模型是一種中間件執行機制&#xff0c;主要用于處理HTTP請求和響應的流程控制。該模型通過層層包裹的中間件結構&#xff0c;實現請求從外到內穿透、響應從內向外返回的順序執行。以下從核心概念、實現原理、框架差異及實際應用等方面解析&…

UI-TARS Desktop:用自然語言操控電腦,AI 重新定義人機交互

在人工智能技術飛速發展的今天,從文本生成到圖像識別,AI 的能力邊界不斷被打破。而字節跳動近期開源的 UI-TARS Desktop,則將這一技術推向了更復雜的交互場景——通過自然語言直接控制計算機界面,實現了圖形用戶界面(GUI)的智能化自動化。這款工具不僅降低了操作門檻,更…