Modbus讀取超慢的,為什麼?

使用EasyModbus函式庫讀取Modbus資料超慢的,是沒有錯啦,因為RS232本來通訊傳輸與回應本來就不高,慢是應該的,當然只有讀取一兩筆資料沒有感覺,但是當讀取愈來愈多呢?

鮑率(baudrate)是影響讀取快慢的原因,9600 vs 115200,當然調越高就越快,可以縮短反應時間,但真正影響快慢是讀取的次數。

分多次讀取會非常慢

Console.WriteLine("Value of #1: "+modbusClient.ReadHoldingRegisters(100,1)[0].ToString());
Console.WriteLine("Value of #2: "+modbusClient.ReadHoldingRegisters(101,1)[0].ToString());
Console.WriteLine("Value of #3: "+modbusClient.ReadHoldingRegisters(102,1)[0].ToString());
Console.WriteLine("Value of #4: "+modbusClient.ReadHoldingRegisters(103,1)[0].ToString());
Console.WriteLine("Value of #5: "+modbusClient.ReadHoldingRegisters(104,1)[0].ToString());
Console.WriteLine("Value of #6: "+modbusClient.ReadHoldingRegisters(105,1)[0].ToString());
Console.WriteLine("Value of #7: "+modbusClient.ReadHoldingRegisters(106,1)[0].ToString());

從上面的程式碼可以看到,我們想要讀取位置100號到106號,但是我們分了七次取讀取,那就慢到昏倒了,因為通訊中最慢的部分就是取資料的這段,如果可以一次讀取,那就一次抓,情況會大大改善。

一次就取完資料

int[] TempRead = modbusClient.ReadHoldingRegisters(100,7); // 第二個參數是取出的組數
Console.WriteLine("Value of #1: "+TempRead[0].ToString());
Console.WriteLine("Value of #2: "+TempRead[1].ToString());
Console.WriteLine("Value of #3: "+TempRead[2].ToString());
Console.WriteLine("Value of #4: "+TempRead[3].ToString());
Console.WriteLine("Value of #5: "+TempRead[4].ToString());
Console.WriteLine("Value of #6: "+TempRead[5].ToString());
Console.WriteLine("Value of #7: "+TempRead[6].ToString());

看出其中的貓膩了吧,所以當我們設計Modbus資料寫入到Server(Master)中,就記得要寫入連續的位置,這樣將來一次讀取就搞定,不然就慢到睡著了喔。

More From Forest Beat

桜のフリ

設定Docker中node-Red的掛載

容器最強的部份,就是把資料分離出來,因此要設定給容器一個host的掛載位置,那麼設定檔與資料內容就會分離出來,並存放在host的資料夾中。在Synology NAS,要先建好一個給Docker專用的「共用資料夾」,然後在該共用下建立新的資料夾,記得要設定為明確權限,並且給予Everyone的寫入權限,這樣就可以囉。
技術
0
minutes
三ツ峠の紅葉のフリ

Docker安裝node-Red設定檔settings.js的位置

如果採用不將資料掛載出來的方式建立dockek的NodeRED,那設定檔會在哪邊呢? 要如何進行修改呢?答案很簡單,要能夠終端機到容器中,然後編輯/usr/src/node-red/node_modules/node-red/settings.js
技術
0
minutes
チューリップ畑のフリ

Docker使用bridge與host網路的差異

Docker使用bridge網路的好處是封閉但是可以聯網,容器彼此之間也無法辦訪,可以做到簡單的隔離,port可以與host重複,反正在轉port即可。host網路就有點危險了,就是實實在在以host的網路進行連線,因此同網路中,能夠看見它,除此之外,不可以與host主機使用相同的port,例如80已經被host用掉的,就不能再容器中使用80。
技術
0
minutes
つくしのフリ

用Docker佈署新的服務

下載專用的Image檔後,就可以副本產生容器,所以要有多少個都沒問題。因為是共用Image檔案所以會很省空間,另外資料可以掛載出來,這樣又能做到完全分離,例如Mariadb資料庫,可以把資料與設定檔掛載出來,日後要重灌或更新容器就很簡單。
技術
0
minutes
spot_imgspot_img