Leave Your Message
新聞類別
專題新聞

Modbus協定全面指南:從訊息和暫存器到現場診斷-詳細解釋

2026-06-16

Modbus 乍看之下似乎很簡單,但要掌握其全部功能,就需要理解主從關係、暫存器位址、功能碼、RTU/TCP 封包以及現場故障排除方法。本文將使用專業術語清晰地解釋這些概念。

如果您曾經使用過 PLC、變頻器、儀器、電錶、恆溫器、觸控螢幕或使用主機的資料擷取系統,那麼您必然會遇到一種協定:Modbus。

與強調即時控制的Profinet或EtherNet/IP不同,也與資訊模型複雜的OPC UA不同,Modbus具有簡潔明了的特點:結構簡單、資料規範豐富、設備相容性強,以及調試工具齊全。正因為其簡潔性,許多用戶最初會產生誤解:「難道不就是讀取幾個寄存器嗎?」然而,在實踐中,真正的挑戰往往不在於能否讀取寄存器,而在於確定地址應該從0還是從1開始。

  • 寄存器 40001 和 0 之間是什麼關係?
  • 在功能代碼 03 和 04 中,我應該使用哪一個?
  • 為什麼RTU中的CRC值總是不同?
  • RS-485 接線正確-為什麼通訊仍然不穩定?
  • 為什麼讀取32位元浮點數時會顯示不穩定的數值?
  • 儘管 Modbus TCP 可以建立連接,但為什麼資料傳輸經常出現逾時?本文從現場應用的角度對 Modbus 進行了全面的解釋。

Modbus 應用架構圖

2-1.jpg

1.Modbus究竟是什麼?

Modbus 是一種工業通訊協議,最初由 Modicon 公司開發用於 PLC 應用,如今已成為工業領域應用最廣泛的開放協議之一。它以「問答規則」的形式運作:一端發送請求,另一端依約定傳回資料。例如:• 主機向儀表詢問:目前 A 相電壓是多少?

  • PLC詢問變頻器:目前工作頻率是多少?
  • 人機介面詢問溫度控制器:目前溫度和設定溫度分別是多少?
  • 此網關從多個儀器收集數據:測量電流、電壓、功率和電能。

在 Modbus RTU 中,常用的術語是「主站」和「從站」:主站發起請求,而從站被動回應。在 Modbus TCP 中,「客戶端」和「伺服器」這兩個術語現在也廣泛使用。基本原則保持不變:一個請求對應一個回應。請記住這個關鍵點:Modbus 既不是電纜也不是接口,而是一種資料通訊協定。 RS-485、RS-232 和乙太網路用作通訊介質;Modbus RTU、Modbus ASCII 和 Modbus TCP 代表協定的具體實作。其中,Modbus RTU 和 Modbus TCP 在現場應用中最為普遍。

2.Modbus RTU、ASCII 和 TCP 有什麼不同?

Modbus 通常有三種變體。 Modbus RTU 最常用於串列通訊環境,運行在 RS-485 總線上。它採用高效的二進位資料傳輸,並在訊息末尾添加 CRC 校驗和,因此廣泛應用於儀表、溫控器、變頻器、感測器和資料擷取模組。 Modbus ASCII 也支援串行通信,但使用 ASCII 字元表示數據,導致訊息長度更長、效率更低;它在新現場專案中已不常見,主要用於傳統設備或特殊應用。 Modbus TCP 透過乙太網路運行,通常使用 502 端口,它取消了 RTU 中的 CRC 校驗,並添加了 MBAP 標頭來指定事務、訊息長度和單元標識。它廣泛應用於 SCADA 系統、PLC、網關、能源管理系統和上層資料採集系統。主要比較:• RTU:適用於 RS-485 多點匯流排,提供經濟高效的佈線和中等速度效能。

  • TCP:適用於以太網,提供易於設定、高速以及與交換器和上層系統的兼容性。
  • ASCII:可讀性高但效率低,在新專案中很少使用。

建議初學者先學習RTU和TCP。

3理解主奴關係:

Modbus的基本邏輯很簡單。

1.主站發送請求,從站回應。

  1. 請檢查網站的位址、功能代碼和資料。
  2. 收到伺服器的正常或異常回應。
  3. 主站繼續讀取下一則訊息。

在RTU總線上,任何給定時間只能有一個主站主動發送請求。從站不能主動發送資料;它們必須等待主站的請求-這是一項關鍵要求。有些人誤以為“儀器會在數據可用時自動將其發送到PLC”,但這並不符合Modbus RTU的功能。

PLC 依照預先定義的輪詢計劃,逐個裝置、逐段地順序讀取資料。

因此,在進行場地設計時,必須考慮以下因素:

  • 有多少台設備連接到總線上?
  • 每個設備讀取多少個暫存器?
  • 什麼是波特比率?
  • 輪詢週期應該要多快?
  • 如何配置超時和重試次數限制?

當多個裝置連接到 RS-485 匯流排並頻繁讀取大量暫存器時,通訊速度較慢是正常的。

  1. Modbus 資料模型定義了四個不同的物件類別。

與傳統協議僅簡單地聲明「我想讀取溫度」不同,Modbus 協議明確規定了應從特定位址讀取哪種類型的資料。它包含四個標準資料欄位:

  • 線圈:可讀/可寫入的布林值,通常用於啟動/停止、重設和切換命令。
  • 離散輸入:唯讀布林值,通常用於表示開關狀態或故障狀態。
  • 輸入暫存器:一個 16 位元只讀暫存器,通常用於儲存測量值。
  • 保持暫存器:一個可讀寫的 16 位元暫存器,通常用於儲存參數、設定值和運行資料。現場應用中最常用的寄存器是保持寄存器和輸入寄存器。例如,儀表手冊可能會指定:• 電壓:保持暫存器 40001
  • 目前:持有登記冊 40003
  • 電源:輸入暫存器 30021
  • 設備位址:持有暫存器 40010。

在這種情況下,不僅要檢查數值,還要確定它們各自的資料類別,因為不同的資料類別對應於不同的功能代碼。

  1. 功能代碼“動作命令”

Modbus 中的功能碼決定了主站應該執行的操作。常見的功能碼包括:

  • 01:讀取線圈狀態。
  • 02:讀取離散輸入。
  • 03:讀取保留暫存器。
  • 04:讀取輸入暫存器。
  • 05:寫出單線圈的情況。
  • 06:寫入單一保持暫存器。
  • 15:寫多個線圈。
  • 16:寫入多個維護暫存器。

以下是一些實際例子:

  • 讀取逆變器的工作頻率:通常使用代碼 03 或 04。
  • 設定逆變器的頻率:通常設定為 06 或 16。
  • 讀取設備的運作狀態:可能使用代碼 01、02、03 或 04;請參閱手冊。
  • 控制繼電器模組的特定輸出通道:使用 05 或 15。

功能碼的選擇不應憑直覺,務必參考設備的通訊手冊。有些裝置將測量值儲存在輸入暫存器中,只能使用功能碼 04 讀取;而有些裝置則將相同的資料儲存在保持暫存器中,可以使用功能碼 03 讀取。使用錯誤的功能碼可能會導致裝置直接傳回錯誤或完全無回應。

     6註冊地址:

 Modbus現場應用中最常見的陷阱不在於接線,而是在尋址。可能會遇到以下幾種格式:

  • 40001
  • 400001
  • 0000H
  • 地址 0
  • 地址 1
  • 持有登記冊 1

這些可能指同一個登記簿,也可能指不同的登記簿。

關鍵在於區分「邏輯編號」和「協定位址」。在許多手冊中,40001 是一個可手動讀取的暫存器編號,用於識別暫存器區域中的第一個暫存器。

然而,Modbus 訊息中包含的實際起始位址通常是 0。

換句話說:

  • 手冊上規定輸入 40001,但軟體可能需要輸入 0。
  • 手冊要求輸入 40002,而軟體可能要求輸入 1。
  • 有些家用設備手冊指定位址為 1,數值也必須輸入軟體中。
  • 有些工具軟體會自動處理 40001 前綴,而有些則不會。

因此,在排查位址問題時,最實用的方法是先使用偵錯工具讀取已知會變化的暫存器,然後分別測試從零開始的位址和從一開始的位址,以確定哪個位址會產生有效值。

不要一次讀取大量數據,並避免從複雜的浮點數開始。為了方便識別,請先讀取簡單的數據,例如裝置位址、波特率、狀態字和版本號。

7.訊息結構:RTU 和 TCP 訊息的結構是怎樣的?

理解資訊的關鍵不在於手動計算每一幀,而是在故障排除過程中確定問題所在。

Modbus 訊息結構圖

3-1.jpg

Modbus RTU 請求範例假設主站需要從 1 號從站的位址 0 開始讀取兩個保持暫存器。該訊息可解釋為:01 03 00 00 00 02 C4 0B,其中:• 01:從站位址。

  • 03:功能碼;讀取保持暫存器。
  • 00 00:起始位址。
  • 00 02:讀取數量;2 個暫存器。
  • C4 0B:CRC16 校驗;低位元組在前。

如果從站正常回應,它可能會返回:01、03、04、00、FA、13、88、D7 或 54。它們的意義是:• 01:從站位址。

  • 03:功能代碼。
  • 04:剩餘資料位元組數,4 位元組。
  • 00 FA:第一個暫存器,十進位值為 250。
  • 13 88:第二個暫存器,十進位值為 5000。
  • D7 54:CRC16校驗。

RTU封包中最容易出錯的欄位是CRC校驗碼、位址、波特率、奇偶校驗位元和位元組順序。 Modbus TCP請求結構以MBAP頭部開始,後面跟著PDU。

MBAP 通常包括: • 交易識別碼:用於匹配請求和回應的唯一識別碼。

  • 協議標識符:協議標識符;Modbus 通常使用 0。
  • 長度:後續位元組的長度。
  • 單元標識符:單元標識符,通常用於網關將流量轉送到串行從設備。

TCP協定在RTU資料包末端不包含CRC欄位。由於它是基於TCP/IP協議,鏈路層和傳輸層都已具備自身的校驗機制;因此,Modbus TCP訊息結構不再包含RTU使用的CRC欄位。

8.資料類型:16 位元只是起點

Modbus 暫存器本質上是 16 位元的,但現場資料並不總是 16 位元整數。許多裝置會將更複雜的資料拆分到多個暫存器:• 16 位元無符號整數。

  • 一個 16 位元有符號整數。
  • 32 位元整數。
  • 32 位元浮點數。
  • 64 位雙精度或累積值。
  • 一個帶乘數的整數。

例如,如果電錶手冊規定電壓為 40001,資料類型為 UINT16,比例因子為 0.1,則讀數 2301 對應的實際值為 230.1 V。

考慮一個使用兩個暫存器來表示 32 位元浮點數的流量計。讀取四個位元組時,有幾種可能的解釋:• AB CD:標準的高位在前。

  • CD AB:小寫字母在前。
  • BA DC:位元組交換。
  • DC BA:字元和位元組都會被交換。

Modbus 規定暫存器中高位元組應排在最前面;但是,當多個暫存器形成 32 位元或 64 位元資料流時,不同的製造商可能會以不同的方式處理位元組順序。

因此,當遇到錯誤的浮點數值時,不要立即斷定協定有缺陷。首先應參考手冊中的資料類型、縮放因子、位元組順序和字順序等相關內容。

  1. 典型應用案例

Modbus之所以被廣泛使用,是因為它在涉及資料收集、配置和監控的各種場景中表現出色。

功率計和能耗採集裝置

其中包括智慧電錶、多功能電錶、電能品質分析儀和溫濕度感測器,其中許多都支援 Modbus RTU 或 TCP 協定。主機、閘道或 PLC 可以讀取電壓、電流、功率、功率因數、能耗和頻率等資料。

這些應用廣泛用於工廠能源消耗管理、電力分配監控和工業園區能源系統。

變頻器和軟啟動器

PLC 可以透過 Modbus 讀取變頻器的狀態、故障碼、輸出頻率和電流,也可以寫入啟動/停止指令和頻率設定點。

但是請注意,變頻器通訊控制通常需要正確配置參數。指令來源、頻率來源、通訊位址、波特率、奇偶校驗位元和逾時保護等參數都必須設定一致。

T止血鉗、流量計和壓力變送器 

儀表設備通常使用 Modbus 協定傳輸測量值,並支援寫入設定值、警報閾值和控制參數。雖然這些設備的監測點有限,但它們的位址表可以進行非常詳細的配置。

調試過程中,最好按照手冊逐項進行驗證。

PLC、HMI、SCADA系統和網關

人機介面(HMI)可以透過Modbus協定讀寫PLC資料。監控與資料擷取系統(SCADA)可以使用Modbus TCP協定從多個控制器或閘道擷取資料。序列伺服器和協定閘道可以將Modbus RTU訊號轉換為Modbus TCP訊號。

然而,網關並非通用轉換器。它負責處理通訊傳輸和轉發問題,但無法自動理解每個裝置暫存器的含義。點表仍需手動配置。

  1. 現場佈線和參數配置

Modbus RTU 通常使用 RS-485 匯流排。故障排除時,先檢查下列項目:• A/B 線是否接反。

  • 每個從站的地址都是唯一的嗎?
  • 埠比例是否穩定。
  • 資料位元、停止位元和奇偶校驗位是否一致?
  • 母線端是否需要終端電阻?
  • 屏蔽層和接地是否正確實施。
  • 支線是不是太長了?
  • 檢查電源線和通訊線是否有嚴重干擾。 RS-485 建議使用匯流排式佈線;不建議使用分支過多的星形佈線。當電纜長度較長、設備數量較多或乾擾嚴重時,端子電阻、屏蔽、接地和隔離就顯得特別重要。

Modbus TCP 主要檢查:• IP 位址是否在同一網段。

  • 502埠開放嗎?
  • 該設備是否支援多個客戶端同時連線?
  • 是否填寫單元 ID。
  • 網關映射關係是否正確?

11故障排除清單:從簡單到複雜 

如果 Modbus 通訊失敗,請依下列順序進行故障排除:首先,檢查實體層:• 對於 RTU,檢查接線、電源、A/B 端子、屏蔽和端子電阻。

  • TCP會檢查網路線、IP位址、閘道、連接埠和交換器。

重新確認通訊參數:• 從站位址。

  • 波特率。
  • 資料位、奇偶校驗位、停止位。
  • TCP連接埠和單元ID。然後驗證協定層:• 功能碼是否正確。
  • 起始位址是否正確?
  • 讀取次數是否超出範圍?
  • 收銀區域是否已正確選擇?
  • 是否已啟用寫入權限或通訊權限?

最終資料驗證:• 放大倍率的存在。

  • 有編號標誌。
  • 32 位元或 64 位元資料的字序。
  • 該單位是否一致?
  • 狀態字是否需要逐位解析。

排除故障時,有一個很好的做法:不要從對 PLC 進行程式設計開始。

首先,使用 Modbus 調試工具直接讀取設備。如果工具連接成功,則繼續設定 PLC 或上位機。如果工具連線失敗,則優先檢查接線、參數、位址表和設備手冊。

Modbus輪詢和故障診斷流程圖

4-1.jpg

      12.在進行專案工作時,積分錶應以此方式組織。

Modbus 專案最關鍵的問題是點表混亂。

建議每個項目至少組織以下欄位: • 設備名稱。

  • 通訊方式:RTU 或 TCP。
  • 從屬位址或 IP 位址。
  • FC。
  • 註冊類型。
  • 起始位址。
  • DL。
  • 資料類型。
  • 倍增效應。
  • 單元 。
  • 讀/寫權限。
  • 位元組順序或字元順序。
  • 評論 。

點表並非只是一份形式化的文件;它直接影響PLC程式、HMI介面、SCADA變數、資料庫欄位以及後續的維護工作。許多現場通訊問題最終並非源自於協定缺陷,而是源自於組織混亂的點表。

13.Modbus 的優點和限制 Modbus 的優勢顯而易見:

  • 簡單。
  • 打開。
  • 資訊豐富。
  • 廣泛的設備相容性。
  • 提供多種調試工具。
  • 非常適合小規模資料收集和監測專案。
  • 然而,它也有其限制:
  • 資料語義較弱——它只能識別地址和值,但缺乏業務上下文。
  • RTU輪詢效率有限,因此不適合大規模高速即時控制應用。
  • 標準協議本身並不包含複雜的安全機制。
  • 當在不同製造商生產的多個設備上使用時,地址、放大倍率和詞序很容易混淆。
  • 對異常情況的診斷能力有限,許多問題需要根據臨床經驗進行調查。
    因此,Modbus 適用於資料擷取、監控、參數配置和低速控制,但不應被視為所有工業網路的通用解決方案。
    對於需要高即時運動控制、複雜設備互連、大規模資料建模、安全認證和跨系統整合的應用,可能需要考慮 Profinet、EtherNet/IP、EtherCAT、OPC UA、MQTT 或製造商特定協定等選項。

總而言之,Modbus 的入門門檻低,但要穩定運行,需要理解以下四個關鍵原則:

主站發送請求,從站回應-不要將此誤認為是主動設備報告。

其次,暫存器位址必須與功能碼相符;在軟體中設定 40001 並不一定意味著它應該對應到這個值。

第三,對於 RTU,重點在於序列埠參數、RS-485 接線和 CRC;對於 TCP 設備,優先考慮 IP 位址、連接埠號碼、單元 ID 和網關對映。

第四,讀取資料只是第一步-數值的準確性完全取決於取樣率、資料型別、位元組順序和單位配置。

如果您是工業通訊領域的新手,Modbus 是絕佳的入門選擇。它足夠簡單,可以幫助您掌握通訊的基本原理,同時又廣泛應用於各種設備,例如電錶、變頻器、儀器儀表、PLC、HMI 和 SCADA 系統。

首先要徹底掌握 Modbus;了解其他工業協議將使你的學習過程更加順暢。現在我們可以進行更詳細的講解:RS-485 總線接線、Modbus 偵錯工具的使用、PLC 從變頻器讀取資料、智慧電錶資料擷取、Modbus TCP 閘道配置以及如何組織通訊點表。