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