Modbus協議,作為工業物聯網領域中的重要協議之一,以其顯著的特點贏得了廣泛的認可與應用。
然而,正如任何技術都有其局限性和改進空間一樣,今天我們將打破常規,采取一種‘倒反天罡’的視角,不再專注其優點,而是 深入剖析并探討Modbus協議在實際應用中可能遇到的一些不足之處 ,以期能更系統地理解這一協議,并為未來的技術選型與優化提供參考依據。
1.數據讀取限制
讀個數據還得分批來?你需要有點兒耐心。
下面這張圖是ModbusRTU協議03功能碼讀取保持型寄存器的報文格式:
從這張圖上,我們可以看到從站返回數據中有一個選項叫做數據個數,這個數據個數就是我們之前說的字節計數,它所占用的字節數是1。 那么意味著字節計數的最大值是255,返回報文中的字節計數是讀取寄存器數量的2倍,因此讀取寄存器的數量最大值是255/2=127。如果超過127個,就得通過分組的方式來多次讀取。這個就會導致在一些數據量較大的場合,需要多次報文交互,才能完成所有的數據讀取,從而導致通信效率的降低。
如果當初設計時,字節計數為2個字節,是不是意味著一次性可以讀取更多的數據?
2.不支持寄存器位級寫入
這個問題也是很多人比較頭疼的。
Modbus協議常用的8個功能碼中,并沒有直接支持寄存器的位寫入。當需要對某個寄存器的特定位進行置位或復位時,操作會變得非常繁瑣。一種方法是先讀取整個寄存器的值,對需要修改的位進行位操作后,再寫回寄存器。這種方法需要兩次通信,不僅增加了通信量,還可能引發數據一致性和安全性問題。另一種方法是用一個寄存器代替一個位,寫入1表示True,寫入0表示False。雖然這種方法可以在一次寫操作中完成,但會浪費大量的寄存器空間,降低了資源利用率。
不僅是Modbus,其他很多協議也有同樣的問題。
但是西門子S7協議是支持單個位寫入的,對于那些需要頻繁操作單個IO點或內部狀態位的場景,西門子S7協議可能是一個更加合適的選擇,它能夠大幅提升系統的整體性能和響應速度。下面以S7協議無線以太網通信方案為例,介紹觸摸屏與兩臺 PLC的無線S7協議通信實現過程。
當然,每種協議都有其適用的場景和優勢,綜合考量通信效率、設備兼容性、開發成本等因素,選擇適合項目需求的協議才是關鍵。
4.不支持隨機讀寫
下面這張圖是三菱MC協議中的一段報文幀。
這段報文的含義是一次性讀取出D0、T0、M100-M115、X20-X2F、D1500-D1501、 Y160-Y17F、M1111-M1142。
Modbus協議不支持這樣的讀取操作,如果地址比較零散,就需要分很多批,這樣必然會導致通信效率的降低。
4.安全性堪憂
安全性?不存在的!
Modbus的安全措施幾乎為零,對黑客幾乎不設防,沒有加密、沒有認證,簡直是網絡安全的“反面教材”。
這個其實和Modbus協議的使用場景有關。Modbus協議主要應用在設備層的一些儀表及控制層的一些PLC控制器中,所以大部分情況下都是局域網的應用,因此基本上不會出現黑客攻擊或者數據篡改之類的問題。
Modbus協議作為工業現場應用,它的目的是實現數據交互,在不聯網的環境下,沒有攻擊就沒有傷害。所以你得自己想辦法采取額外的安全措施來保障數據的安全性,如使用VPN、防火墻等網絡安全設備,或者采用加密通信協議來替代Modbus協議。
總結
為了適應現代工業自動化的需求,許多新的通信協議和技術正在被開發和采用,以彌補Modbus的局限性。
總之,盡管存在這些不足,Modbus協議因其簡單、易于實現和廣泛的支持,仍然在許多工業場合中發揮著重要作用,作為“工業老兵”Modbus協議依然很能打!
審核編輯 黃宇
-
ModBus協議
+關注
關注
3文章
182瀏覽量
34099
發布評論請先 登錄
評論