帶你認識物聯網 Modbus 通訊協議(一)

更新於 發佈於 閱讀時間約 8 分鐘
The Modbus Protocol

The Modbus Protocol

在上一篇文章裡,我們在聊智慧工廠的四個迷思的時候,有聊到了SCADA 這個數據搜集與監看系統,現代的工廠也因為有了 SCADA 這套系統加持所以可以很快把底層數據跟上層的資訊系統勾串在一起,瞬間把各種遠端的生產設備、感測器等數據訊息搜集到電子看板上。那麼 SCADA 系統究竟是怎麼做到同時跟這麼多不同類型的裝置通訊的呢?此時就不得不提 Modbus 通訊協議。

Modbus 是一種定義在通訊應用層的協議,會根據資料跑在不同的實體介面上而有不同的「版本」,例如:應用在 RS232/RS485 串列埠介面的就是 Modbus RTU/ASCII,應用在 TCP/IP 的就是 Modbus TCP 也 SCADA 的主要應用協議。我們從 Modbus 發展的時序來看的話, RTU/ASCII 版本是早於 TCP 版本的,接下來我們就來聊聊跟 Modbus 通訊協議的幾個相關主題,盡量用平易近人的方式來介紹這套通訊協議給大家,暫定需要兩到三篇,第一篇會先談三個部分,包含:

  1. 機器通訊的原理,簡單說明機器通訊是如何運用實體線路通訊的具體方式
  2. 機器語言會用到的資料表示方法,包含二進位跟十六進位表示法
  3. 介紹主從式 Master-Slave 的通訊架構

機器的通訊原理

在無線網路還沒被發明出來前,電腦們都是透過網路卡加網路線來交換資料的。網路卡就是通訊介面,網路線就是通訊線。現在工廠裡大部分的機器設備也都有類似網路孔的通訊介面。而最簡單的通訊架構,例如 I2C 就只要兩條電線就能進行通訊了。在通訊介面上會定義 RX/TX 兩個端口,R 就是 Receive 接收的意思,T 就是 Transmission 傳送的意思,所以接線的時候要把發送端 TX 與接收端 RX 互相連接起來,兩台裝置就可以互相通訊了。 換句話說,假設有 AB 兩台裝置,就把 A 裝置的 RX 接到 B 裝置的 TX,同時把 A 裝置的 TX 接到 B 裝置的 RX。

RX / TX 要對接才會通,圖片參考出處

RX / TX 要對接才會通,圖片參考出處

設備裝置是透過電子訊號來溝通的,就像我們的聲音是透過空氣振動傳播聲音一樣,實體線路是用來傳輸電子訊號的媒介,機器裝置透過控制訊號線上的電壓變化來通訊,例如 RS232 就是利用產生 5V 或 0V 的訊號變化來通訊,我們可以在訊號線的發送跟接收兩端掛一台示波器來監看,當訊號在傳輸的時候,我們就會看到一個由 5V 跟 0V 交替出現隨時間變化的方波訊號。只要是利用實體線路通訊的裝置,基本上都是利用不同的電壓差來通訊,方法類似。關於硬體的底層通訊原理你只要記得,裝置靠的就是控制電壓差的方式來通訊就可以了。

方波訊號示意圖,圖片參考出處

方波訊號示意圖,圖片參考出處

認識簡單的計算機結構

自從馮紐曼定義了計算機的架構就是 0 與 1 後,從此就規定計算機的未來不管怎麼發展,內部狀態永遠只有 0 跟 1。所以如果想要在計算機裡面的儲存資訊的話,不管內容簡單或複雜,最後都必須被編碼變成 1 跟 0 的排列組合,機器才會看得懂。由於機器們的自然語言就只能用 0 跟 1 兩個字母來表達,所以只用 0,1 表達的方式就叫做「二進位」表示法。

當裝置 A 要需要跟裝置 B 通訊的時候,A 就會把訊息編碼成類似 010010011101 的樣子再傳給 B, B 的回應也必須是二進位表示。由於能控制電壓的訊號變化通訊線只有一條,單位時間內就只能有 A 或 B 可以發送訊息。訊息由多個 0,1 組成,每次就只能傳送一個 bit 0 或 1,傳輸動作開始後會持續到所有內容全部傳輸完畢為止。為了區分好每一個 bit 是 0 或 1,電壓訊號發出後會持續一小段時間,每個 bit 間也需要固定的時間間隔。我們假設訊號發出的持續時間 2ms 與 bit 時間間隔 1ms,那麼要傳遞 1101 這 4 個 bit 的訊號就會是: 5V(2ms), 0V(1ms), 5V(2ms), 0V(1ms), 0V(2ms), 0V(1ms), 5V(2ms), 0V(1ms)。用二進位方式通訊的 Modbus 就叫做 Modbus RTU,RTU 是 Remote Terminal Unit 就是遠端端終端裝置。

二進位 Binary 轉十六進位的 ASCII

二進位表示法對機器來說是最有效的溝通方式。當然,使用二進位表示法的缺點也很明顯,就是對人來說很不友善。當我們想要一次傳很多資訊的時候,使用二進位表示法結果就是資訊長度爆表,要用人眼判讀非常困難,溝通效率就會變得很差。於是就有了把四個二進位 bit 合起來看的十六進位的表示的做法。

十六進位跟十進位很像,當記數到 16 的時候,就會往左進 1 位。採用十六進位記數除了沿用十進位的 0-9,還要加上 A-F 六個英文字母用來替代 10-15 這幾個數字。舉個例子:一個十進位的數字 58 用二進位表示是 111010 需要用 6 個 bit (8 bits = 1 byte),如果我們前面先補上兩個 0 變成 00111010 再每 4 個一組分成兩組 0011, 1010 就可以用十六進位改寫為 3A,是不是就精簡好讀很多呢?十六進位能夠用少的符號來表示更多的資訊。而用十六進位方式通訊的 Modbus 就叫做 Modbus ASCII,ASCII 是 American Standard Code for Information Interchange 也就是美國標準資訊交換碼。

Master-Slave,主從式架構

通訊的目的都是為了裝置間的資料交換,我們可以預設在一個通訊迴路上至少有兩台以上的裝置。一條跑 Modbus RTU/ASCII 的 RS485 的迴路按規定可以接 32 台裝置,迴路上的每一個裝置都會設定好 ID 做為識別,RTU/ASCII 走的是 Master-Slave 的通訊架構,什麼是 Master-Slave 架構呢?再次以 RS485 為例,不管通訊迴路上接了多少台裝置,一定要把其中一台設定為 Master,其餘的裝置設定為 Slave。只有 Master 裝置會主動發訊息,其餘的 Slave 裝置都不會主動發話,只會默默的等 Master 裝置來訪問它。

一個 Master-Slave 架構,圖片參考出處

一個 Master-Slave 架構,圖片參考出處

Master 跟 Slave 的對話模式是採取 request and response 也就是一問一答的形式,當通訊開始的時候 Master 裝置準備好要給某個 Slave 裝置的訊息,然後把訊息丟入迴路上開始傳遞,等對應 ID 的 Slave 接收到 Master 發來的訊息後,確認資料沒有問題後就會開始進行資料封包解析。Slave 完成任務後,會隨後再按照 Master 的指令內打包資料回傳給 Master。同理,等 Master 收到訊息確認無誤後,就完整了這一次的通訊。

一般來說,Master 會反覆從第一個 Slave 問到最後一個 Slave 不斷循環的問答過程就叫做輪詢。Master 用輪詢的方式會有個明顯的缺點,輪詢的時間會隨著 Slave 裝置增加而增加,比如說,在 RS485 的 32 個裝置全部接滿的狀況下,就有 31 個 Slave 裝置,假設每次問答一個 Slave 來回需要 200ms 的話,要完成一次輪詢最快也要 6.2 秒。只有一種情況會稍微好一點,就是所有的 Slave 都是相同類型的裝置,此時有實作廣播指令的 Master 裝置就可以一次發話給所有 Slave,來稍微減少一下通訊時間。

要照顧多個 Slaves 的 Master,圖片參考出處

要照顧多個 Slaves 的 Master,圖片參考出處

結語

看到這裡你可能會想,咦!這裡講了一堆硬知識,有電訊號如何傳輸、有計算機體底層,如何進制轉換跟接線架構是有什麼特別用途嗎?別急,說這些硬知識都是為了鋪「梗」,為了幫助我們先在腦中產生具體的畫面,接下來才能更好理解後面要講的通訊協議。相信我,只要有這些畫面很快你也能在生活中找到用來類比案例,這樣學習起來會更有效率。那我們就下一篇見。

留言
avatar-img
留言分享你的想法!
avatar-img
Warren Lo的沙龍
22會員
70內容數
WarrenLo's 軟體設計武功祕笈
Warren Lo的沙龍的其他內容
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
數位IC裡我們關注的都是0或1, 大家都知道電腦是0101在做二進位的運算, 在晶片裡又是怎麼做到的? 實際上我們在設計晶片時,會給他一個VDD跟GND, VDD-GND給的是預期的Driving volatge, 像是5V或9V 以5V為例 0或1物理上就是目前的電壓靠近0V或5
Thumbnail
數位IC裡我們關注的都是0或1, 大家都知道電腦是0101在做二進位的運算, 在晶片裡又是怎麼做到的? 實際上我們在設計晶片時,會給他一個VDD跟GND, VDD-GND給的是預期的Driving volatge, 像是5V或9V 以5V為例 0或1物理上就是目前的電壓靠近0V或5
Thumbnail
UART 轉換完成的 Serial 訊號已經可以用來傳輸通訊了,那為什麼還要把 UART 轉出來的訊號再轉換成成其他的 Serial 介面,像是 RS232/RS485 再進行傳輸呢?原因是 UART 的 Serial 訊號傳輸的距離實在太短了
Thumbnail
UART 轉換完成的 Serial 訊號已經可以用來傳輸通訊了,那為什麼還要把 UART 轉出來的訊號再轉換成成其他的 Serial 介面,像是 RS232/RS485 再進行傳輸呢?原因是 UART 的 Serial 訊號傳輸的距離實在太短了
Thumbnail
聊到 Serial 通訊就一定會提到 COM Port,它是微軟定義的一個經典 Serial 通訊實作。COM Port 在筆電還不普及的年代可以很輕鬆在 PC(桌機)的主機板上找到有標示 COM1 或者 COM2 的通訊接口,這些就是最常見的 COM Port 通常搭載的都是 R232 的通訊規格
Thumbnail
聊到 Serial 通訊就一定會提到 COM Port,它是微軟定義的一個經典 Serial 通訊實作。COM Port 在筆電還不普及的年代可以很輕鬆在 PC(桌機)的主機板上找到有標示 COM1 或者 COM2 的通訊接口,這些就是最常見的 COM Port 通常搭載的都是 R232 的通訊規格
Thumbnail
以前當 RD 在開發系統產品的時候需要控制很多硬體設備,韌體工程師有說硬體控制可以走自定義的通訊格式,需要搭配一張指令對照表,按表組成命令下給終端設備,設備們接收到正確的指令後才會做出正確的回應(對於不認識的指令,設備會只會已讀不回!)
Thumbnail
以前當 RD 在開發系統產品的時候需要控制很多硬體設備,韌體工程師有說硬體控制可以走自定義的通訊格式,需要搭配一張指令對照表,按表組成命令下給終端設備,設備們接收到正確的指令後才會做出正確的回應(對於不認識的指令,設備會只會已讀不回!)
Thumbnail
Modbus 是一種定義在通訊應用層的協議,會根據資料跑在不同的實體介面上而有不同的「版本」,例如:應用在 RS232/RS485 串列埠介面的就是 Modbus RTU/ASCII,應用在 TCP/IP 的就是 Modbus TCP 也 SCADA 的主要應用協議。
Thumbnail
Modbus 是一種定義在通訊應用層的協議,會根據資料跑在不同的實體介面上而有不同的「版本」,例如:應用在 RS232/RS485 串列埠介面的就是 Modbus RTU/ASCII,應用在 TCP/IP 的就是 Modbus TCP 也 SCADA 的主要應用協議。
Thumbnail
要說半導體為什麼重要,以結論來說就是...手機裡面一堆重要的部分都是半導體做的阿,電腦也是半導體做的,還有一大堆~如果說鋼鐵是現代人做出任何東西骨架的材料,那半導體就是做出任何有智能的材料 好,不要這麼不負責任來細說,半導體可以很便宜的實現運算與記憶,或是說可以做電腦,人造的智能。所以說半導體做的
Thumbnail
要說半導體為什麼重要,以結論來說就是...手機裡面一堆重要的部分都是半導體做的阿,電腦也是半導體做的,還有一大堆~如果說鋼鐵是現代人做出任何東西骨架的材料,那半導體就是做出任何有智能的材料 好,不要這麼不負責任來細說,半導體可以很便宜的實現運算與記憶,或是說可以做電腦,人造的智能。所以說半導體做的
Thumbnail
簡介   I2C (Inter - Intertraed circuit)內部整合電路,顧名思義就是主要控制短距離的內部裝置,而不適用於長距離的傳輸,I2C有不同的速度模式通常都是雙向傳輸,如標準模式100 Kbit/s、低速模式 10 Kbit/s、快速模式400Kbit/s、高速模式3.4Mbi
Thumbnail
簡介   I2C (Inter - Intertraed circuit)內部整合電路,顧名思義就是主要控制短距離的內部裝置,而不適用於長距離的傳輸,I2C有不同的速度模式通常都是雙向傳輸,如標準模式100 Kbit/s、低速模式 10 Kbit/s、快速模式400Kbit/s、高速模式3.4Mbi
Thumbnail
■控制系統分類 ●依開閉路系統區分 (1)開路系統 (2)閉路控制系統 A.線性系統與非線性系統。 B.時變系統與時不變(非時變)系統。 C.線性時不變系統(俗稱LTI系統) D.因果系統與非因果系統。 ●依系統之訊號性質區分 (1)連續性(類比)控制系統:控制系統內部所處理的信號均為時間的
Thumbnail
■控制系統分類 ●依開閉路系統區分 (1)開路系統 (2)閉路控制系統 A.線性系統與非線性系統。 B.時變系統與時不變(非時變)系統。 C.線性時不變系統(俗稱LTI系統) D.因果系統與非因果系統。 ●依系統之訊號性質區分 (1)連續性(類比)控制系統:控制系統內部所處理的信號均為時間的
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News