igao视频网站_久久99精品久久久久久不卡_91精品国产自产91精品_午夜亚洲影视_成人羞羞国产免费软件动漫_男人插女人免费

深入了解Modbus TCP協(xié)議

2020/6/18 1:28:15 人評論 次瀏覽 分類:電子技術(shù)  文章地址:http://www.jinzhengkj.com.cn/tech/3149.html

Modbus總線有三種協(xié)議:Modbus RTU協(xié)議、Modbus ASCII協(xié)議和Modbus TCP協(xié)議,Modbus總線活躍在工業(yè)通信領(lǐng)域。Modbus RTU和Modbus ASCII擅長串行通信,比如基于RS485或者RS232的通信,而Modbus TCP則擅長基于以太網(wǎng)的通信。由于底層所使用的結(jié)構(gòu)不同,Modbus的應(yīng)用數(shù)據(jù)單元(Application Data Unit,ADU)有所不同。你可能并去清楚什么是ADU,昌暉儀表下面來詳細介紹。

為了進行通信,Modbus規(guī)定了一種很簡單的數(shù)據(jù)結(jié)構(gòu),被稱為“協(xié)議數(shù)據(jù)單元”(Protocol Data Unit,PDU)。協(xié)議數(shù)據(jù)單元由功能碼+數(shù)據(jù)構(gòu)成,如下面這張圖:

協(xié)議數(shù)據(jù)單元
功能碼的長度為1個字節(jié),它表示要執(zhí)行的功能。比如常見的:01讀取線圈;02讀取離散量輸入值;03讀取保持寄存器值;05寫單個線圈等;數(shù)據(jù)部分的長度為0-252個字節(jié),它表示要讀的地址或者要寫入的值,不同的功能碼對應(yīng)的數(shù)據(jù)有所不同。比如01功能碼,其數(shù)據(jù)為4個字節(jié),其中前兩個字節(jié)表示要讀取的線圈的地址,后兩個字節(jié)表示要讀取線圈的數(shù)量;而對于05功能碼,其數(shù)據(jù)也是4個字節(jié),前兩個字節(jié)表示要寫入線圈的地址,后面兩字節(jié)表示要寫入的值。


協(xié)議數(shù)據(jù)單元有三種類型:請求型協(xié)議數(shù)據(jù)單元(Request PDU)、應(yīng)答型協(xié)議數(shù)據(jù)單元(Response PDU)、及異常應(yīng)答型協(xié)議數(shù)據(jù)單元(Exception Response PDU),更多關(guān)于協(xié)議數(shù)據(jù)單元的內(nèi)容,大家可以去Modbus官網(wǎng)(
)下載通信規(guī)范好好閱讀。

協(xié)議數(shù)據(jù)單元是Modbus的通用數(shù)據(jù)結(jié)構(gòu),它與底層物理結(jié)構(gòu)無關(guān),Modbus RTU、Modbus ASCII和Modbus TCP都使用相同的協(xié)議數(shù)據(jù)單元。但是,Modbus在通信的時候,總要依賴物理網(wǎng)絡(luò)。因此要把協(xié)議數(shù)據(jù)單元映射到物理網(wǎng)絡(luò)上,這就形成了應(yīng)用數(shù)據(jù)單元(Application Data Unit,ADU)。由于底層網(wǎng)絡(luò)的不同,Modbus TCP跟Modbus RTU和Modbus ASCII的應(yīng)用數(shù)據(jù)單元是不同的,Modbus RTU和Modbus ASCII的ADU結(jié)構(gòu)如下圖所示:

Modbus RTU和Modbus ASCII的ADU結(jié)構(gòu)

而Modbus TCP的ADU結(jié)構(gòu)如下:

Modbus TCP的ADU結(jié)構(gòu)

可以看到,Modbus TCP的應(yīng)用數(shù)據(jù)單元是在協(xié)議數(shù)據(jù)單元的基礎(chǔ)上,添加了一個叫做“MBAP頭(MBAP Header)”的結(jié)構(gòu)。MBAP是英文“ModBus APlication”的縮寫,即“應(yīng)用數(shù)據(jù)單元”的意思。

MBAP頭結(jié)構(gòu)由7個字節(jié)構(gòu)成,如下表所示:
MBAP頭結(jié)構(gòu)
其中:

◆傳輸標(biāo)識符:用于標(biāo)識應(yīng)用數(shù)據(jù)單元,即請求和應(yīng)答之間的配對;客戶端對該部分進行初始化,服務(wù)器端將其拷貝到自己的ADU中;
協(xié)議標(biāo)識符:系統(tǒng)間的協(xié)議標(biāo)識,0=Modbus;
長度:接下來要發(fā)送的數(shù)據(jù)長度,即:單元標(biāo)識符+PDU的總長度,以字節(jié)為單位;
單元標(biāo)識符:用于系統(tǒng)間的站尋址,比如在以太網(wǎng)+串行鏈路的網(wǎng)絡(luò)中,遠程站的地址;

這就是Modbus TCP的ADU結(jié)構(gòu),即:MBAP頭+PDU,是不是很簡單呢?Modbus TCP的數(shù)據(jù)傳輸采用的是一種被稱為“客戶端/服務(wù)器”的模式,這也是上面的表格中會出現(xiàn)客戶端/服務(wù)器功能描述的原因。其實,很多網(wǎng)絡(luò)通信都采用的這種方式,比如大名鼎鼎的西門子的S7通信協(xié)議。在串行鏈路中,這種方式也稱為主-從通信。


說道這里,大家可能會有一個疑惑。因為Modbus在網(wǎng)絡(luò)通信中,通常需要寫明IP地址和端口號,為什么Modbus TCP的ADU中沒有相關(guān)的內(nèi)容呢?


哈哈,其實這是因為Modbus TCP是一個應(yīng)用層的協(xié)議,而你說的IP地址和端口號屬于傳輸層/網(wǎng)絡(luò)層的協(xié)議。還沒明白,好吧,看看這張圖:



你看,在邏輯上Modbus TCP是在TCP層上的。在發(fā)送數(shù)據(jù)的時候,Modbus TCP的應(yīng)用數(shù)據(jù)單元首先向下傳送給傳輸層,加上TCP協(xié)議的報文;再傳送給網(wǎng)絡(luò)層,加上IP協(xié)議的報文;再向下傳送給數(shù)據(jù)鏈路層及物理層;接收的過程正好相反,從物理層一層一層的去掉相應(yīng)層的報文,最終到達應(yīng)用層。所以在使用Modbus TCP進行數(shù)據(jù)傳輸?shù)臅r候,是要配合TCP/IP協(xié)議來使用的。通常如果你使用電腦編程,就要用到SOCKET技術(shù);如果是使用PLC編程,通常廠家已經(jīng)把底層通信封裝成庫指令了,你只要直接調(diào)用就好了。比如西門子S7-200 SMART/1200/1500等PLC都有現(xiàn)成的Modbus-TCP指令庫。偷偷告訴你一聲,昌暉儀表后續(xù)會寫基于PLC和基于PC的Modbus-TCP通信的文章。


還有一點要特別說明一下,Modbus TCP使用的端口號是502,一定要給Modbus TCP預(yù)留好,不能被別人占用哦。

相關(guān)閱讀
WinCC與S7-200 SMART的Modbus TCP/IP通訊實現(xiàn)方法

共有訪客發(fā)表了評論 網(wǎng)友評論

  客戶姓名:
郵箱或QQ:
驗證碼: 看不清楚?
主站蜘蛛池模板: 欧洲亚洲国产一区二区 | 天天爽影院一区二区在线影院 | 国产精品JK白丝AV网站 | 无码亚洲成A∧人片在线播放 | 精品欧美在线观看 | 免费观看做爰视频ⅹxx午夜 | 国产精品美女久久久久久久久久久 | 女人一级一片30分 | 亚洲中文久久精品无码99 | 欧美中文字幕一区二区三区亚洲 | 国产爆乳尤妮丝无码视频在线 | 99精品乱码国产在线观看 | 丝袜a∨在线一区二区三区不卡 | 亚洲国产av一区二区三区 | 亚洲AV无码不卡私人影院 | 欧美婷婷六月丁香综合色 | 丁香网五月 | 国产乱人伦偷精品视频 | 黄色毛片前黄 | 日本激情视频中文字幕 | 在线亚洲欧美日韩精品专区 | 亚洲日韩日本中文在线 | 欧美无乱码久久久免费午夜一区 | 中文字幕人妻无码一夲道 | 亚洲国产国语自产精品 | 大地资源中文在线观看官网在线 | 国产精品69av | 青青草国产一区二区 | 欧美视频色 | 韩国av永久免费 | 免费观看色视频 | 911亚洲精品第一 | 亚洲永久网站 | 天天综合亚洲色在线精品 | 久久99影视| 欧美丝袜一区二区三区 | 久久精品爱爱视频 | 亚洲欧洲日产国码高潮 | 一本—道久久a久久精品蜜桃 | av无线看| 欧美日韩在线高清 |