帶你認識物聯網 Modbus 通訊協議 -- 補完計畫(三)

閱讀時間約 7 分鐘
Modbus Protocol

Modbus Protocol

在上一次的物聯網 Modbus 補完計畫(二)中,我們提到了 RTU 與 ASCII 兩種傳輸模式差異之處。接下來我們要繼續看第二個部分關於 Modbus TCP 的確認機制。

經過了兩次的補完計畫,不知道你是否又對物聯網 Modbus 協議有更進一步了解呢? 接下來我們繼續聊聊要補完計畫的第三部分。如果你有機會翻閱官網的 Modbus 協議白皮書的話,在第 6 頁的地方有提到 Modbus 有 4 個 Modbus 資料模型 (Data Model) ,在它的說明欄位告訴我們跟 I/O 系統與應用有關,然後,然後就沒有了!包含我自己,我相信第一次看到書上這段落的朋友也是一頭霧水?!這 4 個資料模型究竟要表達什麼意思? 所謂的對應 IO 系統具體指的又是甚麼?這次我們就來接著來說個明白吧。

I/O 就是輸入與輸出

所謂物聯網的 I/O 模組指的是把 Input/Output (輸入/輸出) 的數據通道集成起來的功能模塊,這些數據通道就是物聯網裝置們與世界溝通的介面。具備 IO 能力的物聯網裝置還蠻多元的,從構造相對簡單的 IO 卡、功能強一點 PLC (可程式化邏輯控制單元),強調高速通訊能力的 Controller (控制器) 以及強調平台化擴充能力強大 IPC(工業電腦) 等等… 。它們的硬體底層設計都與 x86 的電腦架構類似,有負責運算的晶片,負責存儲資料的記憶體。

教科書上習慣把電腦與人腦相互類比,這裡也稍微借用一下這個觀念,不妨暫時把 IO 模組想像成我們的手腳、眼耳鼻舌。我們來想一下當想要拿起一個桌上的蘋果時會發生甚麼事?首先,眼睛會接收到桌上的蘋果反射過來的光線(訊號輸入),大腦判斷並記住蘋果的位置、大小、距離等資訊後(CPU 計算 + 記憶體),接著開始伸手拿蘋果(訊號輸出)。物聯網裝置的 IO 模組運作慨念就像我們的手眼一樣,都是透過先訊號輸入,再用計算器計算,最後按照計算結果執行訊號輸出,我們可以肯定物聯網裝置就是虛擬世界與實體世界互動、也是資訊數位化的關鍵。

Data Model 本質是記憶體

物聯網裝置跟電腦一樣處理資料過程仰賴記憶體,不同類型的資料必須放在不同的記憶體空間。記憶體空間是一種抽象化的概念,就暫時把它視為類似於我們 building,一開始裡面都是連續的尚未分隔的空間,有點像剛蓋好的毛胚屋。RD 會按照功能需求去規劃這些數據儲存空間,就像設計師規劃客廳、廚房、衛浴與臥室等居住空間一樣。各個空間的規劃原則上不會允許重疊,如此才能確保不同資料間不會發生互相覆蓋導致記憶體錯誤發生。按照 Modbus 白皮書的說明,Data Model 總共有 4 類,分別是 Discretes Inputs(讀取輸入), Coils(讀寫線圈), Input Registers(讀取輸入暫存器) 跟 Holding Registers(讀寫持有暫存器),按照數據處理的規模大小還可以區分為兩組 bit(位元)跟 Word(字),前面兩種負責bit 類型的資料,後面兩個負責字(Word, 2bytes) 等級以上的資料。

Modbus 4 Data Models

Modbus 4 Data Models

Discretes Inputs(讀取輸入)

Discretes Inputs 中文翻譯叫做讀取輸入,它只能處理 0 或 1 這類只有兩種資料變化數據並且要求資料輸入後只能「唯讀」,只能看不能改。所謂的兩種狀態的資料類型指的是 0 或 1,“有”或“沒有”,“開”與“關”等。在 DIgital IO 卡或是在 PLC 上都能看到處理這種訊號的通道叫做 Digital Input (DI),它會偵測輸入來源的電壓變化轉換成數值 (0 或 1) 寫入定義好的 Discretes Inputs 的記憶體區間裡面,接著上層應用系統就透過通訊下指令來取得資料。

電腦很會處理這種只要 1 個 bit 就能處理兩種狀態的資料,為了提高存儲效率還會把 8 個連續的 Discretes Input bits 集合成 1 個 byte 處理,對於 Digital IO 卡產品而言,本來 8 個 DI 通道 (DI0, DI1,… DI7),需要經過 8 次的問答才能得到,現在只要經過一次通訊就能拿回 8 個通道的數據,有效節省傳輸成本。

Coils(讀寫線圈)

Coil 中文翻譯叫做線圈,原意是電線繞圈後的電子元件,具體的可以先簡單想成就像牆壁上的一個電燈開關。在 Digital IO 卡上看到的 DO (Digital Output) 或是 PLC 上的 Y 點位都是,這些 DO 通道可以接受上層系統的指令來決定自己的開關狀態。 Coils 也是處理 1 個 bit 的資料型態與 Discretes Inputs 的差別是 Coils 的數值是可以被讀寫的,上層系統可以按照需求來改寫 DO 的對應的 Coils 數值。假設我們在某一張 Digital IO 卡的第一個 DO 通道上並接了一個 LED 電泡,只要對所在的記憶體位址寫入 1 或 0 就能打開裡面的繼電器開關,做到遠程控制電燈開關的效果了。

Input Registers (讀取輸入暫存器)

在計算機裡的 Registers 就是暫存器。Input 的意思跟前面的 Discretes Input 一樣,都具備「唯讀輸入」意思。相對 Discretes Input 跟 Coil 是處理只有兩種型態的資料,Input Registers 跟 Output registers 就可以運用在類比 Analog 輸入與輸出的資料處理上。類比的訊號例如自然界的光線、溫度、壓力、電波等電腦無法直接處理,必須量測到還要經過取樣才能進來電腦裡,產品的 Input Registers 大小會影響到要存儲的數據量與精度,在 IO 卡上或 PLC 上負責接收類比訊號的通道是 Analog Input (AI)。另外,由於 Input register 具備唯讀特性,所以也會被廠商設計用來存放產品資訊,例如產品的名稱、韌體版本、出廠日期等基本資訊。

Holding Registers (讀寫持有暫存器)

看到這裡你大概也猜到 Holding register 的用途了,跟 Input Register 類似可以處理 Analog Output 是一塊可以讀寫記憶體空間。類比訊號輸出的過程與訊號上述的類比訊號輸入相反,必須提供要輸出類比訊號的特徵給裝置的 Holding Register 裏面,例如電壓範圍、頻率等。負責數位轉類比的元件看到後就會知道要如何盡可能地還原出我們想要的類比訊號。為什麼會說盡可能?因為連續的訊號對數位裝置來說可以被視為解析度無限大的訊號,數位訊號都是取樣過跟原始的類比訊號相比永遠會有落差,所以在類比訊號重建的時候就得靠演算技術來"猜測"兩點之間的樣子。一斑而言取樣率越高、算法越好輸出的類比訊號自然就會更漂亮,比較不會有刺刺的感覺。

Signal Transformation, data source

Signal Transformation, data source

小結論

簡單來說,在 Modbus 協議規範的 4 個 Data Model 都是 4 種不同用途的記憶體暫存器,都是物聯網裝置與上層系統的數據緩衝區(Buffer)。而 Modbus 協會不能把話說死,只能白皮書給出的是一個設計指導原則讓廠商來 follow,所以並沒有嚴格規定一定要在哪個記憶體位置放置哪一種資料,讓廠商們按照自己的產品需求規劃暫存器的記憶體空間,所以廠商就算要把 1 bit 的資料放到 1 byte 裡面來處理是沒問題。對於我們使用者來說,只要能確定知道自己想讀寫的數據放在哪個暫存器位址就可以了。


avatar-img
14會員
61內容數
WarrenLo's 軟體設計武功祕笈
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Warren Lo的沙龍 的其他內容
Modbus 是比 Ethernet 更簡單的通訊架構,走的是 Master-Slave 模式。協議規定 Slave 裝置們都不可以主動回應,所以 Slave 們在通訊過程中遇到看不懂的、壞掉的資料封包,能做的處理方式就是直接丟掉,從外面看 Slave 裝置的行為就跟「已讀不回」一樣毫無反應
當 Modbus 通訊模式可以選 RTU 或 ASCII 這兩種傳輸模式,不過因為兩者的運作機制不一樣,所以通訊時只能選擇其中一種來使用且傳輸端與接收端都必須使用相同的傳輸模式,才不會發生數據解讀錯誤變成一堆亂碼、兩邊雞同鴨講的狀況。關於這兩種傳輸模式的差異之處,主要有三點
我們在上一篇文章聊到了測試左移所需的 8 大能力中的前面 4 個,包含學習研究、反應回饋、作戰計畫、追溯管理的能力,這四個能力也是我們平常工作與生活上遇到困難時的解決問題的核心能力,建議還沒看過第一篇的朋友,可以先回第一篇了解一下。那麼接下來我們要就繼續聊聊測試左移的另外四個能力。
當我們有往左邊看並且嘗試為每一個開發階段設置一個檢查站來把關的想法時,就有了思考方向。原則上所有設計階段的驗證都要通過才能進入量產,因此只要中間有卡關,就不能放行進入下一個階段。
Modbus TCP 可視為一種 Modbus 分支,是跑在實體通訊介面 TCP/IP 上的 Modbus 通訊協議,TCP/IP 就是我們熟悉的網路。現代的網路讓我們的電腦、手機與其他可以上網等裝置連上互聯網,每一個網路上的裝置都被分配一個不同的 IP 位址,這是網路上用來識別每一台裝置的機制
以前當 RD 在開發系統產品的時候需要控制很多硬體設備,韌體工程師有說硬體控制可以走自定義的通訊格式,需要搭配一張指令對照表,按表組成命令下給終端設備,設備們接收到正確的指令後才會做出正確的回應(對於不認識的指令,設備會只會已讀不回!)
Modbus 是比 Ethernet 更簡單的通訊架構,走的是 Master-Slave 模式。協議規定 Slave 裝置們都不可以主動回應,所以 Slave 們在通訊過程中遇到看不懂的、壞掉的資料封包,能做的處理方式就是直接丟掉,從外面看 Slave 裝置的行為就跟「已讀不回」一樣毫無反應
當 Modbus 通訊模式可以選 RTU 或 ASCII 這兩種傳輸模式,不過因為兩者的運作機制不一樣,所以通訊時只能選擇其中一種來使用且傳輸端與接收端都必須使用相同的傳輸模式,才不會發生數據解讀錯誤變成一堆亂碼、兩邊雞同鴨講的狀況。關於這兩種傳輸模式的差異之處,主要有三點
我們在上一篇文章聊到了測試左移所需的 8 大能力中的前面 4 個,包含學習研究、反應回饋、作戰計畫、追溯管理的能力,這四個能力也是我們平常工作與生活上遇到困難時的解決問題的核心能力,建議還沒看過第一篇的朋友,可以先回第一篇了解一下。那麼接下來我們要就繼續聊聊測試左移的另外四個能力。
當我們有往左邊看並且嘗試為每一個開發階段設置一個檢查站來把關的想法時,就有了思考方向。原則上所有設計階段的驗證都要通過才能進入量產,因此只要中間有卡關,就不能放行進入下一個階段。
Modbus TCP 可視為一種 Modbus 分支,是跑在實體通訊介面 TCP/IP 上的 Modbus 通訊協議,TCP/IP 就是我們熟悉的網路。現代的網路讓我們的電腦、手機與其他可以上網等裝置連上互聯網,每一個網路上的裝置都被分配一個不同的 IP 位址,這是網路上用來識別每一台裝置的機制
以前當 RD 在開發系統產品的時候需要控制很多硬體設備,韌體工程師有說硬體控制可以走自定義的通訊格式,需要搭配一張指令對照表,按表組成命令下給終端設備,設備們接收到正確的指令後才會做出正確的回應(對於不認識的指令,設備會只會已讀不回!)
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
本文用書櫃、書、書桌的比喻,深入探討電腦中資料儲存結構及作業系統如何協調資料處理。外部儲存裝置如同書櫃,主記憶體則比作書桌,處理器被比喻為讀書的人,並詳細介紹資料存取過程、Common Bus的角色以及作業系統的核心任務。透過此篇,讀者能更好地瞭解電腦在資料處理上的運作邏輯及作業系統的重要性。
Thumbnail
數位IC裡我們關注的都是0或1, 大家都知道電腦是0101在做二進位的運算, 在晶片裡又是怎麼做到的? 實際上我們在設計晶片時,會給他一個VDD跟GND, VDD-GND給的是預期的Driving volatge, 像是5V或9V 以5V為例 0或1物理上就是目前的電壓靠近0V或5
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
感知器是一種基本的神經網路模型,用於二分類問題。它模擬了人腦神經元的工作原理,通過調整權重和偏差值來達到預測和分類的目的。 感知器流程 輸入 資料的輸入: 輸入層接受資料的輸入,每個輸入對應一個特徵,還有一個固定的偏差神經元。 資料經過每個神經元時,會乘上相應的
※ 介面是什麼: 介面:人跟電腦互相溝通的管道。 使用者與電腦互相溝通的方式稱為使用者的介面。 ※ 使用者的介面類型: 文字使用者介面:CUI。使用純鍵盤來下指令溝通,對象是伺服器(SERVER)。 圖型使用者介面:GUI。使用圖像去做點擊或拖拉的方式。 ※ 命令列(Command li
Thumbnail
電腦的運作需要仰賴許多的硬體與軟體,統稱電腦系統 (computer system)。這篇文章會概略地介紹電腦系統中的重要角色,以及它們如何相互合作,來完成複雜的工作,比如說讓無所事事的宅宅如我,假日可以躲在房間玩一整天的遊戲。 電腦、程式、與使用者 說到電腦,你的腦中會浮現什麼呢? 是螢幕
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
** 3C機構設計爸版權所有 ** USB 是我們每天生活上所使用的device中最常有的I/O port,舉凡TV、cash machine、PC、Server、phone、……等等,數不完的device都有USB 接口,當然也存在著不同種類的USB接口,在下次的分享中,3C機構設計爸會做一個U
使用ADC時必須注意 MCU上會有Vref腳位,這兩個腳位必須接上VDD及GND。 這兩個腳位是專門給ADC使用的,ADC在轉換時會需要參考電壓來轉換成digital。公式如下 ​digital = (Vin / Vref) * 2^12 digital:是電腦讀取到的數值。 Vin:輸
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
本文用書櫃、書、書桌的比喻,深入探討電腦中資料儲存結構及作業系統如何協調資料處理。外部儲存裝置如同書櫃,主記憶體則比作書桌,處理器被比喻為讀書的人,並詳細介紹資料存取過程、Common Bus的角色以及作業系統的核心任務。透過此篇,讀者能更好地瞭解電腦在資料處理上的運作邏輯及作業系統的重要性。
Thumbnail
數位IC裡我們關注的都是0或1, 大家都知道電腦是0101在做二進位的運算, 在晶片裡又是怎麼做到的? 實際上我們在設計晶片時,會給他一個VDD跟GND, VDD-GND給的是預期的Driving volatge, 像是5V或9V 以5V為例 0或1物理上就是目前的電壓靠近0V或5
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
感知器是一種基本的神經網路模型,用於二分類問題。它模擬了人腦神經元的工作原理,通過調整權重和偏差值來達到預測和分類的目的。 感知器流程 輸入 資料的輸入: 輸入層接受資料的輸入,每個輸入對應一個特徵,還有一個固定的偏差神經元。 資料經過每個神經元時,會乘上相應的
※ 介面是什麼: 介面:人跟電腦互相溝通的管道。 使用者與電腦互相溝通的方式稱為使用者的介面。 ※ 使用者的介面類型: 文字使用者介面:CUI。使用純鍵盤來下指令溝通,對象是伺服器(SERVER)。 圖型使用者介面:GUI。使用圖像去做點擊或拖拉的方式。 ※ 命令列(Command li
Thumbnail
電腦的運作需要仰賴許多的硬體與軟體,統稱電腦系統 (computer system)。這篇文章會概略地介紹電腦系統中的重要角色,以及它們如何相互合作,來完成複雜的工作,比如說讓無所事事的宅宅如我,假日可以躲在房間玩一整天的遊戲。 電腦、程式、與使用者 說到電腦,你的腦中會浮現什麼呢? 是螢幕
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
** 3C機構設計爸版權所有 ** USB 是我們每天生活上所使用的device中最常有的I/O port,舉凡TV、cash machine、PC、Server、phone、……等等,數不完的device都有USB 接口,當然也存在著不同種類的USB接口,在下次的分享中,3C機構設計爸會做一個U
使用ADC時必須注意 MCU上會有Vref腳位,這兩個腳位必須接上VDD及GND。 這兩個腳位是專門給ADC使用的,ADC在轉換時會需要參考電壓來轉換成digital。公式如下 ​digital = (Vin / Vref) * 2^12 digital:是電腦讀取到的數值。 Vin:輸