Modbus TCP及其注意點(diǎn)
?主機(jī)和從機(jī)、服務(wù)端和客戶端
【在modbus協(xié)議中】
主機(jī)發(fā)送modbus請求,從機(jī)根據(jù)請求內(nèi)容向主機(jī)返回響應(yīng)。在modbus協(xié)議中,主機(jī)總是主動方,從機(jī)總是被動方。
【在網(wǎng)絡(luò)應(yīng)用中】
在網(wǎng)絡(luò)應(yīng)用中存在客戶端和服務(wù)器端,客戶端(例如瀏覽器)發(fā)送請求到服務(wù)器,服務(wù)器向客戶端返回內(nèi)容(例如HTML文本)。
【在modbus tcp中】
主機(jī)是客戶端,而從機(jī)是服務(wù)器端。千萬不要以為服務(wù)器端重要,主機(jī)也重要,所以主機(jī)就是服務(wù)器端。
是否可以多主機(jī)
通過前面的分析,主機(jī)為客戶端那么modbustcp支持多個主機(jī),在一個 局域網(wǎng)中可存在多個主機(jī)和多個從機(jī)。從機(jī)的連接能力(連接主機(jī)的數(shù) 量)由UIP的最大TCP連接個數(shù)決定。
modbus TCP協(xié)議簡述
modbus TCP和modbus RTU基本相同,但是也存在一些區(qū)別。
a.從機(jī)地址變得不再重要,多數(shù)情況下忽略。從某種意義上說從機(jī)地址被IP地址取代。
b.CRC校驗(yàn)變得不再重要,甚至可以忽略。由于TCP數(shù)據(jù)包中已經(jīng)存在校驗(yàn),為了不重復(fù)造輪子,modbus TCP干脆取消了CRC校驗(yàn)。
TCP 模式是為了讓Modbus 數(shù)據(jù)順利在以太網(wǎng)上傳輸產(chǎn)生的,使用TCP502 端口。該協(xié)議物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層都是基于TCP 協(xié)議,只在應(yīng)用層,將Modbus 協(xié)議修改后封裝進(jìn)去; 接收端將該TCP 數(shù)據(jù)包拆封后,重新獲得原始Modbus 幀,然后按照Modbus 協(xié)議規(guī)范進(jìn)行解析,并將返回的數(shù)據(jù)包重新封裝進(jìn)TCP 協(xié)議中,返回到發(fā)送端。與串行鏈路傳輸?shù)臄?shù)據(jù)格式不同,TCP 模式去除了附加地址和校驗(yàn),增加了報(bào)文頭,其具體格式如圖所示。

在modbus TCP中包含一個MBAP頭,該頭包含以下幾個部分。
區(qū)域長度,描述客戶端服務(wù)器傳輸標(biāo)志2字節(jié)MODBUS 請求和響應(yīng)傳輸過程中,序列號客戶端生成應(yīng)答時,復(fù)制該值協(xié)議標(biāo)志2字節(jié),Modbus協(xié)議默認(rèn)為0。客戶端生成應(yīng)答時復(fù)制該值長度2字節(jié),剩余部分的長度客戶端生成應(yīng)答時,由服務(wù)器端生成單元標(biāo)志1字節(jié),從機(jī)標(biāo)志(從機(jī)地址)客戶端生成應(yīng)答時復(fù)制該值。
【注意】
【1】傳輸標(biāo)志可理解為序列號,防止 MODBUS TCP通信錯位,例如后發(fā)生的響應(yīng)先到了主機(jī),而早發(fā)生的響應(yīng)后到主機(jī)
【2】單元標(biāo)志可理解為從機(jī)地址,此時已經(jīng)不再重要
modbus tcp 和 TCP IP的關(guān)系
modbus TCP可以理解為發(fā)生在TCP上的應(yīng)用層協(xié)議,既然是TCP協(xié)議那么一個完整的MODBUSTCP報(bào)文必然包括TCP首部,IP首部和Ethernet首部。