通常來說Modbus網(wǎng)關(guān)的網(wǎng)口接主站,網(wǎng)口采用Modbus TCP協(xié)議,串口接各種RS485的儀表,串口采用Modbus RTU協(xié)議。但是也有少量情況是串口的(RS485)作為主站需要獲得Modbus TCP從站的數(shù)據(jù),如下圖所示:
由于Modbus RTU和Modbus TCP的尋址方式不同,普通的方式無法實(shí)現(xiàn)這種功能。RTU一般通過Modbus RTU指令的第一個(gè)字節(jié)作為站地址,比如01 03 00 00 00 01 84 0a 的第一個(gè)字節(jié)01就是指查詢站地址1,所有RS485總線上非01地址的設(shè)備都不會應(yīng)答。但是當(dāng)Modbus TCP協(xié)議由于采用TCP連接作為綁定主站和從站的紐帶,不再需要從站地址的概念,只要是發(fā)給Modbus TCP從站的查詢,它都會做應(yīng)答。它忽略了01這個(gè)站地址字節(jié),實(shí)際上Modbus TCP采用的是IP地址作為站號的識別。
普通的方式RTU主站的查詢過程如下:
1.首先6路Modbus網(wǎng)關(guān)的(2個(gè)ZLAN5143×1路和1個(gè)ZLAN5443D×4路)分別配置連接到6個(gè)Modbus TCP從站,地址分別為192.168.1.61、192.168.1.62、192.168.1.63~192.168.1.66。Modbus RTU主站的RS485和6路Modbus網(wǎng)關(guān)的RS485連接在一起。
2.Modbus RTU主站PLC向RS485總線發(fā)送指令3d 03 00 00 00 01 81 36。
3.所有的6路Modbus網(wǎng)關(guān)都會收到3d 03 00 00 00 01 81 36,并且都轉(zhuǎn)化為Modbus TCP格式的數(shù)據(jù)00 00 00 00 00 06 3d 03 00 00 00 01,分別發(fā)給192.168.1.62、192.168.1.63~192.168.1.66。
4.雖然00 00 00 00 00 06 3d 03 00 00 00 01指令里面也有3d這個(gè)地址字段(十六進(jìn)制3d就是61),但是每個(gè)Modbus TCP從站不會關(guān)心這個(gè)站地址,所有的從站都會給出應(yīng)答。
5.6路Modbus網(wǎng)關(guān)幾乎同時(shí)收到Modbus TCP從站的應(yīng)答,并同時(shí)發(fā)送到RS485總線,產(chǎn)生了總線的沖突,數(shù)據(jù)錯(cuò)亂。
以上方案的最終結(jié)果是由于數(shù)據(jù)沖突和無法使用。
根據(jù)上一節(jié)的分析關(guān)鍵的問題在于Modbus TCP和RTU的從站識別方式不同,前者是IP地址,后者是站地址。我們無法修改RTU主站PLC的協(xié)議也無法修改Modbus TCP從站的協(xié)議。所以需要在Modbus網(wǎng)關(guān)內(nèi)部做這種地址轉(zhuǎn)換。
具體的實(shí)現(xiàn)方法是:將Modbus TCP從站的IP地址的最后一個(gè)字段作為Modbus RTU的站地址。所以為了訪問192.168.1.62、192.168.1.63~192.168.1.66,RTU主站發(fā)送的指令應(yīng)該分別對應(yīng)站地址61、62、63~66,即:3d 03 00 00 00 01 81 36、3e 03 00 00 00 01 81 05等。
Modbus網(wǎng)關(guān)在收到RS485總線指令后會識別站地址,如果站地址和自己連接的Modbus TCP的IP地址最后一個(gè)字段相同則轉(zhuǎn)發(fā),否則不做轉(zhuǎn)發(fā)。也就是需要有一個(gè)小的定制功能。
有了這個(gè)定制功能后,再按照之前的通訊步驟運(yùn)行時(shí),由于現(xiàn)在只有一路Modbus網(wǎng)關(guān)轉(zhuǎn)發(fā)了數(shù)據(jù),相應(yīng)的也就只有一路返回?cái)?shù)據(jù)轉(zhuǎn)發(fā)到RS485總線上,避免了沖突。
為了實(shí)現(xiàn)這個(gè)小的定制功能,需要從卓嵐那邊獲得“RTU做主站”的配置文件,將其下載到設(shè)備內(nèi)部,重新上電即可。
在實(shí)際的使用場合中有比圖1更為有效的方法,即每個(gè)Modbus網(wǎng)關(guān)可以連接6個(gè)目的IP,所以以上圖1,只需要一臺ZLAN5143即可實(shí)現(xiàn),只不過需要配置額外的5個(gè)目的IP分別連接到192.168.1.62、192.168.1.63~192.168.1.66。
“RTU做主站”的定制功能會識別連接的IP地址,目的IP地址最后一個(gè)字節(jié)和RTU從站地址不同不會轉(zhuǎn)發(fā),所以也可以用單臺Modbus網(wǎng)關(guān)實(shí)現(xiàn)6個(gè)Modbus TCP從站的查詢。