Leave Your Message
新聞類別
專題新聞

MODBUS_RTU 通訊協定詳解

2026年2月27日

MODBUS_RTU 該協議是一種基於串行鏈路(RS232 或 RS485)的開放式通訊協議,它使用晶片的串行端口發送和接收數據訊息。

一、傳輸模式

傳輸模式是指資訊幀內一系列獨立的資料結構以及用於傳輸資料的有限規則。 MODBUS-RTU協定在Modbus匯流排上以RTU模式進行通訊。訊息中的每個8位元組被分成兩個4位元十六進位字元。每條訊息必須連續傳輸。

編碼系統

  • 8 位元二進位數,十六進位數 0~9,A~F
  • 訊息中的每個 8 位元欄位由兩個十六進位字元組成。

 每位元組位數

  • 1起始位
  • 8 位元數據,最低有效位元先發送。
  • 1 位奇偶校驗位,若沒有奇偶校驗位則為 0
  • 1 個停止位,2 個校驗位(無校驗)

 錯誤偵測域

  • CRC(循環冗餘校驗)

 二、 協定

當資料幀到達終端設備時,它會透過一個簡單的「連接埠」進入目標設備。裝置移除資料幀的「信封」(幀頭),讀取數據,如果沒有錯誤,則執行資料請求的任務。然後,它將產生的資料添加到獲取的“信封”中,並將資料幀傳回給發送方。傳回的回應資料包含以下內容:終端機從裝置的位址(Address)、執行的指令(Function)、由執行的指令產生的請求資料(Data)以及校驗碼(Check)。任何錯誤都不會回傳成功回應。

1-1.jpg

  1)資訊框架

2-1.jpg

Modbus 資訊幀的最大允許長度為 256 位元組,即 N 的範圍大於等於零且小於等於 252。

 

2)網址列

訊息幀位址欄位(訊息位址)位於訊框的開頭,由 8 位元組成。有效的從設備位址範圍為 0 到 247(十進位)。每個從設備的尋址範圍為 1 到 247。主設備將從設備的位址放入資訊幀的位址區,並向從設備發送尋址資訊。當從裝置回應時,它會將自己的位址放入回應訊息的位址區,以便主裝置能夠識別已回應的從裝置的位址。

位址 0 是廣播位址,所有從站都能辨識。在進階網路中使用 Modbus 協定時,不允許使用廣播或其他替代方式。

3-1.jpg

3)函數域

此資訊幀的功能字段代碼告訴目標終端要執行什麼功能。有效代碼範圍為十進制 1 到 225。有些程式碼適用於所有控制器,有些程式碼適用於特定控制器,有些程式碼保留供將來使用。

當主控端向從控端發送訊息時,功能碼會指示從控端要執行的操作,例如讀取一組離散線圈的開/關狀態或輸入訊號,讀取一組暫存器的數據,讀取從控端的診斷狀態,寫入線圈(或暫存器),允許從控端下載、記錄和確認程式等。

當從設備回應主設備時,其功能碼可能指示從設備回應正常,也可能指示發生錯誤(即未正常回應)。如果響應正常,從設備直接返回原始功能碼;如果響應異常,從設備返回一個與原始功能碼等效,但最高有效位設定為“1”的功能碼。

例如,當主裝置要求從裝置讀取一組保持暫存器時,傳送訊息的功能碼為 0000 0011(十六進位 03)。如果從裝置正確接收到請求的操作訊息,則傳回相同的功能碼作為正常回應;如果接收錯誤,則傳回異常回應訊息:1000 0011(十六進位 83)。從設備會修改功能碼,並在回應訊息的資料區中新增一個特殊代碼,以告知主設備錯誤類型和異常回應的原因。主設備的應用程式負責處理異常響應。典型的處理流程是,主設備將測試和診斷訊息傳送給從設備,並通知操作員。

下表列出了所有設備常用的功能代碼、其意義及其初始功能。

程式碼

姓名

行動

01

讀取線圈狀態

取得一組邏輯線圈的當前狀態(開/關)

02

讀取輸入狀態

取得一組開關輸入(開/關)的當前狀態

03

閱讀持倉登記冊

從一個或多個保持暫存器檢索目前二進位值

04

讀取輸入暫存器

從一個或多個輸入暫存器檢索目前二進位值

05

強制單線圈

強制邏輯線圈處於開/關狀態

06

預設單一暫存器

將特定的二進位值放入單一暫存器中

07

讀取異常狀態

取得8個內部線圈的開關狀態

15

強制多線圈

強制開啟和關閉一系列連續邏輯線圈

16

預設多個暫存器

將一系列特定的二進位值放入一系列多個暫存器中

17

報告從屬 ID

主設備可以判斷被定址從設備的類型以及從設備的運行指示燈狀態。

4)資料域

資料欄位包含終端執行特定功能所需的數據,或終端回應查詢而收集的資料。這些資料的內容可以是數值、引用位址或限值。

例如,功能欄位程式碼指示終端機讀取某個暫存器,而資料欄位則指示從哪個暫存器開始讀取以及讀取多少資料。嵌入的位址和資料會根據從設備的類型和回應能力而變化。如果沒有發生錯誤,從裝置發給主機的回應訊息將包含要求的資料;如果發生錯誤,資料中將包含異常代碼,以便主機判斷並採取下一步行動。資料區的長度可以為“零”,以表示某種特定類型的信息。

 

5)錯誤檢查字段

此域允許主機和終端在傳輸過程中檢查錯誤。有時,由於電噪聲和其他幹擾,資料在從一台設備傳輸到另一台設備的過程中可能會發生變化。錯誤檢查可以確保主機或終端不會回應在傳輸過程中發生變化的數據,從而提高系統的安全性和效率。錯誤檢查採用 16 位元循環冗餘校驗 (CRC) 方法。

錯誤檢測字段為 16 位元(由兩個 8 位元字元實現)。錯誤檢測欄位的內容是透過對訊息內容應用循環冗餘檢測方法產生的。 CRC 欄位附加在訊息結尾,低位元組在前,高位元組在後,因此 CRC 的高位元組是已傳送訊息的最後一個位元組。

 

6)字元的連續傳輸

當訊息透過標準 Modbus 系列網路傳輸時,每個字元或位元組都會以從左到右的順序傳送:最低有效位元 (LSB) … 最高有效位元 (MSB)。

比特序列為:

存在均等性

4-1.jpg

沒有平價

5-1.jpg

三、錯誤檢測

1)奇偶性

使用者可以設定控制器採用奇校驗、偶校驗或無校驗。這將決定每個字元中奇偶校驗位的設定方式。

如果指定了奇校驗或偶校驗,則每個字元的資料位數中會包含「1」的位數(ASCII 模式下為 7 位元數據,RTU 模式下為 8 位元資料)。例如,RTU 字元訊框包含以下 8 位元資料:1 1 0 1 0 1,其中「1」的總數為 4。如果使用偶校驗,則訊框的校驗位元為 0,因此「1」的總數仍然是 4。如果使用奇校驗,則訊框的校驗位元為 1,因此「1」的總數為 5。如果未指定校驗位,則傳輸過程中不會進行校驗和偵測。

2)大腸直腸癌檢測

CRC校驗法用於計算錯誤校驗碼,它會檢查所有傳輸的資料。 CRC校驗法忽略了訊息中單一字元資料的奇偶校驗。

循環冗餘校驗 (CRC) 欄位佔用兩個位元組,包含一個 16 位元二進位值。 CRC 值由傳送設備計算並附加到資料幀中。接收設備在接收到資料後重新計算 CRC 值,並將其與接收到的 CRC 欄位中的值進行比較。如果兩個值不相等,則表示發生了錯誤。

CRC校驗首先將暫存器的全部16位置為“1”,然後將兩個相鄰的8位元組的資料放入目前暫存器。每個字元僅使用8位元資料產生CRC校驗值,起始位元、停止位元和奇偶校驗位元不計入CRC校驗值。

產生 CRC 時,每個 8 位元位元組都會與暫存器的內容進行異或運算,並將結果向低位元移動,高位元則補零。最低有效位元 (LSB) 被移出並偵測。如果 LSB 為 1,則將暫存器與預設的固定值進行異或運算。如果 LSB 為 0,則不進行任何操作。

上述過程重複進行,直至完成 8 次移位操作。在移位最後一位(第 8 位元)後,將下一個 8 位元位元組與暫存器的目前值進行異或運算。重複執行其餘 8 次移位異或運算。當資料幀中的所有位元組都處理完畢後,產生的最終值即為 CRC 值。

產生 CRC 的過程如下:

① 將一個 16 位元暫存器預設為 0FFFFH(全 1),稱為 CRC 暫存器。

② 將資料幀中的第一個 8 位元位元組與 CRC 暫存器中的低位元組進行異或運算,並將結果儲存回 CRC 暫存器。

③ 將 CRC 暫存器向右移動一位,最高位元填入 0,最低位移出進行偵測。

④ 若最低位為 0:重複步驟 3(下一次移位)。若最低有效位元為 1:將 CRC 暫存器與預設固定值 (0 A001H) 進行異或運算。

⑤ 重複步驟 3 和 4,直到移位 8 次。這樣,就處理完了完整的 8 位元資料。

⑥ 重複步驟 2 至 5 處理下一個八位元組,直到所有位元組都處理完畢。

⑦ 最終的 CRC 暫存器值即為 CRC 值。

CRC 值附加到資訊後,低位在前,高位在後。