產品中心
可配(pei)置Modbus網關可以預(yu)先配(pei)置Modbus RTU端(duan)的設(she)(she)備的地址、功能碼和寄存器列表,并(bing)存儲到(dao)網關內部。網關會自(zi)動采集這(zhe)些配(pei)置的RTU設(she)(she)備的數(shu)據(ju),然后(hou)映(ying)射到(dao)連續(xu)的Modbus TCP寄存器地址,從而允許Modbus TCP端(duan)一次性讀取(qu)所有(you)的設(she)(she)備的不同(tong)寄存器的數(shu)據(ju)。它的這(zhe)種地址映(ying)射功能是對普通的Modbus RTU轉Modbus TCP的Modbus網關的補充。
卓嵐(lan)ZLAN5143、ZLAN7144、ZLAN7146、ZLAN5207M、ZLAN5407M等(deng)都支持可配(pei)置(zhi)Modbus網關功(gong)能。其中ZLAN5143需(xu)要(yao)固件版(ban)(ban)(ban)本1.579及以上(shang)版(ban)(ban)(ban)本,配(pei)合ZLVircom5.15及以上(shang)版(ban)(ban)(ban)本來(lai)使用。7144需(xu)要(yao)固件版(ban)(ban)(ban)本1.491及以上(shang)版(ban)(ban)(ban)本。卓嵐(lan)可配(pei)置(zhi)Modbus網關簡稱為“ZLMB網關”。
1.指(zhi)令(ling)合并:可以將(jiang)分(fen)散的(de)不同的(de)站(zhan)地址(zhi)、寄(ji)存器映射到(dao)同一(yi)片寄(ji)存器。這(zhe)樣Modbus TCP端可以用(yong)一(yi)條指(zhi)令(ling)采集所有數據,而不是(shi)分(fen)為幾條指(zhi)令(ling)分(fen)別(bie)去采集,實(shi)現了Modbus TCP端的(de)傳(chuan)輸效率。
2.預(yu)先采集(ji):雖然(ran)(ran)之(zhi)前(qian)的(de)“存儲型Modbus”可(ke)以(yi)(yi)自動(dong)采集(ji)一(yi)些數據(ju),但是(shi)(shi)自動(dong)采集(ji)是(shi)(shi)在Modbus TCP端查詢第一(yi)條指令開(kai)始(shi)(shi)的(de),所(suo)以(yi)(yi)第一(yi)條指令本身的(de)返回(hui)數據(ju)還(huan)是(shi)(shi)需要(yao)等待(dai)串口的(de)信息(xi)的(de)返回(hui)。而(er)可(ke)配置(zhi)Modbus網關的(de)自動(dong)采集(ji)是(shi)(shi)從網關上電就開(kai)始(shi)(shi),第一(yi)條指令仍然(ran)(ran)可(ke)以(yi)(yi)快速應答。
多主機支持(chi):可以支持(chi)多臺(tai)Modbus TCP客戶端連接上讀取(qu)網關數(shu)據。
4.支持寫指令:目前對(dui)于(yu)重(zhong)新(xin)映射(she)過的(de)寄存器地址,Modbus TCP端(duan)不僅可以(yi)使用(yong)重(zhong)新(xin)映射(she)的(de)地址讀到數據(ju),而且可以(yi)向這(zhe)個(ge)重(zhong)新(xin)映射(she)的(de)地址使用(yong)05和06指令寫入數據(ju)。
5.支持任意長(chang)(chang)度(du)讀(du)取(qu):ZLVircom配置工(gong)具(ju)會顯示RTU端的寄(ji)(ji)存(cun)(cun)(cun)器(qi)地(di)(di)址和(he)TCP端的寄(ji)(ji)存(cun)(cun)(cun)器(qi)地(di)(di)址的映射(she)關系(xi)。Modbus TCP端不僅可(ke)以(yi)整片讀(du)取(qu)寄(ji)(ji)存(cun)(cun)(cun)器(qi)和(he)單個(ge)讀(du)取(qu)寄(ji)(ji)存(cun)(cun)(cun)器(qi),而且(qie)可(ke)以(yi)任意長(chang)(chang)度(du)來讀(du)取(qu)合(he)法地(di)(di)址和(he)長(chang)(chang)度(du)的寄(ji)(ji)存(cun)(cun)(cun)器(qi)內(nei)容。
6.支(zhi)持離(li)線提(ti)(ti)示(shi):當某個RTU設備從RS485總(zong)線上離(li)線后,從Modbus TCP這端查詢到的(de)數(shu)據將全部(bu)變為0,提(ti)(ti)示(shi)設備的(de)離(li)線。
7.支(zhi)持丟失重發:由于RS485總線(xian)(xian)容易存在干擾,假如(ru)第(di)(di)一次查詢指(zhi)令沒有應答(da),則網(wang)關會(hui)再發送(song)一條指(zhi)令,并等(deng)待超時(shi)時(shi)間,如(ru)果確(que)認(ren)(ren)第(di)(di)二(er)次也沒有應答(da)才(cai)認(ren)(ren)為設備(bei)離線(xian)(xian)。通過(guo)ZLVircom可以設置第(di)(di)一次發送(song)的時(shi)間和第(di)(di)二(er)次超時(shi)應答(da)時(shi)間。
8.支持大量設備(bei)和寄存器:目前支持100條RTU查詢指令和500個寄存器數(shu)量,同時被訪問。
2.1.RTU采集要求
這里(li)以ZLAN5143為(wei)例(li)來(lai)介紹,首先確認固件(jian)版(ban)本為(wei)1.579及以上版(ban)本, ZLVircom為(wei)5.15及以上版(ban)本。
假設(she)ZLAN5143的RS485下(xia)面接了2個Modbus RTU設(she)備,需(xu)要采集的信息如下(xia):
記錄編號 | 從站地址 | 功能碼 | 寄存器地址 | 長度 |
1 | 1 | 3 | 2 | 4 |
2 | 2 | 1 | 5 | 9 |
3 | 3 | 3 | 2 | 4 |
現在需要ZLVircom進行配置,實現可以(yi)配置Modbus網(wang)關(guan)。
2.2.ZLVircom配置
運行ZLVircom,進入(ru)設備管理點(dian)擊搜索(suo)設備選(xuan)擇一個需(xu)要(yao)配(pei)置(zhi)的設備點(dian)擊編(bian)輯設備點(dian)擊下面(mian)“固件(jian)和配(pei)置(zhi)”按鈕(niu),彈出如下對話(hua)框(kuang):
圖 1進入ZLMB配置方法
這里選擇“網頁目錄(lu)下載”,并(bing)且點擊(ji)“…”,選擇一個之(zhi)前新建的空目錄(lu),用(yong)于存放配置(zhi)信息。然后點擊(ji)“ZLMB網關”按(an)鈕(niu),彈(dan)出如下對話框:
圖 2可(ke)配置Modbus網關設置列表
點擊“添(tian)加(jia)(jia)”按鈕可(ke)以(yi)逐條添(tian)加(jia)(jia)表1的RTU指(zhi)令。這里需要(yao)注意的是網關會將Modbus TCP這端的寄存器地(di)址從0開始自動按順序(xu)增加(jia)(jia)。所以(yi)為(wei)了讓(rang)同(tong)一個(ge)功(gong)能碼(ma)的指(zhi)令可(ke)以(yi)一次性分(fen)到(dao)同(tong)一個(ge)區域,應該將相同(tong)功(gong)能碼(ma)的指(zhi)令連續添(tian)加(jia)(jia)。也就是將表1的記(ji)錄(lu)編(bian)(bian)號1和記(ji)錄(lu)編(bian)(bian)號3放(fang)在一次,而(er)編(bian)(bian)號2放(fang)在最后。添(tian)加(jia)(jia)的3個(ge)圖如下:
圖 3表(biao)1的編號1 RTU指令的配置
對于編號1的RTU指令(ling)的配置對話框解釋如下:
1.記錄(lu)編號:這個是系統(tong)根據添加(jia)的順(shun)序自動(dong)增(zeng)加(jia)編號,不可修改。不一定(ding)和表1一致(zhi)。
2.從(cong)站地址:該RTU指令的RTU端(duan)從(cong)站地址。
3.Modbus功能(neng)碼:該RTU指令的功能(neng)碼。
4.寄存器起(qi)始地(di)址:RTU端指令的寄存器開始地(di)址。
5.寄存器長(chang)度:RTU端指令的(de)寄存器查詢長(chang)度。
6.串(chuan)口輪詢間(jian)隔:這個(ge)(ge)間(jian)隔是(shi)網關正常(chang)發送查(cha)詢指(zhi)令后等待(dai)應(ying)答返回的時間(jian)。也是(shi)輪詢的速度。所有RTU指(zhi)令的這個(ge)(ge)參數是(shi)一樣的,如(ru)果(guo)不一樣取(qu)最大者(zhe)。
7.超時應答時間(jian):這(zhe)個時間(jian)是在(zai)正常發送查詢指令接收不(bu)到應答時,立刻發送第二條查詢時的等待應答返回(hui)時間(jian)。所有RTU指令的這(zhe)個參數是一樣的,如(ru)果(guo)不(bu)一樣取最大者。
8.支(zhi)持06或(huo)者05寫(xie)指令:勾(gou)選(xuan)(xuan)這個(ge)選(xuan)(xuan)項將可以(yi)支(zhi)持Modbus TCP端對(dui)RTU設備(bei)的數據的改(gai)寫(xie)。若不(bu)需要改(gai)寫(xie)則不(bu)要勾(gou)選(xuan)(xuan),因為勾(gou)選(xuan)(xuan),會額外增加內存(cun)和計算量開(kai)銷(xiao)。
9.Modbus TCP寄存器地(di)址:這個地(di)址是系統自動按照(zhao)順序計算的,Modbus TCP端只要(yao)按照(zhao)這個起始(shi)地(di)址讀取即可得(de)(de)到(dao)這條(tiao)RTU指令(ling)獲得(de)(de)的數(shu)(shu)據。這個參數(shu)(shu)是地(di)址映射的關鍵信息(xi)。
確定后,再次點擊“添(tian)(tian)加”,添(tian)(tian)加表1編號3的指(zhi)令:
圖(tu) 4表(biao)1的(de)編號(hao)3 RTU指令(ling)的(de)配置
這里(li)看到Modbus TCP寄(ji)存器(qi)地址自(zi)動增加(jia)到4。說明兩條指令合并(bing)的寄(ji)存器(qi)從0~7,整個寄(ji)存器(qi)范圍(wei)都可以一次性讀取。
添加表1編號(hao)2的(de)指令:
圖 5表1的編(bian)號2 RTU指令的配置
這里系(xi)統自動分配的(de)Modbus TCP地址(zhi)為01指令的(de)128地址(zhi)(十進制)。最后列出的(de)表格是:
圖 6 RTU和(he)Modbus TCP寄存器(qi)映射關系表
這個表(biao)格(ge)列(lie)出(chu)了(le)RTU和Modbus TCP寄(ji)存器(qi)映(ying)射關系。也清楚(chu)的展(zhan)示了(le),如果用戶需要(yao)(yao)獲得RTU端的某個設備的數據(ju)需要(yao)(yao)用什么(me)功能碼的什么(me)寄(ji)存器(qi)地址去讀(du)取數據(ju)。
例(li)如需要讀(du)取從站地(di)址(zhi)2功能碼(ma)1、寄(ji)存(cun)(cun)器地(di)址(zhi)5、長度(du)9的(de)(de)數據可以(yi)(yi)使用Modbus TCP指(zhi)令的(de)(de)任意從站地(di)址(zhi)、功能碼(ma)1、寄(ji)存(cun)(cun)器地(di)址(zhi)128、長度(du)9來讀(du)取。 最(zui)后點擊(ji)“保(bao)(bao)存(cun)(cun)并返(fan)回”來保(bao)(bao)存(cun)(cun)設計(ji),如果點擊(ji)“不保(bao)(bao)存(cun)(cun)返(fan)回”則放棄(qi)設計(ji)。同時可以(yi)(yi)通過選擇某(mou)一行點擊(ji)“編輯(ji)”進行編輯(ji),點擊(ji)“刪(shan)除”刪(shan)除某(mou)個RTU指(zhi)令。
點(dian)擊(ji)“保存(cun)并返回(hui)”后回(hui)到(dao)“卓(zhuo)嵐網頁/程序下(xia)(xia)載(zai)工(gong)具”界面。在這個界面點(dian)擊(ji)“下(xia)(xia)載(zai)按鈕”。下(xia)(xia)載(zai)完畢后彈出“傳輸完畢…”按鈕,然后點(dian)擊(ji)確定(ding),設備(bei)將會自動重啟,并加載(zai)這個配置(zhi)。
2.3.數據測試
現在使(shi)用串口模擬(ni)這個RTU設備(bei),并進行(xing)測(ce)試,RTU端模擬(ni)參數如下圖。
圖 7 模擬表1的3個RTU設備(bei)
然后(hou)將ZLAN5143連接(jie)到這(zhe)個(ge)計(ji)算機串口(kou)。假如設備的IP為192.168.0.200,端口(kou)4196,Modbus TCP軟件連接(jie)上這(zhe)個(ge)IP和端口(kou)后(hou)讀取(qu)如下的數據。根據映射關系表,應(ying)該(gai)讀取(qu)0~7這(zhe)8個(ge)寄存(cun)器(qi),功(gong)(gong)能碼為03;應(ying)該(gai)讀取(qu)128到136這(zhe)9個(ge)bit性寄存(cun)器(qi),功(gong)(gong)能碼為01。
圖 8 Modbus讀取網(wang)關數據
如圖所(suo)示(shi),可(ke)配置Modbus網(wang)關實現(xian)了(le)站地(di)址1、站地(di)址3這兩個RTU Modbus的(de)數據合并,將(jiang)其(qi)合并到寄存(cun)器0~7整片區域(yu),實現(xian)指(zhi)令合并功能。 使用(yong)SockeDlgTest連接上192.168.0.200的(de)4196端口發(fa)送12 34 00 00 00 06 01 03 00 00 00 00指(zhi)令,立即返回數據。
圖 9 預(yu)采(cai)集效果
如(ru)圖(tu)所示(shi)返回(hui)時(shi)間大約為18ms。這個反應時(shi)間比(bi)“存(cun)(cun)儲型”Modbus的(de)第一(yi)次應答(da)時(shi)間要快速很多。 打開(kai)多個Modbus TCP客(ke)戶(hu)端(duan)可以同(tong)時(shi)對網關進(jin)行(xing)數據采集。說(shuo)明可以支持多主機功能。 在(zai)Modbus TCP端(duan)修(xiu)改(gai)某個寄存(cun)(cun)器的(de)值,則在(zai)RTU端(duan)的(de)數據就被修(xiu)改(gai),同(tong)時(shi)也會反饋(kui)到Modbus TCP端(duan)。這說(shuo)明發送的(de)05/06單線圈修(xiu)改(gai)和單寄存(cun)(cun)器修(xiu)改(gai)指令寫是支持的(de)。
修改(gai)任意(yi)長度(du)(du)的(de)寄存(cun)器(qi)長度(du)(du)讀取,例如(ru)修改(gai)為從01地址開始的(de)06個(ge)長度(du)(du)的(de)寄存(cun)器(qi)內(nei)容,同樣可(ke)以(yi)(yi)正常讀取到Modbus TCP軟(ruan)(ruan)件(jian)(jian)中。說(shuo)明(ming)支持任意(yi)長度(du)(du)的(de)數(shu)(shu)(shu)據(ju)(ju)讀取。 將Modbus RTU軟(ruan)(ruan)件(jian)(jian)關閉(bi)或者關閉(bi)串口(kou)。則Modbus TCP軟(ruan)(ruan)件(jian)(jian)中的(de)數(shu)(shu)(shu)據(ju)(ju)全部(bu)變(bian)為0,可(ke)見可(ke)以(yi)(yi)通過數(shu)(shu)(shu)據(ju)(ju)全部(bu)變(bian)為0來(lai)反映一(yi)個(ge)儀表的(de)離線還是在線。 關閉(bi)Modbus RTU軟(ruan)(ruan)件(jian)(jian),使用ZLComDebug打開COM口(kou)接收數(shu)(shu)(shu)據(ju)(ju),可(ke)以(yi)(yi)看到當一(yi)條指令沒有(you)應(ying)答時會重(zhong)(zhong)發一(yi)次。說(shuo)明(ming)網關具有(you)數(shu)(shu)(shu)據(ju)(ju)重(zhong)(zhong)發功能(neng)。
圖(tu) 10 數據重(zhong)發(fa)功(gong)能
2.4.設置離(li)線默認值(zhi)
圖 11 設(she)置離線默(mo)認值
設置離(li)線(xian)默認值功能,可以可以讓設備離(li)線(xian)的時候采(cai)集到一(yi)個(ge)特殊的值,例如65535(也就是有符號的-1)。因為(wei)之(zhi)前的默認值為(wei)0,有些設備的0是一(yi)個(ge)可能出(chu)現的值,無法(fa)區(qu)分是離(li)線(xian)還是有效數據(ju)。
這個離線只要求高字(zi)節和低字(zi)節一(yi)樣,即(ji)可以設置:v*256+v,其中v≤255且v>=0。 只有第(di)(di)一(yi)條(tiao)記錄(lu)的(de)設置值(zhi)是有效的(de),其它(ta)記錄(lu)仿(fang)造第(di)(di)一(yi)條(tiao)記錄(lu)的(de)參數。這里(li)只看第(di)(di)一(yi)條(tiao)記錄(lu)的(de)參數還(huan)包括:串口輪詢間隔、超時(shi)應答(da)時(shi)間、支持06或(huo)者05寫指(zhi)令。
1.某些bit型數據無法(fa)合并,如下(xia)圖,01/02指令的第一個(ge)(ge)指令的數據長度為9,不是(shi)16的倍數。所以無法(fa)通過從(cong)128開始的地址(zhi)讀取19個(ge)(ge)來一起讀取所有數據。而是(shi)應該(gai)按照軟件給出的128地址(zhi)讀9個(ge)(ge),144地址(zhi)讀10個(ge)(ge),分別讀取。
圖(tu) 12 Bit數(shu)據的連續(xu)
2.Modbus TCP的(de)站地(di)址(zhi)無所謂(wei),一(yi)般(ban)用01即可。
3.如果發現無法支持(chi)05/06指令,請確認設計的時(shi)候(hou)是否已經(jing)勾選05/06支持(chi)選項。
4.注(zhu)意02功能的寄存器是(shi)無法被修(xiu)改的。
5.注意Modbus網關的“轉化協議”部分不要選擇“Modbus TCP轉RTU”,請選擇“無”協議。
6.現在可以支持多寄(ji)存(cun)器(qi)寫入的(de)(de)15/16指令。但是(shi)不(bu)要跨區域寫入。例如(ru)原來的(de)(de)地址為2個寄(ji)存(cun)器(qi)是(shi)一起排列的(de)(de),如(ru)果試圖跨區域一次寫入超過(guo)2個寄(ji)存(cun)器(qi)將(jiang)會出錯。