前言
大家好!我是付工!
前面寫了一篇關於基於Modbus讀取運動控制卡的文章,發現很多小夥伴對Modbus的實時性比較感興趣,想知道Modbus通信能達到多快的速度。
首先,我們要明確一點,Modbus本身只是一個應用層的協議規約,意思就是Modbus本身是沒有速度一說的,當運行在傳輸層以太網或者串口介質上的時候,纔會存在實時性的說法。
那麼至於Modbus通信速度到底是多少,本文以ModbusTCP爲例,配合西門子200Smart PLC、西門子1200 PLC、西門子1500 PLC、三菱FX5U、臺達DVP-ES3以及正運動的運動控制卡,來做一個通信測試,測試結果僅表示當前環境、當前電腦配置、當前網絡環境下的結果,僅供參考。
測試程序
這裏採用的通信庫是我們自己開發的通信庫xktComm,不同的通信庫測試結果可能有所不同。
首先設計界面如下所示:
不同設備都使用默認端口502,所以僅僅只是IP地址不同而已,爲了增加數據的準確性,我們使用循環讀取的方式,默認是循環1000次,同時爲了證明實時通信的過程,增加了顯示報文的選擇,可以將實時通信的報文顯示出來。
同時,我們讀取的存儲區也是一樣的,讀取4區從0開始的100個寄存器。
西門子200Smart
西門子200Smart PLC,我們採用的是CPU ST40,大家都知道西門子PLC想要支持ModbusTCP通信,是需要寫一點PLC程序的,如下圖所示:
測試結果如下:
不顯示報文結果:
顯示報文結果:
最後一幀報文的前兩個字節表示序號:0B B8=3000,因爲這是第三次通信。
西門子1200
西門子1200 PLC,我們採用的是CPU 1212 DC/DC/DC,西門子1200 同樣是需要寫一點PLC程序的,如下圖所示:
測試結果如下:
不顯示報文結果:
顯示報文結果:
結果可以看到,1200PLC的ModbusTCP通信比200Smart還要慢,更換1214的PLC測試結果也是一樣的。
測試的通信負載是20%,將通信負載改成50%,再次測試,測試結果如下:
不顯示報文結果:
顯示報文結果:
通信負載在一定程度上可以提高通信效率,可以根據實際情況適當提高。
西門子1500
西門子1500 PLC,我們採用的是CPU 1511T-1 PN,西門子1500 同樣是需要寫一點PLC程序的,如下圖所示:
測試結果如下:
不顯示報文結果:
顯示報文結果:
三菱FX5U
三菱FX5U PLC,我們採用的是FX5U-32MT/ES,三菱FX5U PLC是直接支持ModbusTCP的,但是需要做下配置,在以太網配置里加上ModbusTCP連接設備,端口號設置爲502。
測試結果如下:
不顯示報文結果:
顯示報文結果:
臺達DVP
臺達PLC,我們採用的是DVP32-ES3,國產PLC對Modbus協議支持的很好,不需要做任何配置即可實現Modbus通信。
測試結果如下:
不顯示報文結果:
顯示報文結果:
正運動運動控制卡
正運動運動控制卡,我們採用的是ECI1408,同樣也不需要任何配置,即可實現Modbus通信。
測試結果如下:
不顯示報文結果:
測試發現,連接之後的第一個循環會比後續的時間多一些,連續測試的結果,大約在200ms左右。
顯示報文結果:
測試結果彙總
以不顯示報文的結果來進行彙總,如下表所示:
設備 | 1000次 | 平均週期 |
---|---|---|
200Smart | 3500ms | 3.5ms |
1200 PLC | 4600ms | 4.6ms |
1500 PLC | 5300ms | 5.3ms |
FX5U PLC | 2000ms | 2ms |
臺達 PLC | 1500ms | 1.5ms |
正運動 | 200ms | 0.2ms |
從測試結果來看,ModbusTCP的通信速率,不同的PLC大約在1.5ms-5ms之間,而正運動運動控制卡可以達到0.2ms,比PLC的通信效率要高10倍以上。