引言
如今,智能電能表已逐步取代老式電能表,智能電能表通過DL/T645或DL/T698協(xié)議將數(shù)據(jù)傳輸?shù)讲杉K端,再由采集終端通過上行協(xié)議傳輸?shù)接貌芍髡尽O啾扔谝郧暗氖謩映?整個流程節(jié)省了大量的人力,極大地提高了數(shù)據(jù)采集效率。而搜表功能,則是通過下發(fā)廣播報文,根據(jù)臺區(qū)下電能表的響應(yīng),來統(tǒng)計臺區(qū)電能表數(shù)量,并記錄表地址,從而進行檔案下發(fā)以及數(shù)據(jù)統(tǒng)計等工作。因此,提高搜表效率,有利于減少數(shù)據(jù)采集的整體時間,提高數(shù)據(jù)采集效率。
1RS485搜表原理
在采集終端下發(fā)采集數(shù)據(jù)的報文中,根據(jù)DL/T645或DL/T698協(xié)議,可通過將地址域的一個或多個字節(jié)替換成0xAA的方法,來達到當(dāng)前字節(jié)為任意的效果,從而可以實現(xiàn)廣播一條報文給所有符合條件電能表的功能。如果返回報文可解析,就得到了一塊表的地址:如果不可解析,就說明滿足當(dāng)前地址條件的表數(shù)量不止一塊,多條報文通過同一個通道返回糅雜在了一起,那么可以減少0xAA字節(jié)的數(shù)量,細化地址繼續(xù)搜表,直到報文可解析為止。
2.1現(xiàn)有搜表方法
1.1.1不擴展抄表協(xié)議
在不擴展抄表協(xié)議的情況下,一般是先下發(fā)一條全0xAA地址的廣播報文,確認一下當(dāng)前RS485通道以及當(dāng)前波特率下是否存在電能表。如果返回不止一條報文,無法進行解析,則替換最低位字節(jié)地址逐個搜尋:如果返回報文可解析,則記錄。就這樣逐輪次遞歸,逐個替換高一字節(jié)地址,直到搜齊為止。
1.1.2擴展抄表協(xié)議
杭州海興電力科技股份有限公司于2021年提出了一種注冊搜表的模式[2]:采集終端發(fā)送包含標(biāo)記指令的搜表報文,電能表接收到后通過判斷自身的注冊狀態(tài)來決定是否返回。這樣就有效減少了重復(fù)表地址的返回,減少了搜表輪次。
1.2目前存在的問題
目前來看,普通的RS485搜表方法存在搜表周期長、輪次多、搜表慢的問題,如果遇到低位字節(jié)相同的特殊情況,搜表周期就會達到一個離譜的長度,且其中大部分時間都浪費于無意義的枚舉,存在大量時間冗余。而注冊搜表無疑在速度上提高了很多,但需要電能表回復(fù)特殊的搜表報文,以及判斷自身是否是注冊狀態(tài),這對普通的電能表協(xié)議進行了一部分擴展,在實際應(yīng)用中不適合目前已穩(wěn)定運行的臺區(qū)環(huán)境。
2問題分析
針對1.1中提到的兩種方法,本文提出了一種基于當(dāng)前搜表協(xié)議的RS485通道的搜表算法,通過計算不同遍歷層級的地址總數(shù),以及分析優(yōu)化遍歷的字節(jié)路線,來達到在不擴展協(xié)議的前提下,有效減少搜表中存在的時間冗余,提高搜表效率的效果,且該算法在不規(guī)則表地址的場景下有著良好的調(diào)節(jié)能力。
3優(yōu)化措施
在搜表返回報文的處理上,一般遇到無法解析的報文,只能判斷為多塊表同時返回,從而繼續(xù)下一輪替換地址,但一個字節(jié)的地址替換就要遍歷0x00到0x99共100種情況,如果提前搜出了目標(biāo)表,但無法判斷表的數(shù)量,則必須將所有情況遍歷一遍,這無疑導(dǎo)致了極大的時間冗余。
因此,可以通過一定的方法來判斷返回表的具體數(shù)量。這里以645表舉例,如果將正向有功作為搜表報文,發(fā)送一條[68AAAAAAAAAAAA68110433323433xx16]的報文,返回報文的長度為36字節(jié),算上前置4個0xFE就是40字節(jié),可以通過RS48S通道上返回的報文長度,計算標(biāo)志性字節(jié),如5xFE、0x68的數(shù)量來確定當(dāng)前地址下的表數(shù)量。如果當(dāng)前地址下有返回,那么可以再下發(fā)一遍同樣的報文來確保計算的準(zhǔn)確度。在搜到表了之后,可以對比當(dāng)前地址下的總數(shù)量,如果已經(jīng)滿足,那么就可以舍棄后續(xù)的循環(huán)遍歷,提高搜表效率。
除此之外,當(dāng)收到一條完整可解析報文的時候,可以針對解析出來的表地址,將部分字節(jié)替換成0xAA下發(fā),并且記錄統(tǒng)計返回報文中分析出來的表數(shù)量,加快枚舉進度。比如說,下發(fā)[AAAAAAAAAAAA]地址的一條報文,分析返回報文得出有3塊表。如果3塊表的表地址分別為[xxxxxxaaaaaa][xxxxxxaabbcc][xxxxxxccbbcc],那么當(dāng)表1首先被搜出來之后,可以替換部分字節(jié)的地址下發(fā)報文,得出對應(yīng)的報文數(shù)量進行分析,從而計算優(yōu)化遍歷順序。比如上述報文中得出表1地址,可以將全AA地址中每一字節(jié)分別替換為表1中對應(yīng)字節(jié)來下發(fā)報文,得到返回報文的表數(shù)量分別為:[333211],由此可以分析得出,當(dāng)前3塊表高位前3字節(jié)相同,且另外存在一塊表低位第3字節(jié)與表1相同。那么當(dāng)繼續(xù)遍歷到[AAAAAAAAAAcc]時發(fā)現(xiàn)存在兩塊表,從上述信息中就可以得出剩余兩塊表低位第3字節(jié)不同,就可以在下一個遍歷層級中直接遍歷低位第3字節(jié),減少了低位第2字節(jié)重復(fù)的輪次。當(dāng)然在實際場景下,同一批次的電能表一般只有后幾個字節(jié)存在區(qū)別,但是如果遇到不規(guī)則表地址的場景,本文的方法可以有效提高調(diào)節(jié)容錯能力。
具體操作流程如下:
設(shè)當(dāng)前臺區(qū)下存有N塊64S電能表,通道為RS48S,波特率2400。
(1)發(fā)送報文[68AAAAAAAAAAAA68110433323433xx16],根據(jù)返回的報文計算得出條數(shù)N,重復(fù)發(fā)送計算以保證準(zhǔn)確性。
(2)替換最低位地址,從00~99逐個自增,直到接收到返回報文。
(3)計算返回報文中完整條數(shù)K,如果K=1,則解析報文,得到當(dāng)前表地址,存入地址列表中,并且判斷當(dāng)前所得的地址條數(shù)是否達到了上一級計算出的地址總數(shù)K1:如果達到了,則比較上上級,直到達到總數(shù)N搜表結(jié)束或者未達到某一級的總數(shù)K為止。
(4)如果達到了某一級未達到總數(shù)K,則將剛解析出來的地址中部分字節(jié)替換成0xAA,發(fā)送并統(tǒng)計返回的報文條數(shù),根據(jù)當(dāng)前總數(shù)K和各個字節(jié)返回的報文條數(shù)M,可以分析得出最適合下一輪遍歷的字節(jié)位置。且當(dāng)前輪次總數(shù)滿足不繼續(xù)遍歷,回到上一級。
(5)在步驟(3)中,如果當(dāng)前報文條數(shù)K>1,則可以通過替換之前輪次步驟(4)中計算得出的字節(jié),進行下一級的遍歷循環(huán),重復(fù)步驟(2)到(5):如果之前不存在步驟(4),則從低到高字節(jié)順替。下一級遍歷需要搜尋的地址總數(shù)為K。
(6)當(dāng)滿足搜表總數(shù)N,則在步驟(3)中退出搜表。整體流程如圖1所示。
4驗證結(jié)果
在實際驗證過程中,通過算法得到的電能表總數(shù)可以很好地幫助節(jié)省不同層級搜表所需要的時間,這在提高整體效率上做出了巨大貢獻。但是,這種提升在一定程度上取決于被搜表的表地址,所有表的表地址中有差異的最高地址位的字節(jié)值越接近下限0x00,則提高效率的效果越好。但是當(dāng)有差異的最高地址位增加時,由于不同輪次減少的時間是相互乘加的,這樣總體節(jié)約的輪次就顯得很可觀。整體期望值如表1所示。
但在實際驗證中發(fā)現(xiàn),優(yōu)化下級遍歷路線的方法效率提升并不明顯。在現(xiàn)場臺區(qū)環(huán)境下,臺區(qū)下的電能表基本都是同一批次下的,因此表地址差異并不會太大,基本都是最低2字節(jié)上存在差異,且表地址分布較為密集,路線的選擇并不能帶來較大的優(yōu)化。但驗證過程中也測試了極端的低位相同、高位不同的表號,路線優(yōu)化選擇方法在這種情況下確實能顯著地提高搜表效率。
除此之外,本文的方法尚有許多不足之處。比如在兩只表處于同一遍歷輪次中時,搜出第一只表并不能加快搜第二只表的速度。在這方面,文中提到的注冊模式就能極大地提高效率,那么在當(dāng)前表計協(xié)議的范疇內(nèi),是否有方法能夠達到相似的效果,還有待研究。本文通過解析特殊字符來判斷完整報文數(shù)量,那么是否可以通過算法剔除已搜到的電能表報文,得出其余報文的表地址或表地址區(qū)間,還可以進行深入研究。
5結(jié)語
本文介紹了目前電力系統(tǒng)中常用的RS485搜表機制,講解了基礎(chǔ)的搜表原理及流程,并對目前主流搜表方法進行了分析,結(jié)合它們的優(yōu)點提出了一種基于當(dāng)前表記協(xié)議的高效率搜表方法,通過報文分析及數(shù)據(jù)處理,優(yōu)化搜表的遍歷路線,減少搜完后的冗余時間,進一步提高搜表的效率。