天天看點

java使用modbus4j實作modbustcp通信

modbus協定的一些基礎知識我在另一篇文章裡提到過

https://blog.csdn.net/m0_37547159/article/details/109689872

可以參考,今天主要說一下java和modbus的通信,之前和modbus通信主要采用的netty架構,通過netty建構tcp通信來實作,但是有個缺點,需要自己建構modbus的包和解析modbus傳回的資料,雖然netty底層封裝了bytebuf可以供我們使用,但是對于我這種不懂底層的人還是很頭疼。特别是輸入寄存器和保持寄存器使用按位操作來保持boolean值的時候,一開始不懂的我怎麼也搞不明白這兩塊用來儲存數值的寄存器怎麼表示的boolean值,後來才知道這是按位操作,需要将傳回的bytebuf轉為二進制,輸入寄存器和保持寄存器每一個寄存器有兩個位元組,1個位元組有8位,2個位元組就可以表示16位。

後來發現有很多架構可以實作modbus通信,今天就來說一下比較簡單的modbus4j,這個架構使用起來較為簡單,缺點就是是同步的,連接配接較多和資料量大時有性能瓶頸,但是一般情況下夠用,這裡先記錄一下,easymodbus4j底層使用netty建構,性能較好,後續研究後會寫一篇關于easymodbus4j的文章。

我們使用ModSim32來模拟裝置,

首先模拟離散輸入量,即1x寄存器