(三)Modbus RTU協議使用說明

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

一、Modbus RTU數據幀說明 由發送設備將 Modbus 報文構造為帶有已知起始和結束標記的幀。這使設備可以在報文的開始接收新幀,並且知道何時報文結束。不完整的報文必須能夠被檢測到而錯誤標誌必須作為結果被設置。在 RTU 模式,報文幀由時長至少為 3.5 個字元時間的空閑間隔區分。在後續的部分 ...


一、Modbus RTU數據幀說明

  由發送設備將 Modbus 報文構造為帶有已知起始和結束標記的幀。這使設備可以在報文的開始接收新幀,並且知道何時報文結束。不完整的報文必須能夠被檢測到而錯誤標誌必須作為結果被設置。RTU 模式,報文幀由時長至少為 3.5 個字元時間的空閑間隔區分。在後續的部分,這個時間區間被稱作 t3.5

  整個報文幀必須以連續的字元流發送。如果兩個字元之間的空閑間隔大於 1.5 個字元時間,則報文幀被認為不完整應該被接收節點丟棄。 

二、MODBUS指令說明

  1、讀線圈寄存器01H

  1) 描述:

  讀MODBUS從機線圈寄存器當前狀態。

  2) 查詢:

  例如從機地址為0x11,線圈寄存器的起始地址為0x0013,結束地址為0x0037。該次查詢總共訪問(0x0037-0x0013 + 1)37個線圈寄存器。

讀線圈寄存器-查詢
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 01
寄存器起始地址高位元組(1個位元組) 00
寄存器起始地址低位元組(1個位元組) 13
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 25
CRC校驗高位元組(1個位元組) 0E
CRC校驗低位元組(1個位元組) 84

  3) 響應

  響應負載中的各線圈狀態與數據內容每位相對應。1代表ON,0代表OFF。若返回的線圈數不為8的倍數,則在最後數據位元組未尾使用0代替。

讀線圈寄存器-響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 01
返回位元組數(1個位元組) 05
數據1(線圈0x001A - 線圈0x0013)(1個位元組) CD
數據2(線圈0x0022 - 線圈0x001B)(1個位元組) 6B
數據3(線圈0x002A - 線圈0x0023)(1個位元組) B2
數據4(線圈0x0032 - 線圈0x002B)(1個位元組) 0E
數據5(線圈0x0037 - 線圈0x0033)(1個位元組) 1B
CRC校驗高位元組(1個位元組) 45
CRC校驗低位元組(1個位元組) E6

  線圈0x0013到線圈0x001A的狀態為0xCD,二進位值為11001101,該位元組的最高位元組為線圈0x001A,最低位元組為線圈0x0013。線圈0x001A到線圈0x0013的狀態分別為ON-ON-OFF-OFF-ON-ON-OFF-ON。

 線圈0x0013到0x001A狀態
0x001A 0x0019 0x0018 0x0017 0x0016 0x0015 0x0014 0x0013
ON ON OFF OFF ON ON OFF ON

  最後一個數據位元組中,線圈0x0033到線圈0x0037狀態為0x1B(二進位00011011),線圈0x0037是左數第4位,線圈0x0033為該位元組的最低位元組,線圈0x0037至線圈0x0033的狀態分別為ON-ON-OFF-ON-ON,剩餘3位使用0填充。

線圈0x0033到線圈0x0037狀態
0x003A 0x0039 0x0038 0x0037 0x0036 0x0035 0x0034 0x0033
填充 填充 填充 ON ON OFF ON ON

 

  2、讀離散輸入寄存器 02H

  1) 說明

  讀離散輸入寄存器狀態。

  2) 查詢

  從機地址為0x11。離散輸入寄存器的起始地址為0x00C4,結束寄存器地址為0x00D9。總共訪問(0x00D9-0x00C4+1)22個離散輸入寄存器。

 讀離散輸入寄存器——查詢
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 02
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) C4
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 16
CRC校驗高位元組(1個位元組) BA
CRC校驗低位元組(1個位元組) A9

  3) 響應

  響應各離散輸入寄存器狀態,分別對應數據區中的每位值,1 代表ON;0 代表OFF。第一個數據位元組的LSB(最低位元組)為查詢的定址地址,其他輸入口按順序在該位元組中由低位元組向高位元組排列,直到填充滿8位。下一個位元組中的8個輸入位也是從低位元組到高位元組排列。若返回的輸入位數不是8的倍數,則在最後的數據位元組中的剩餘位至該位元組的最高位使用0填充。

讀輸入寄存器-響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 02
返回位元組數(1個位元組) 03
數據1(0x00CB - 0x00C4)(1個位元組) AC
數據1(0x00D3 - 0x00CC)(1個位元組) DB
數據1(0x00D9 - 0x00D4)(1個位元組) 35
CRC校驗高位元組(1個位元組) 20
CRC校驗低位元組(1個位元組) 18

  離散輸入寄存器0x00D4到0x00D9的狀態為0x35 (二進位00110101)。輸入寄存器0x00D9為左數第3位,輸入寄存器0x00D4為最低位,輸入寄存器0x00D9到0x00D4的狀態分別為ON-ON-OFF-ON-OFF-ON。0x00DB寄存器和0x00DA寄存器被0填充。

離散輸入寄存器0x00C4到0x00DB狀態
0x00CB 0x00CA 0x00C9 0x00C8 0x00C7 0x00C6 0x00C5 0x00C4
0 0 1 1 0 1 0 1
0x00D3 0x00D2 0x00D1 0x00D0 0x00CF 0x00CE 0x00CD 0x00CC
1 1 1 0 1 0 1 1
0x00DB 0x00DA 0x00D9 0x00D8 0x00D7 0x00D6 0x00D5 0x00D4
填充 填充 1 1 0 1 0 1

  3、讀保持寄存器 03H

  1) 說明
  讀保持寄存器。可讀取單個或多個保持寄存器。
  2) 查詢
  從機地址為0x11。保持寄存器的起始地址為0x006B,結束地址為0x006D。該次查詢總共訪問(0x006D-0x006B+1)3個保持寄存器。

 讀保持寄存器-查詢
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 03
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) 6B
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 03
CRC高位元組(1個位元組) 76
CRC低位元組(1個位元組) 87


  3) 響應
保持寄存器的長度為2個位元組。對於單個保持寄存器而言,寄存器高位元組數據先被傳輸,低位元組數據後被傳輸。保持寄存器之間,低地址寄存器先被傳輸,高地址寄存器後被傳輸。

     
讀保持寄存器-響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 03
位元組數(1個位元組) 06
數據1高位元組(0x006B)(1個位元組) 00
數據1低位元組(0x006B)(1個位元組) 6B
數據2高位元組(0x006C)(1個位元組) 00
數據2低位元組(0x006C)(1個位元組) 13
數據3高位元組(0x006D)(1個位元組) 00
數據3低位元組(0x006D)(1個位元組) 00
CRC高位元組(1個位元組) 38
CRC低位元組(1個位元組) B9
保持寄存器0x006B到0x006D結果

0x006B

高位元組

0x006B

低位元組

0x006C

高位元組

0x006C

低位元組

0x006D

高位元組

0x006D

低位元組

00 6B 00 13 00 00

  4、讀輸入寄存器 04H


  1) 說明
  讀輸入寄存器命令。該命令支持單個寄存器訪問也支持多個寄存器訪問。
  2) 查詢
  從機地址為0x11。輸入寄存器的起始地址為0x0008,寄存器的結束地址為0x0009。本次訪問訪問2個讀入寄存器。

 讀輸入寄存器-查詢
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 04
寄存器起始地址高位元組(1個位元組) 00
寄存器起始地址低位元組(1個位元組) 08
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 02
CRC高位元組(1個位元組) F2
CRC低位元組(1個位元組) 99

  3) 響應
  輸入寄存器長度為2個位元組。對於單個輸入寄存器而言,寄存器高位元組數據先被傳輸,低位元組數據後被傳輸。輸入寄存器之間,低地址寄存器先被傳輸,高地址寄存器後被傳輸。

 讀寄存器-響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 04
位元組數(1個位元組) 04
數據1高位元組(0x0008)(1個位元組) 00
數據1低位元組(0x0008)(1個位元組) 0A
數據2高位元組(0x0009)(1個位元組) 00
數據2低位元組(0x0009)(1個位元組) 0B
CRC高位元組(1個位元組) 8B
CRC低位元組(1個位元組) 80
輸入寄存器0x0008到0x0009結果

0x0008

高位元組

0x0008

低位元組

0x0009

高位元組

0x0009

低位元組

0x00 0x0A 0x00 0x0B

  5、寫單個線圈寄存器 05H

  1) 說明
  寫單個線圈寄存器。0xFF00值請求線圈處於ON狀態,0x0000值請求線圈處於OFF狀態。0x05指令設置單個線圈的狀態,0x15指令可以設置多個線圈的狀態,兩個指令雖然都設定線圈的ON/OFF狀態,但是ON/OFF的表達方式卻不同。
  2) 查詢
  從機地址為0x11,線圈寄存器的地址為0x00AC。使0x00AC線圈處於ON狀態,即數據內容為0xFF00。

 寫單個線圈-查詢
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 05
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) AC
數據1高位元組(1個位元組) FF
數據1低位元組(1個位元組) 00
CRC校驗高位元組(1個位元組) 4E
CRC校驗低位元組(1個位元組) 8B

 

  3) 響應

強制單個線圈——響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 05
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) AC
寄存器1高位元組(1個位元組) FF
寄存器1低位元組(1個位元組) 00
CRC校驗高位元組(1個位元組) 4E
CRC校驗低位元組(1個位元組) 8B

  6、寫單個保持寄存器 06H


  1) 說明
  寫保持寄存器。註意0x06指令只能操作單個保持寄存器,0x16指令可以設置單個或多個保持寄存器。
  2) 查詢
  從機地址為0x11。保持寄存器地址為0x0001。寄存器內容為0x0003。

寫單個保持寄存器——查詢
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 06
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) 01
數據1高位元組(1個位元組) 00
數據1低位元組(1個位元組) 01
CRC校驗高位元組(1個位元組) 9A
CRC校驗低位元組(1個位元組) 9B

  3) 響應

寫單個保持寄存器——響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 06
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) 01
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 01
CRC校驗高位元組(1個位元組) 1B
CRC校驗低位元組(1個位元組) 5A

  7、寫多個線圈寄存器 0FH


  1) 說明
  寫多個線圈寄存器。若數據區的某位值為“1”表示被請求的相應線圈狀態為ON,若某位值為“0”,則為狀態為OFF。
  2) 查詢
  從機地址為0x11,線圈寄存器的起始地址為0x0013,線圈寄存器的結束地址為0x001C。總共訪問(0x001C-0x0013+1)10個寄存器。寄存器內容如下表所示。

線圈寄存器0013H到001CH
0x001A 0x0019 0x0018 0x0017 0x0016 0x0015 0x0014 0x0013
1 1 0 0 1 1 0 1
0x0022 0x0021 0x0020 0x001F 0x001E 0x001D 0x001C 0x001B
0 0 0 0 0 0 0 1

  傳輸的第一個位元組0xCD對應線圈為0x0013到0x001A,LSB(最低位)對應線圈0x0013,傳輸第二個位元組為 0x01,對應的線圈為0x001B到0x001C,LSB對應線圈0x001C,其餘未使用位使用0填充。

寫多個線圈寄存器——查詢
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 0F
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) 13
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 0A
位元組數(1個位元組) 02
數據1(0x0013 - 0x001A)(1個位元組) CD
數據2(0x001B - 0x001C)(1個位元組) 01
CRC校驗高位元組(1個位元組) BF
CRC校驗低位元組(1個位元組) 0B

  3) 響應

寫多個線圈寄存器——響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 0F
寄存器地址高位元組(1個位元組) 00
寄存器地址低位元組(1個位元組) 13
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 0A
位元組數(1個位元組) 02
CRC校驗高位元組(1個位元組) 99
CRC校驗低位元組(1個位元組) 1B

  8、寫多個保持寄存器10H

  1) 說明
  寫多個保持寄存器。
  2) 查詢
  從機地址為0x11。保持寄存器的起始地址為0x0001,寄存器的結束地址為0x0002。總共訪問(0x0002-0x0001+1)2個寄存器。保持寄存器0x0001的內容為0x000A,保持寄存器0x0002的內容為0x0102。

寫多個保持寄存器——請求
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 10
寄存器起始地址高位元組(1個位元組) 00
寄存器起始地址低位元組(1個位元組) 01
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 02
位元組數(1個位元組) 04
數據1高位元組(1個位元組) 00
數據1低位元組(1個位元組) 0A
數據2高位元組(1個位元組) 01
數據2低位元組(1個位元組) 02
CRC校驗高位元組(1個位元組) C6
CRC校驗低位元組(1個位元組) F0
保持寄存器0x0001到0x0002內容
地址

0x0001

高位元組

0x0001

低位元組

0x0002

高位元組

0x0002

低位元組

數值 0x00 0x0A 0x01 0x02

  3) 響應

寫多個保持寄存器——響應
  Hex
從機地址(1個位元組) 11
功能碼(1個位元組) 10
寄存器起始地址高位元組(1個位元組) 00
寄存器起始地址低位元組(1個位元組) 01
寄存器數量高位元組(1個位元組) 00
寄存器數量低位元組(1個位元組) 02
CRC校驗高位元組(1個位元組) 12
CRC校驗低位元組(1個位元組) 98

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

-Advertisement-
Play Games
更多相關文章
  • 《ASP.NET MVC 企業級實戰》 [作者] (中) 鄒瓊俊[出版] 清華大學出版社[版次] 2017年04月 第1版[印次] 2019年08月 第6次 印刷[定價] 89.00元 【第01章】 (P021) 只有在 Lambda 有一個輸入參數時,括弧才是可選的,否則括弧是必需的。 使用空括弧 ...
  • CentOS7修改主機名 查看當前的主機名 第一種方法 [root@localhost ~]# hostname localhost.localdomain 第二種方法 [root@localhost ~]# hostnamectl Static hostname: localhost.locald ...
  • 如何通過Xshell遠程連接Linux伺服器,以及如何配置xshell各項參數。 ...
  • 作為公司的公共產品,經常有這樣的需求:就是新建一個本地服務,產品線作為客戶端通過 tcp 接入本地服務,來獲取想要的業務能力。 與印象中動輒處理成千上萬連接的 tcp 網路服務不同,這個本地服務是跑在客戶機器上的,Win32 上作為開機自啟動的 windows 服務運行; Linux 上作為 dae ...
  • dockerfile的格式,dockerfile是一個純文本文件,我們可以理解為構建鏡像的源碼;不同於其他編程語言,dockerfile里沒有if else 沒有迴圈,它裡面僅僅有註釋和構建鏡像的指令;對於dockerfile註釋就是以井號開頭的行為註釋,這個和shell和其他配置文件的語法一樣;... ...
  • 眾所周知,Azure平臺支持Linux。因為我對Linux完全不熟悉,所以最近開始自學Linux。我起初借了一本名聲很響亮的書《鳥哥的Linux私房菜》。讀了幾章後,我覺得這本書寫得的確非常詳細,但是一頁紙上洋洋灑灑寫滿了字,讓人很難有讀下去的欲望,感覺就像在啃一本字典。這本書倒是很適合閑暇時刻翻上 ...
  • 一 Rancher概述1.1 什麼是RancherRancher 是為使用容器的公司打造的容器管理平臺。Rancher 簡化了使用 Kubernetes 的流程,方便開發者可以隨處運行 Kubernetes(Run Kubernetes Everywhere),以便於滿足 IT 需求規範,賦能 De ...
  • NFS 概述 NFS(Network File System)是一種能使伺服器上的信息被其他電腦掛載而達到資源共用的網路文件系統。一個客戶機可以把遠程文件系統掛載到本地文件系統的某個目錄下,作為本地系統的一部分來使用。NFS 有屬於自己的協議和埠號,但在傳送資料或其他相關信息時,NFS 伺服器需 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...