天天看點

ModbusTCP協定封包詳細分析

ModbusTCP與ModbusUDP的封包格式是一樣的,它們之間的差別其實就是TCP與UDP的差別,是以下面就針對ModbusTCP的協定進行分析,ModbusTCP與ModbusRtu(ModbusASCII)之間的差別如下圖:

ModbusTCP協定封包詳細分析

 從上圖可以看出,ModbusTCP在Modbus串行通信的基礎上,去除了校驗(由于TCP本身就帶有校驗和)和裝置位址(ModbusTCP弱化了裝置位址,用IP位址來取代),再加上MBAP封包頭(占7 bytes),下面針對MBAP進行分析說明:

ModbusTCP協定封包詳細分析

下面針對具體封包進行分析,Modbus協定在以太網鍊路上的封包格式如下所示:

ModbusTCP協定封包詳細分析

 有了以上理論基礎之後,下面針對各個功能碼進行詳細分析:+vx:xiketang123領取資料

發送封包格式如下:

ModbusTCP協定封包詳細分析

發送封包含義:讀取伺服器1号從站輸出線圈,起始位址為0x13=19,對應位址為00020,線圈數量為0x1B=27,即讀取1号從站輸出線圈,位址從00020-00046,共27個線圈的狀态值。

這裡值得注意一下,協定中的起始位址指的是索引,後面的位址指的是具體位址,對于任意一個存儲區,索引都是從0開始的,但是對應的具體位址,與存儲區是相關的,比如輸出線圈,0對應00001;輸入線圈,0對應10001;輸入寄存器,0對應30001;保持寄存器,0對應40001。

傳回封包格式如下:

ModbusTCP協定封包詳細分析

傳回封包含義:傳回伺服器1号從站輸出線圈00020-00046,共27個線圈的狀态值,傳回位元組數為4個,分别為CD 6B B2 05。

CD=1100 1101 對應 00020-00027

6B=0110 1011 對應 00028-00035

B2=1011 0010 對應 00036-00043

05=0000 0101 對應 00044-00046

ModbusTCP協定封包詳細分析

發送封包含義:讀取伺服器1号從站輸入線圈,起始位址為0xC4=196,對應位址為10197,線圈數量為0x1D=29,即讀取1号從站輸入線圈,位址從10197-10225,共29個線圈的狀态值。

ModbusTCP協定封包詳細分析

傳回封包含義:傳回伺服器1号從站輸入線圈10197-10225,共29個線圈的狀态值,傳回位元組數為4個,分别為CD 6B B2 05。

CD=1100 1101 對應 10197-10204

6B=0110 1011 對應 10205-10212

B2=1011 0010 對應 10213-10220

05=0000 0101 對應 10221-10225

發送封包格式如下:+vx:xiketang123領取資料

ModbusTCP協定封包詳細分析

發送封包含義:讀取伺服器1号從站保持寄存器,起始位址為0x6B=107,對應位址為40108,寄存器數量為0x02=2,即讀取1号從站保持寄存器,位址從40108-40109,共2個寄存器的數值。

ModbusTCP協定封包詳細分析

傳回封包含義:傳回伺服器1号從站保持寄存器40108-40109,共2個寄存器的數值,傳回位元組數為4個,分别為02 2B 01 06,40108對應數值為0x022B,40109對應數值為0x0106。

ModbusTCP協定封包詳細分析

發送封包含義:讀取伺服器1号從站輸入寄存器,起始位址為0x6B=107,對應位址為30108,寄存器數量為0x02=2,即讀取1号從站保持寄存器,位址從30108-30109,共2個寄存器的數值。

ModbusTCP協定封包詳細分析

傳回封包含義:傳回伺服器1号從站輸入寄存器30108-30109,共2個寄存器的數值,傳回位元組數為4個,分别為02 2B 01 06,30108對應數值為0x022B,30109對應數值為0x0106。

ModbusTCP協定封包詳細分析

發送封包含義:預置伺服器1号從站單個線圈的值,線圈位址為0x00AC=172,對應位址為00173,斷通标志0xFF00表示置位,0x000表示複位,即置位1号從站輸出線圈00173。

ModbusTCP協定封包詳細分析

傳回封包含義:預置單輸出線圈原封包傳回。

ModbusTCP協定封包詳細分析

發送封包含義:預置伺服器1号從站單個保持寄存器的值,寄存器位址為0x0087=135,對應位址為40136,寫入值為0x039E,即預置1号從站保持寄存器40136值為0x039E。

ModbusTCP協定封包詳細分析

傳回封包含義:預置單保持寄存器原封包傳回。

ModbusTCP協定封包詳細分析

發送封包含義:預置伺服器1号從站多個線圈的值,線圈位址為0x0013=19,對應位址為00020,線圈數為0x0A=10,寫入值為0xCD00,即預置1号從站線圈00020-00027=0xCD=1100 1101,00028-00029=0x00=0000 0000。

ModbusTCP協定封包詳細分析

傳回封包含義:預置多輸出線圈傳回封包是在原封包基礎上除去位元組數及具體位元組後傳回。

ModbusTCP協定封包詳細分析

發送封包含義:預置伺服器1号從站多個寄存器的值,寄存器位址為0x0087=135,起始位址為40136,寄存器數量為0x02=2,結束位址為40137,寫入值為0xCD00和0x0A10,即預置1号從站寄存器40136=0x0105,40137=0x0A10。

ModbusTCP協定封包詳細分析

 傳回封包含義:預置多保持寄存器傳回封包是在原封包基礎上除去位元組數及具體位元組後傳回。

繼續閱讀