帶你認識物聯網 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
留言分享你的想法!
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
由於一個微電腦系統之輸出入裝置通常不只一個,若CPU欲針對某個輸出入裝置做資料讀寫,必須通過不同的位址來選擇不同的裝置,依微電腦的架構區分,定義I/O位址的方法有兩種,記憶體映射 I/O和隔離式 I/O。 本章節將會詳細介紹兩者。
Thumbnail
由於一個微電腦系統之輸出入裝置通常不只一個,若CPU欲針對某個輸出入裝置做資料讀寫,必須通過不同的位址來選擇不同的裝置,依微電腦的架構區分,定義I/O位址的方法有兩種,記憶體映射 I/O和隔離式 I/O。 本章節將會詳細介紹兩者。
Thumbnail
問題來了,如果在一組 Master-Slave 在通訊過程中出現其他的裝置「插嘴」的狀況會怎麼樣?因為迴路只有一條,所以只要在同一個通訊迴路上同時有兩台裝置發出訊號,結果就是兩個資料封包互相對撞雙雙損毀…
Thumbnail
問題來了,如果在一組 Master-Slave 在通訊過程中出現其他的裝置「插嘴」的狀況會怎麼樣?因為迴路只有一條,所以只要在同一個通訊迴路上同時有兩台裝置發出訊號,結果就是兩個資料封包互相對撞雙雙損毀…
Thumbnail
物聯網裝置跟電腦一樣處理資料過程仰賴記憶體,不同類型的資料必須放在不同的記憶體空間。RD 會按照功能需求去規劃這些數據儲存空間,就像設計師規劃客廳、廚房、衛浴與臥室等居住空間一樣。各個空間的規劃原則上不會允許重疊,如此才能確保不同資料間不會發生互相覆蓋導致記憶體錯誤發生。
Thumbnail
物聯網裝置跟電腦一樣處理資料過程仰賴記憶體,不同類型的資料必須放在不同的記憶體空間。RD 會按照功能需求去規劃這些數據儲存空間,就像設計師規劃客廳、廚房、衛浴與臥室等居住空間一樣。各個空間的規劃原則上不會允許重疊,如此才能確保不同資料間不會發生互相覆蓋導致記憶體錯誤發生。
Thumbnail
當 Modbus 通訊模式可以選 RTU 或 ASCII 這兩種傳輸模式,不過因為兩者的運作機制不一樣,所以通訊時只能選擇其中一種來使用且傳輸端與接收端都必須使用相同的傳輸模式,才不會發生數據解讀錯誤變成一堆亂碼、兩邊雞同鴨講的狀況。關於這兩種傳輸模式的差異之處,主要有三點
Thumbnail
當 Modbus 通訊模式可以選 RTU 或 ASCII 這兩種傳輸模式,不過因為兩者的運作機制不一樣,所以通訊時只能選擇其中一種來使用且傳輸端與接收端都必須使用相同的傳輸模式,才不會發生數據解讀錯誤變成一堆亂碼、兩邊雞同鴨講的狀況。關於這兩種傳輸模式的差異之處,主要有三點
Thumbnail
Modbus TCP 可視為一種 Modbus 分支,是跑在實體通訊介面 TCP/IP 上的 Modbus 通訊協議,TCP/IP 就是我們熟悉的網路。現代的網路讓我們的電腦、手機與其他可以上網等裝置連上互聯網,每一個網路上的裝置都被分配一個不同的 IP 位址,這是網路上用來識別每一台裝置的機制
Thumbnail
Modbus TCP 可視為一種 Modbus 分支,是跑在實體通訊介面 TCP/IP 上的 Modbus 通訊協議,TCP/IP 就是我們熟悉的網路。現代的網路讓我們的電腦、手機與其他可以上網等裝置連上互聯網,每一個網路上的裝置都被分配一個不同的 IP 位址,這是網路上用來識別每一台裝置的機制
Thumbnail
建立Modbus IO Server
Thumbnail
建立Modbus IO Server
Thumbnail
因專案需求需要同時間控制兩台以上不同設備 這些設備都是使用Modbus RTU的方式進行通訊 這裡記錄一下怎麼對兩台以上設備讀取的程式
Thumbnail
因專案需求需要同時間控制兩台以上不同設備 這些設備都是使用Modbus RTU的方式進行通訊 這裡記錄一下怎麼對兩台以上設備讀取的程式
Thumbnail
這次分享資料形態中的資料型別部分,在VC#流程架構介紹中有提到它如同中文有不同的詞性,那C#程式中有哪些型別呢?我們就來看一看。 一、常用的資料型別 當然還有自訂義的型別這就要看怎麼定義了,之後看內容狀況再來提,那麼資料型態是為了要做宣告用途,告訴電腦你的資料是屬於什麼類別的,這樣在做後續資料時程式
Thumbnail
這次分享資料形態中的資料型別部分,在VC#流程架構介紹中有提到它如同中文有不同的詞性,那C#程式中有哪些型別呢?我們就來看一看。 一、常用的資料型別 當然還有自訂義的型別這就要看怎麼定義了,之後看內容狀況再來提,那麼資料型態是為了要做宣告用途,告訴電腦你的資料是屬於什麼類別的,這樣在做後續資料時程式
Thumbnail
第一層(Layer1) - 實體層(Physical Layer) 實體層主要是用來定義設備裝置之間位元資料傳輸,也就是透過物理線材連接至其他實體設備,傳遞0和1的數位訊號。 實體層包括了針腳、電壓、線纜規範、集線器、中繼器、網卡、主機介面卡等。 第二層(Layer2) - 資料連結層(
Thumbnail
第一層(Layer1) - 實體層(Physical Layer) 實體層主要是用來定義設備裝置之間位元資料傳輸,也就是透過物理線材連接至其他實體設備,傳遞0和1的數位訊號。 實體層包括了針腳、電壓、線纜規範、集線器、中繼器、網卡、主機介面卡等。 第二層(Layer2) - 資料連結層(
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News