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

發(fā)布時間:2024-03-11
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)成,如下面這張圖:
功能碼的長度為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 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)成,如下表所示:
其中:
◆傳輸標識符:用于標識應(yīng)用數(shù)據(jù)單元,即請求和應(yīng)答之間的配對;客戶端對該部分進行初始化,服務(wù)器端將其拷貝到自己的adu中;
◆協(xié)議標識符:系統(tǒng)間的協(xié)議標識,0=modbus;
◆長度:接下來要發(fā)送的數(shù)據(jù)長度,即:單元標識符+pdu的總長度,以字節(jié)為單位;
◆單元標識符:用于系統(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ù)留好,不能被別人占用哦。
上一個:iphone安裝搜狗輸入法(蘋果手機怎么安裝搜狗輸入法寫字系統(tǒng)軟件)
下一個:侵犯商業(yè)秘密罪中的重大損失如何認定

衛(wèi)生間防水驗收規(guī)范
離職公積金提取有什么流程
新東方在線教育平臺服務(wù)質(zhì)量現(xiàn)狀,新東方在線好不好呢效果怎么樣呢
1T機械硬盤,1t機械硬盤 512g固態(tài)和1t固態(tài)哪個好
西門子的PLC智能網(wǎng)關(guān)有哪些功能?能采集哪些PLC?
軟路由需要硬盤嗎怎么設(shè)置,軟路由軟件放在硬盤里嗎
關(guān)于bartels微泵的機械分類,主要有以下兩種
oppoa8怎么分屏小窗口(oppoa8怎么分屏王者)
win10更新時卡住了怎么辦(win10更新時卡住了怎么辦)
荔枝高產(chǎn)優(yōu)質(zhì)種植技術(shù)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos