author
Bobby Brown
更新 2024-12-02
Modbus 通訊協定是什麼?Modbus RTU一次搞懂

本文目錄


一、通訊協定 Protocol 是什麼?

通訊協定(Communication Protocol)也稱為通信協議,用來規定工業自動化領域中,不同設備之間數據交換方式。簡單來說,通訊協定就像成電子設備間溝通的語言,生活中溝通時,如果我們聽不懂對方的語言,就無法理解對方在講什麼。工業電子設備也是一樣,當它們之間的通訊協議不同時,就無法傳遞資訊。

二、Modbus 通訊協定是什麼?

通訊協定有很多種,Modbus 是其中一種在工業自動化中相當普及的協定。好比一種共同語言,讓不同的設備能夠相互通信。
就像人類溝通不僅要語言來表達內容,還需要空氣作為聲音的傳播媒介,電子設備之間除了需要通訊協定來規定數據的交換方式,還必須有通信標準 (Communication Standards)定義語法、語義及格式,才能有效地傳輸信號。
工業通訊常聽到的RS232、RS485、RS422、乙太網路 (Ethernet)、rs232 等都屬於實體層-「通信標準 (Communication Standards)」,而 modbus 是一種「通訊協定(Communication Protocol)」可以在不同的實體層上應用於不同場景,並依據需求,使用不同的通信協定來交換數據,本篇文章將進一步細說Modbus通訊協定。
 
[1]

三、Modbus 通訊協定種類

Modbus RTU vs Modbus TCP
Modbus 通訊協定根據使用的通信標準可分為串行通信和乙太網路通信兩大類型。
串型通信也就是數據按位元逐一傳輸,包括Modbus RTU及Modbus ASCII兩種協定:
1. Modbus RTU :通信標準為串行通信,使用二進位制編碼進行數據傳輸,常搭配 RS232、RS485、RS422 電纜串行接口,適合短距離、多設備的應用。在目前業界較常見。
2. Modbus ASCII :通信標準為串行通信,使用美國標準通訊交換碼 (ASCII) 進行數據編碼,常搭配 RS232、RS485、RS422 電纜串行接口,。由於ASCII編碼被廣泛使用在電子系統中,且轉換為人類可讀取的文字方法單純,易於手動檢查,但需耗費較大儲存空間。
3. Modbus TCP :通信標準為乙太網路通信,基於 TCP/IP 協定,通過網路電纜或無線網路來傳輸數據,常用於需要網路連接的自動化設備或遠端監控系統。
Modbus RTU 和 Modbus ASCII 的實際傳輸速度並不一定是RTU比ASCII快,傳輸速度主要取決於所使用的串行接口(如RS232、RS485等)的波特率設置。Modbus RTU 的優勢在於它使用的是二進制格式,編碼更加緊湊,數據量較小,適合在帶寬受限的環境中使用;而Modbus ASCII採用ASCII字符編碼格式,每個字節被分為兩個ASCII字符表示,導致信息量大,傳輸數據較慢。

[2][3]

四、為什麼許多PLC選擇使用 Modbus 協議?

許多廠商PLC 選擇使用 Modbus 通訊協議,首先是因為Modbus 結構簡單,且無需授權即能免費使用。
除了結構簡單、免費授權,Modbus在實際應用上的一大優勢,是它支援多種接口(如 RS232、RS485 和 TCP/IP),並適用於各種物理層傳輸方式(雙絞線、光纖和無線等)。
第三章節有提到,Modbus協議有分不同種類,他們分別可以搭配不同網路,像是在現場總線方面,Modbus-RTU、Profibus、CC-Link和CAN主要透過RS485網絡進行通信,可支援主從架構或控制器與設備、節點之間的連接。
而在以太網環境下,Modbus-TCP、PROFINET、EtherCAT和EtherNet/IP等協議則可以完成客戶端與服務器,或控制器與設備之間的高效通信。
總體來說,Modbus對乙太網和RS485網絡的兼容性很好,非常適合工業自動化系統的需求,也因此Modbus現在成為許多廠商 PLC 的首選通訊協議。
協議類型 協議名稱 網路 角色
工業乙太網 Modbus-TCP 乙太網 客戶端和服務器
ProfitNET 乙太網 控制器和設備
EtherCAT 乙太網 主站和從站
EtherNet/IP 乙太網 控制器和設備 
工業現場總線 Modbus-RTU RS485 主站和從站 
Profubus  RS485 主站和從站
 CC-Link RS485  主站和從站
 CAN RS485 控制器和節點 

*常見協議與其功能角色

[4]

五、Modbus RTU 運作原理?

Modbus RTU 通訊協定以「主從架構」定義交換數據的方式,也就是所有的數據交換和通信是由一個主設備(master)來控制和發起,並且有一個或多個從設備(slave)負責接收和回應主設備的指令。
當主設備(Master)向從設備(Slave)發送請求時,這個請求中會包含一個指定的從站位址。這個位址用來告訴所有的從站,這個指令是發給哪一台設備的,每台從站都會接收到請求,但只有指定位址的從站會回應。
比方說假設有三台從站,位址分別是 1、2 和 3:
  • 如果主設備發出請求給位址 2 的從站,那麼位址 2 的從站會回應,其他位址的從站則不回應。
  • 如果使用廣播模式(請求中的從站位址為 0 時),則所有的從站(1、2、3)都會執行這條指令,但都不會回應主設備。
  • Modbus RTU 主從架構

    5-1、Modbus 通訊封包

    在Modbus RTU通訊中,封包結構包含以下幾個部分:
    • 地址:用於標識接收命令的從站地址。
    • 功能碼:表示需要從站執行的操作,如讀寄存器或寫寄存器等。
    • 數據:包含與請求相關的數據,如需要讀取或寫入的寄存器地址和數量。
    • 錯誤校驗碼(CRC校驗):用於確保數據在傳輸過程中沒有被破壞。(Modbus TCP則使用類似的封包結構,但不使用CRC校驗,而是依賴TCP/IP層的校驗。)
    • *第六段將有實例解釋。
    [5]

    5-2、Modbus 協議的數據暫存器類型

    (以下內容根據Modbus Tools, iT幫幫忙-Modbus RTU簡介整理而成,更詳細的暫存器類型、功能碼說明,請參考資料來源)
    Modbus 協議將數據存儲區分為四大類,根據功能碼來管理不同類型的數據:
    • 離散輸入(Discrete Inputs):只讀的二進制輸入數據,對應功能碼 0x02,用於讀取設備的狀態。
    • 線圈(Coils):可讀寫的二進制輸出數據,對應功能碼 0x01,常用於控制設備開關。
    • 輸入寄存器(Input Registers):只讀的模擬輸入數據,對應功能碼 0x04,用於監控傳感器或其他輸入設備。
    • 保持寄存器(Holding Registers):可讀寫的模擬量數據,對應功能碼 0x03 和 0x06,通常用來設置設備參數或狀態。
     
    [6]

    5-3、Modbus 功能碼 不同的功能碼及其操作

    Modbus 協議定義了許多功能碼,這些功能碼控制著設備如何讀取或寫入數據。常見的功能碼及其應用如下:
    1. 0x01 - 讀線圈狀態(Read Coils):讀取設備的開關狀態,常用於監控開關或繼電器。
    2. 0x02 - 讀離散輸入狀態(Read Discrete Inputs):監控設備的二進制輸入,例如按鈕或傳感器狀態。
    3. 0x03 - 讀保持寄存器(Read Holding Registers):監控設備的運行參數或狀態,常用於讀取設備的設置或運行數據。
    4. 0x04 - 讀輸入寄存器(Read Input Registers):用於監控模擬量輸入,例如溫度、壓力等傳感器數據。
    5. 0x05 - 寫單個線圈(Write Single Coil):控制單個設備的開關狀態。
    6. 0x06 - 寫單個保持寄存器(Write Single Holding Register):修改設備參數,例如速度或溫度設定。
    7. 0x0F (15) - 寫多個線圈(Write Multiple Coils):一次控制多個設備的開關狀態。
    8. 0x10 (16) - 寫多個保持寄存器(Write Multiple Holding Registers):同時設定多個設備的運行參數。
     

    5-4、什麼是Modicom Format?

    Modicom Format 是規定 Modbus 的位址編號格式,Modicom Format 通過使用特定的位址編號範圍,將不同的寄存器類型與功能碼對應起來。
    這樣設計的目的是:讓操作人員只需輸入位址,不必手動指定功能碼,如此可以減少操作錯誤並讓通訊更便捷。
     
    原始資料參考:Modicon Modbus Protocol Reference Guide

    5-5、Modbus功能碼,位置加40001 / 30001是什麼意思呢?

    根據Modicom Format,Modbus 透過不同的位址範圍來標識不同類型的寄存器,例如範圍30001-39999是輸入寄存器(功能碼04),40001-49999是保持寄存器(功能碼03)。當使用者輸入一串代碼時,Modbus 的位址編碼已經定義好了這些邏輯關係。

    +40001 什麼意思?
    根據Modicom Format,我們知道40001-49999是Modbus功能碼03 保持寄存器(Holding Registers)的地址範圍。 功能碼03的邏輯:將「40001」作為基底,讀取時,從這裡開始計數,40001 代表第 1 個寄存器,偏移量是0000,讀取位置是0000。
    當使用者輸入40005時,Modbus 會自動識別 40001 至 49999 的範圍對應功能碼 03 保持寄存器,並依照位置編碼邏輯,辨別40005=0004+40001,讀取功能碼03的0004號位置。

    Modbus功能碼
    [7]

    六、以PLC與流量計間使用RS485及Modbus RTU實施流量監測

    在Modbus協議中,每個數據字段都有特定的含義和位置,使用者需輸入一串代碼,分別表示:「從站地址、功能碼 (讀取輸入寄存器)、寄存器地址、要讀取的寄存器數量 、CRC 校驗碼」,Modbus主機在接收到這些數據後,會依照Modbus規範的格式逐一解析各個字段,以確認要對目標從站進行的操作,如讀取或寫入寄存器。以下以PLC與流量計間使用RS485及Modbus RTU實施流量監測作為施作範例:
    硬體設置:確保流量計和PLC 都具備 RS485 接口,並支持 Modbus RTU 通訊。將 PLC 和流量計通過 RS485 通訊線路連接在一起。
    Modbus RTU 設置與程序設計:設定流量計的 Modbus 位址(如從站地址)和波特率等參數,在 PLC 中設定相應的 Modbus 主站功能,並定義主站要讀取的數據,確保 PLC 和流量計的通信參數(波特率、數據位、停止位、校驗位)匹配。
     
    電腦操作示意圖
    流量計通過 RS485 接口將數據傳送到 PLC,PLC 使用 Modbus RTU 協議讀取流量計的數據,並在電腦監控介面上,實時顯示流量計傳回的數據曲線。
    在 Modbus RTU 通訊中,Modbus 通訊封包包含地址域、功能碼、數據域、錯誤校驗碼(CRC校驗),TX 代表傳輸的請求訊號,RX 則是回傳的訊號。
    請求訊號 TX 01 04 00 64 00 01 70 15
    01:從站地址 (slave address)。
    04:功能碼 (讀取輸入寄存器)。
    00 64:寄存器地址 (位址 100)。
    00 01:要讀取的寄存器register數量 (1 個)。
    70 15:CRC 校驗碼,用來檢查數據正確性。
    回傳信號 RX 01 04 02 04 00 BB F0
    01:從站地址,表示回應來自位址為 1 的設備。
    04:功能碼,表示這是「讀取輸入寄存器」的回應。
    02:後面的數據長度,表示回傳的數據有 2 個字節byte。
    00 BB:回傳的數據值,16 位元的數據,十六進制表示為 00BB,轉換為正十進制為 187。
    F0:CRC 校驗碼,檢查封包的正確性。
    這些流量數據還可以透過閘道器轉換成其他協定(如 Modbus TCP)或實體層(如wifi),通過乙太網路傳輸到遠端伺服器,並儲存在雲端,遠程監控生產狀況,進行自動化數據報告。譬如說,當流量數據異常時,系統可以自動通過通知系統發送警報,如此便能進一步提升生產效率和便利管理。
    [8]

    參考資料

    1. ^ 帶你認識物聯網 Modbus 通訊協議-WARREN LO
    2. ^ Modbus协议的通信方式有几种 - 小頭菜
    3. ^ Understanding Modbus Protocol - RTU vs TCP vs ASCII - OPS Telecom
    4. ^ Modbus RTU 通訊協定介紹 - 力誠科技
    5. ^ Modbus RTU簡介(上) - iT 幫幫忙
    6. ^ Modbus协议数据类型只有这四种 - 小頭菜
    7. ^ MODBUS 位址加40001 / 30001,為什麼就可以不用輸入功能碼? - PLC
    你可能也會感興趣
    相關文章
    Bobby Brown    2023-8-8
    Bobby Brown    2023-8-8
    Bobby Brown    2023-8-8

    聯絡我們