1.概述
可配置Modbus網(wǎng)關(guān)可以預(yù)先配置Modbus RTU端的設(shè)備的地址、功能碼和寄存器列表,并存儲(chǔ)到網(wǎng)關(guān)內(nèi)部。網(wǎng)關(guān)會(huì)自動(dòng)采集這些配置的RTU設(shè)備的數(shù)據(jù),然后映射到連續(xù)的Modbus TCP寄存器地址,從而允許Modbus TCP端一次性讀取所有的設(shè)備的不同寄存器的數(shù)據(jù)。它的這種地址映射功能是對(duì)普通的Modbus RTU轉(zhuǎn)Modbus TCP的Modbus網(wǎng)關(guān)的補(bǔ)充。
卓嵐ZLAN5143、ZLAN7144、ZLAN7146、ZLAN5207M、ZLAN5407M等都支持可配置Modbus網(wǎng)關(guān)功能。其中ZLAN5143需要固件版本1.579及以上版本,配合ZLVircom5.15及以上版本來使用。7144需要固件版本1.491及以上版本。卓嵐可配置Modbus網(wǎng)關(guān)簡(jiǎn)稱為“ZLMB網(wǎng)關(guān)”。
可配置Modbus網(wǎng)關(guān)具有如下的優(yōu)點(diǎn):
1.指令合并:可以將分散的不同的站地址、寄存器映射到同一片寄存器。這樣Modbus TCP端可以用一條指令采集所有數(shù)據(jù),而不是分為幾條指令分別去采集,實(shí)現(xiàn)了Modbus TCP端的傳輸效率。
2.預(yù)先采集:雖然之前的“存儲(chǔ)型Modbus”可以自動(dòng)采集一些數(shù)據(jù),但是自動(dòng)采集是在Modbus TCP端查詢第一條指令開始的,所以第一條指令本身的返回?cái)?shù)據(jù)還是需要等待串口的信息的返回。而可配置Modbus網(wǎng)關(guān)的自動(dòng)采集是從網(wǎng)關(guān)上電就開始,第一條指令仍然可以快速應(yīng)答。
多主機(jī)支持:可以支持多臺(tái)Modbus TCP客戶端連接上讀取網(wǎng)關(guān)數(shù)據(jù)。
4.支持寫指令:目前對(duì)于重新映射過的寄存器地址,Modbus TCP端不僅可以使用重新映射的地址讀到數(shù)據(jù),而且可以向這個(gè)重新映射的地址使用05和06指令寫入數(shù)據(jù)。
5.支持任意長(zhǎng)度讀取:ZLVircom配置工具會(huì)顯示RTU端的寄存器地址和TCP端的寄存器地址的映射關(guān)系。Modbus TCP端不僅可以整片讀取寄存器和單個(gè)讀取寄存器,而且可以任意長(zhǎng)度來讀取合法地址和長(zhǎng)度的寄存器內(nèi)容。
6.支持離線提示:當(dāng)某個(gè)RTU設(shè)備從RS485總線上離線后,從Modbus TCP這端查詢到的數(shù)據(jù)將全部變?yōu)?,提示設(shè)備的離線。
7.支持丟失重發(fā):由于RS485總線容易存在干擾,假如第一次查詢指令沒有應(yīng)答,則網(wǎng)關(guān)會(huì)再發(fā)送一條指令,并等待超時(shí)時(shí)間,如果確認(rèn)第二次也沒有應(yīng)答才認(rèn)為設(shè)備離線。通過ZLVircom可以設(shè)置第一次發(fā)送的時(shí)間和第二次超時(shí)應(yīng)答時(shí)間。
8.支持大量設(shè)備和寄存器:目前支持100條RTU查詢指令和500個(gè)寄存器數(shù)量,同時(shí)被訪問。
2.簡(jiǎn)單例子
2.1.RTU采集要求
這里以ZLAN5143為例來介紹,首先確認(rèn)固件版本為1.579及以上版本, ZLVircom為5.15及以上版本。
假設(shè)ZLAN5143的RS485下面接了2個(gè)Modbus RTU設(shè)備,需要采集的信息如下:
記錄編號(hào) | 從站地址 | 功能碼 | 寄存器地址 | 長(zhǎng)度 |
---|---|---|---|---|
1 | 1 | 3 | 2 | 4 |
2 | 2 | 1 | 5 | 9 |
3 | 3 | 3 | 2 | 4 |
現(xiàn)在需要ZLVircom進(jìn)行配置,實(shí)現(xiàn)可以配置Modbus網(wǎng)關(guān)。
2.2.ZLVircom配置
運(yùn)行ZLVircom,進(jìn)入設(shè)備管理點(diǎn)擊搜索設(shè)備選擇一個(gè)需要配置的設(shè)備點(diǎn)擊編輯設(shè)備點(diǎn)擊下面“固件和配置”按鈕,彈出如下對(duì)話框:
圖 1進(jìn)入ZLMB配置方法
這里選擇“網(wǎng)頁目錄下載”,并且點(diǎn)擊“…”,選擇一個(gè)之前新建的空目錄,用于存放配置信息。然后點(diǎn)擊“ZLMB網(wǎng)關(guān)”按鈕,彈出如下對(duì)話框:
圖 2可配置Modbus網(wǎng)關(guān)設(shè)置列表
點(diǎn)擊“添加”按鈕可以逐條添加表1的RTU指令。這里需要注意的是網(wǎng)關(guān)會(huì)將Modbus TCP這端的寄存器地址從0開始自動(dòng)按順序增加。所以為了讓同一個(gè)功能碼的指令可以一次性分到同一個(gè)區(qū)域,應(yīng)該將相同功能碼的指令連續(xù)添加。也就是將表1的記錄編號(hào)1和記錄編號(hào)3放在一次,而編號(hào)2放在最后。添加的3個(gè)圖如下:
圖 3表1的編號(hào)1 RTU指令的配置
對(duì)于編號(hào)1的RTU指令的配置對(duì)話框解釋如下:
1.記錄編號(hào):這個(gè)是系統(tǒng)根據(jù)添加的順序自動(dòng)增加編號(hào),不可修改。不一定和表1一致。
2.從站地址:該RTU指令的RTU端從站地址。
3.Modbus功能碼:該RTU指令的功能碼。
4.寄存器起始地址:RTU端指令的寄存器開始地址。
5.寄存器長(zhǎng)度:RTU端指令的寄存器查詢長(zhǎng)度。
6.串口輪詢間隔:這個(gè)間隔是網(wǎng)關(guān)正常發(fā)送查詢指令后等待應(yīng)答返回的時(shí)間。也是輪詢的速度。所有RTU指令的這個(gè)參數(shù)是一樣的,如果不一樣取最大者。
7.超時(shí)應(yīng)答時(shí)間:這個(gè)時(shí)間是在正常發(fā)送查詢指令接收不到應(yīng)答時(shí),立刻發(fā)送第二條查詢時(shí)的等待應(yīng)答返回時(shí)間。所有RTU指令的這個(gè)參數(shù)是一樣的,如果不一樣取最大者。
8.支持06或者05寫指令:勾選這個(gè)選項(xiàng)將可以支持Modbus TCP端對(duì)RTU設(shè)備的數(shù)據(jù)的改寫。若不需要改寫則不要勾選,因?yàn)楣催x,會(huì)額外增加內(nèi)存和計(jì)算量開銷。
9.Modbus TCP寄存器地址:這個(gè)地址是系統(tǒng)自動(dòng)按照順序計(jì)算的,Modbus TCP端只要按照這個(gè)起始地址讀取即可得到這條RTU指令獲得的數(shù)據(jù)。這個(gè)參數(shù)是地址映射的關(guān)鍵信息。
確定后,再次點(diǎn)擊“添加”,添加表1編號(hào)3的指令:
圖 4表1的編號(hào)3 RTU指令的配置
這里看到Modbus TCP寄存器地址自動(dòng)增加到4。說明兩條指令合并的寄存器從0~7,整個(gè)寄存器范圍都可以一次性讀取。
添加表1編號(hào)2的指令:
圖 5表1的編號(hào)2 RTU指令的配置
這里系統(tǒng)自動(dòng)分配的Modbus TCP地址為01指令的128地址(十進(jìn)制)。最后列出的表格是:
圖 6 RTU和Modbus TCP寄存器映射關(guān)系表
這個(gè)表格列出了RTU和Modbus TCP寄存器映射關(guān)系。也清楚的展示了,如果用戶需要獲得RTU端的某個(gè)設(shè)備的數(shù)據(jù)需要用什么功能碼的什么寄存器地址去讀取數(shù)據(jù)。
例如需要讀取從站地址2功能碼1、寄存器地址5、長(zhǎng)度9的數(shù)據(jù)可以使用Modbus TCP指令的任意從站地址、功能碼1、寄存器地址128、長(zhǎng)度9來讀取。 最后點(diǎn)擊“保存并返回”來保存設(shè)計(jì),如果點(diǎn)擊“不保存返回”則放棄設(shè)計(jì)。同時(shí)可以通過選擇某一行點(diǎn)擊“編輯”進(jìn)行編輯,點(diǎn)擊“刪除”刪除某個(gè)RTU指令。
點(diǎn)擊“保存并返回”后回到“卓嵐網(wǎng)頁/程序下載工具”界面。在這個(gè)界面點(diǎn)擊“下載按鈕”。下載完畢后彈出“傳輸完畢…”按鈕,然后點(diǎn)擊確定,設(shè)備將會(huì)自動(dòng)重啟,并加載這個(gè)配置。
2.3.數(shù)據(jù)測(cè)試
現(xiàn)在使用串口模擬這個(gè)RTU設(shè)備,并進(jìn)行測(cè)試,RTU端模擬參數(shù)如下圖。
圖 7 模擬表1的3個(gè)RTU設(shè)備
然后將ZLAN5143連接到這個(gè)計(jì)算機(jī)串口。假如設(shè)備的IP為192.168.0.200,端口4196,Modbus TCP軟件連接上這個(gè)IP和端口后讀取如下的數(shù)據(jù)。根據(jù)映射關(guān)系表,應(yīng)該讀取0~7這8個(gè)寄存器,功能碼為03;應(yīng)該讀取128到136這9個(gè)bit性寄存器,功能碼為01。
圖 8 Modbus讀取網(wǎng)關(guān)數(shù)據(jù)
如圖所示,可配置Modbus網(wǎng)關(guān)實(shí)現(xiàn)了站地址1、站地址3這兩個(gè)RTU Modbus的數(shù)據(jù)合并,將其合并到寄存器0~7整片區(qū)域,實(shí)現(xiàn)指令合并功能。 使用SockeDlgTest連接上192.168.0.200的4196端口發(fā)送12 34 00 00 00 06 01 03 00 00 00 00指令,立即返回?cái)?shù)據(jù)。
圖 9 預(yù)采集效果
如圖所示返回時(shí)間大約為18ms。這個(gè)反應(yīng)時(shí)間比“存儲(chǔ)型”Modbus的第一次應(yīng)答時(shí)間要快速很多。 打開多個(gè)Modbus TCP客戶端可以同時(shí)對(duì)網(wǎng)關(guān)進(jìn)行數(shù)據(jù)采集。說明可以支持多主機(jī)功能。 在Modbus TCP端修改某個(gè)寄存器的值,則在RTU端的數(shù)據(jù)就被修改,同時(shí)也會(huì)反饋到Modbus TCP端。這說明發(fā)送的05/06單線圈修改和單寄存器修改指令寫是支持的。
修改任意長(zhǎng)度的寄存器長(zhǎng)度讀取,例如修改為從01地址開始的06個(gè)長(zhǎng)度的寄存器內(nèi)容,同樣可以正常讀取到Modbus TCP軟件中。說明支持任意長(zhǎng)度的數(shù)據(jù)讀取。 將Modbus RTU軟件關(guān)閉或者關(guān)閉串口。則Modbus TCP軟件中的數(shù)據(jù)全部變?yōu)?,可見可以通過數(shù)據(jù)全部變?yōu)?來反映一個(gè)儀表的離線還是在線。 關(guān)閉Modbus RTU軟件,使用ZLComDebug打開COM口接收數(shù)據(jù),可以看到當(dāng)一條指令沒有應(yīng)答時(shí)會(huì)重發(fā)一次。說明網(wǎng)關(guān)具有數(shù)據(jù)重發(fā)功能。
圖 10 數(shù)據(jù)重發(fā)功能
2.4.設(shè)置離線默認(rèn)值
圖 11 設(shè)置離線默認(rèn)值
設(shè)置離線默認(rèn)值功能,可以可以讓設(shè)備離線的時(shí)候采集到一個(gè)特殊的值,例如65535(也就是有符號(hào)的-1)。因?yàn)橹暗哪J(rèn)值為0,有些設(shè)備的0是一個(gè)可能出現(xiàn)的值,無法區(qū)分是離線還是有效數(shù)據(jù)。
這個(gè)離線只要求高字節(jié)和低字節(jié)一樣,即可以設(shè)置:v*256+v,其中v≤255且v>=0。 只有第一條記錄的設(shè)置值是有效的,其它記錄仿造第一條記錄的參數(shù)。這里只看第一條記錄的參數(shù)還包括:串口輪詢間隔、超時(shí)應(yīng)答時(shí)間、支持06或者05寫指令。
3.其它注意事項(xiàng)
1.某些bit型數(shù)據(jù)無法合并,如下圖,01/02指令的第一個(gè)指令的數(shù)據(jù)長(zhǎng)度為9,不是16的倍數(shù)。所以無法通過從128開始的地址讀取19個(gè)來一起讀取所有數(shù)據(jù)。而是應(yīng)該按照軟件給出的128地址讀9個(gè),144地址讀10個(gè),分別讀取。
圖 12 Bit數(shù)據(jù)的連續(xù)
2.Modbus TCP的站地址無所謂,一般用01即可。
3.如果發(fā)現(xiàn)無法支持05/06指令,請(qǐng)確認(rèn)設(shè)計(jì)的時(shí)候是否已經(jīng)勾選05/06支持選項(xiàng)。
4.注意02功能的寄存器是無法被修改的。
5.注意Modbus網(wǎng)關(guān)的“轉(zhuǎn)化協(xié)議”部分不要選擇“Modbus TCP轉(zhuǎn)RTU”,請(qǐng)選擇“無”協(xié)議。
6.現(xiàn)在可以支持多寄存器寫入的15/16指令。但是不要跨區(qū)域?qū)懭搿@缭瓉淼牡刂窞?個(gè)寄存器是一起排列的,如果試圖跨區(qū)域一次寫入超過2個(gè)寄存器將會(huì)出錯(cuò)。
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19104瀏覽量
304823 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120232 -
MODBUS
+關(guān)注
關(guān)注
28文章
1799瀏覽量
76954 -
網(wǎng)關(guān)
+關(guān)注
關(guān)注
9文章
4444瀏覽量
51057 -
RTU
+關(guān)注
關(guān)注
0文章
412瀏覽量
28672
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論