Modbus協(xié)議Java庫(kù) modbus4j 的代碼解析

首先,簡(jiǎn)單介紹一下Modbus協(xié)議。這是一個(gè)通訊協(xié)議,用于工業(yè)設(shè)備之間傳輸信息,地位類似于互聯(lián)網(wǎng)領(lǐng)域中的http協(xié)議。

簡(jiǎn)單理解,通訊協(xié)議可以分為兩層:硬件層和軟件層。硬件層負(fù)責(zé)傳輸數(shù)據(jù),如 232/485串口協(xié)議、tcp協(xié)議等。軟件層則在硬件層的基礎(chǔ)上定義了傳輸數(shù)據(jù)的格式。

Modbus采用主-從結(jié)構(gòu),主機(jī)會(huì)不斷地發(fā)送指令給從機(jī),從機(jī)執(zhí)行指令,并返回執(zhí)行結(jié)果。

以一條Modbus報(bào)文數(shù)據(jù)舉例,其傳輸原始數(shù)據(jù)如下 01 06 00 01 00 17 98 04,對(duì)應(yīng)的解析為:
01——從機(jī)地址
06——功能號(hào)
00 01——數(shù)據(jù)地址
00 17——數(shù)據(jù)
98 04——CRC校驗(yàn)
翻譯成人話就是:主機(jī)對(duì)1號(hào)從機(jī)說(shuō)“把數(shù)據(jù) 0x0017(十進(jìn)制23) 寫(xiě)入 0x0001寄存器”

Modbus4j——Java版本modbus協(xié)議實(shí)現(xiàn)

支持的從機(jī)transports類型有:ASCII, RTU, TCP, and UDP。

核心類

  • 主機(jī)Master及其子類:主機(jī)的入口,數(shù)據(jù)流的起點(diǎn)和終點(diǎn)。
  • 數(shù)據(jù)端口類StreamTransport:負(fù)責(zé)數(shù)據(jù)的寫(xiě)入和讀出。
  • Modbus消息類ModbusMessage及其子類:支持Modbus定義的各種方法(FunctionCode)
  • 收發(fā)數(shù)據(jù)控制類MessageControl:支持 timeout、retries,默認(rèn)200ms,1次。
    • 收發(fā)等待室WaitingRoom:負(fù)責(zé)同步收發(fā)邏輯。
    • 輸出Request消息類:OutgoingRequestMessage 及其子類。
    • 收到Response消息類:IncomingResponseMessage 及其子類。
    • 解析類MessageParser:負(fù)責(zé)解析收到的消息。
  • 協(xié)議數(shù)據(jù)類型定義:DataType
  • 協(xié)議功能碼定義:FunctionCode
  • 協(xié)議寄存器范圍:RegisterRange

數(shù)據(jù)流程

  1. 透過(guò)ModbusFactory創(chuàng)建對(duì)應(yīng)的Master對(duì)象。
  2. 封裝需要發(fā)送的指令,比如ReadHoldingRegistersRequest,這是一個(gè)讀寄存器指令,指定寄存器地址和長(zhǎng)度即可。
  3. Master對(duì)象將這個(gè)ReadHoldingRegistersRequest轉(zhuǎn)化為OutgoingRequestMessage對(duì)象,然后傳輸給MessageControl。
  4. 透過(guò)驅(qū)動(dòng)層,MessageControl將這個(gè)OutgoingRequestMessage寫(xiě)入對(duì)應(yīng)的通訊硬件外設(shè)(串口、網(wǎng)口等),并等待返回?cái)?shù)據(jù)IncomingResponseMessage
  5. 如果沒(méi)有等到,就返回null,并提醒超時(shí)。
  6. 如果等到了有效返回,則MessageControl利用MessageParserIncomingResponseMessage轉(zhuǎn)化為對(duì)應(yīng)ModbusResponse返回給上層。

單元測(cè)試

modbus4j/src_test/定義了一系列單元測(cè)試方法,跟蹤其中相關(guān)方法,即可了解modbus協(xié)議的實(shí)際運(yùn)作流程。

參考:

  1. ModBus-RTU詳解
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容