





摘 要: 目前我國用電信息采集系統的建設規模大,設備廠家型號多,通信介質和通信協議種類多,需建立具有互操作性的電能表通信協議標準體系。研究了IEC 62056規范,以此為標準設計完成智能電表規約測試系統的通信協議棧部分。協議采用分層設計,串口通信方式包括以IEC 62056?46為標準的數據鏈路層和物理層,TCP通信方式包含中間封裝層以及采用JAVANIO技術的TCP傳輸層。為了對電表協議本身進行合規測試,設計了單獨的合規測試模塊,用特定的測試用例對電表協議的合規性進行檢測,并反饋結果。
關鍵詞: 智能電表檢測; IEC 62056; 通信協議棧; 合規測試
中圖分類號: TN915.04?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2016)11?0034?04
Abstract: At present, the construction scale of electric?utilization information acquisition system is large in China, the types of equipment manufacturers are various, the communication medias and communication protocols are massive, so it is ne?cessary to establish the interoperable communication protocol standard system for the electric energy meter. In this paper, the IEC62056 Specification is studied, and based on this standard, the part of the communication protocol stack of the smart meter protocol testing system was designed. This protocol adopts hierarchical design, in which the serial communication mode includes data link layer and the physical layer taking IEC 62056?46 as the standard, and TCP communication mode includes the TCP transmission layer using JAVANIO technology and intermediate packaging layer. In order to perform the compliance test of meter protocol itself, a separate compliance test module was designed. The compliance of the meter protocol was detected with a specific test case to feed back the results.
Keywords: smart meter detection; IEC 62056; communication protocol stack; compliance test
0 引 言
在龐大的電力系統中,終端往往存在多種智能電表,由于智能電表通信協議不同,在對用戶管理、電費結算、讀表抄表等方面綜合管理時,會造成系統互連、互操作性困難。因此作為智能電網系統的重要組成部分,亟需對智能電表建立具有互操作性的通信協議標準體系[1]。為了解決上述問題,滿足電力系統對儀表計量一致性、安全性、合法性的要求,IEC根據電力部門的商業過程的特點,制定了IEC 62056《電能計量——用于抄表、費率和負荷控制的數據交換》系列的國際標準體系[2]。
本文基于某電力科學研究院在所承擔的國家“863”項目“靈活互動的用電關鍵技術研究”,提出采用IEC 62056通信協議作為廣西電網AMI用電信息采集系統的標準通信協議,制定基于該協議標準的互操作標準規范,并開發一套規約一致性檢測系統,用于驗證各廠商提供的設備的通信協議是否符合規范,為AMI用電信息采集系統的建設提供服務支持[3]。
1 需求分析
1.1 協議層的劃分
依照IEC 62056的通信協議模型標準和客戶的需求,為智能電表測試系統的通信協議棧制定了三層通信協議模型,包含應用層、數據鏈路層(或中間協議層)和物理層(或TCP層)[4]。
使用IEC 62056標準的計量儀表通信模型采用客戶機/服務器的通信模型,量計費系統(讀表設備)作為客戶機,計量儀表作為服務器,為客戶機提供服務,因此在IEC 62056協議規范中,計量儀表也被稱為服務器[5]。
1.2 應用規范
本系統通信協議棧所采用的通信協議棧規范如下所示:IEC 62056?21,直接本地數據交換;IEC 62056?42,物理層服務協議,基于連接的異步數據交換;IEC 62056?46,基于HDLC的數據鏈路層;IEC 62056?47,COSEM傳輸層;IEC 62056?53,COSEM應用層;IEC 62056?61,OBIS對象標識系統;IEC 62056?62,IC接口類。
1.3 實現目標
規約一致性測試系統中的通信協議棧部分用以實現對應用模型數據結構的編解碼,實現測試系統與各類接入終端(表計、集中器、智能交互終端)以指定的組網方式、通信信道(或介質)的通信建立、斷開、信息交互等過程的控制。
2 協議棧設計
2.1 應用層設計
(1) 應用層編碼模塊
在應用層協議中,對數據對象的編碼是其中重要的組成部分,通常采用ASN.1語法和BER編碼方法來設計應用層的編碼模塊。ASN.1語法是適合用來描述應用層數據幀的語法。對于數據對象,它不是用一些表格或固定的幀格式來描述的,而是用一種抽象語法語言描述。這樣做極大地提高了協議的通用性和抽象性,有助于程序的移植。BER編碼用來實現ASN.1語法。為了實現ASN.1的抽象性和通用性,BER用特殊的編碼來描述ASN.1語法[6]。
(2) 建立應用連接
應用層連接的建立是在鏈路層連接已建立的條件下通過客戶端發送 AARQ 類型的數據幀,服務端響應AARE類型數據幀來實現的。除了建立連接,這兩個數據幀還有是協商應用層數據通信參數的作用。
(3) 數據通信
當應用層建立好連接后,應用層客戶端可以與服務端執行數據通信,應用層可以提供兩種數據服務:get服務和set服務。根據IEC 62056應用層規范的說明,COSEM客戶端只能在確認的應用連接中采用確認的方式調用這些服務的request原語。COSEM服務器的應用進程一旦接收到數據通信服務指示,應檢查該服務能否被提供(檢查合法性、客戶機訪問權限、可行性等)。如果一切都正確,服務器應用進程應在本地使用相應的“實際”對象提供所請求的服務;如果需要響應,COSEM服務器應用進程應生成一個適當的response報文。
2.2 底層協議設計
底層協議有兩種實現方式:一種是基于串口方式的協議棧,包括應用層,數據鏈路層和串口通信層;另一種是基于TCP方式的協議棧,包括應用層,封裝層和TCP通信層。
(1) 基于串口通信的底層協議
基于串口通信的協議采用物理層、鏈路層、應用層的三層協議棧。鏈路層基于IEC 62056?46協議規范設計,由LLC層和MAC層兩個子層構成。LLC層的作用是將MAC層的數據轉發到應用層,或將應用層數據轉發到MAC層。MAC子層在鏈路層中負責檢查數據傳輸的可靠性,包含源、目的地址檢查,數據的FCS校驗,長數據幀的打包拆包等。
啟動長數據幀鏈路控制流程后,當使用長數據幀時,必須把長數據幀分割成短數據幀。然后把這些短數據幀依次發送出去,在接收端將這些短數據幀依次處理。這樣就實現了將一個較大的數據包完整地傳送到接收端。物理層基于IEC 62056?42協議規范設計,協議位于IEC 62056協議簇的最底層,負責數據通信在物理信道的傳輸。IEC 62056可以支持于多種不同的物理介質上(紅外,串口通道等)。
(2) 基于TCP的底層協議
基于TCP的通信采用物理層、中間層、封裝層、應用層的協議棧。與串口通信相比,基于TCP通信的協議,將物理層和鏈路層的功能交給TCP/IP協議處理,在TCP層與應用層之間加入封裝層。
3 協議棧的實現
3.1 協議層結構的實現
協議棧由多個協議層相互連接組成,一個協議層有一個下一層協議層,有一個或多個前一層協議層,下一層協議向上一層協議提供四個接口:連接接口,斷開接口,發送接口和接收接口。連接接口負責處理客戶端與服務器端建立連接;斷開接口負責處理客戶端與服務器端斷開連接;發送接口負責有客戶端向服務器端發送數據;接收接口負責處理服務器端向客戶端發送數據。
應用層和數據鏈路層的協議都采用狀態轉移的方法來處理不同狀態下對不同事件的處理。狀態分為四種:Disconnected,Connecting,Connected和Disconnecting。
當應用層客戶端收到建立連接的指令時,首先應檢查數據鏈路層的連接是否存在,如果不存在則建立鏈路層連接;數據鏈路層收到建立連接的指令時,首先應檢查物理層連接是否存在,如果不存在則建立連接物理層連接。
3.2 應用層的實現
(1) ASN.1編碼模塊實現
ASN.1 編解碼模塊實現了應用層數據對象和傳輸報文的相互轉換,對于所有在系統中應用到的 APDU,都將它們與一個 Java 類相對應,所有的類都實現encode()和decode()方法以實現編解碼。
在生成AARQ的過程中,通過構造方法為AARQ類中的屬性設置參數,然后調用自身的encode()方法,將自身的類編碼為一段字符串,就實現了AARQ幀的編碼工作,AARQ幀的類圖如圖1所示。
(2) 應用層數據服務實現
當應用層建立好連接后,應用層客戶端可以與服務端執行數據通信,應用層可以提供get服務和set服務兩種數據服務,每種數據服務包括以下操作流程:
① 生成數據服務請求pdu;
② 處理數據服務響應pdu;
③ 處理數據服務響應信息;
④ 獲取數據服務結果。
選擇模板方法設計模式封裝數據服務處理流程,模板方法模式通過把不變的的行為搬移到超類,去除子類中的重復代碼來體現它的優點;當不變的和可變的行為在子類的實現中混合在一起時,不變的行為會在子類中重復的實現,通過模板方法模式把這些方法搬移到單一的地方,就可以幫助子類擺脫重復不變方法的糾纏。采用模板方法設計模式的應用層數據服務模塊類圖如圖2所示。
3.3 基于串口底層協議的實現
基于串口底層協議的數據鏈路層也采用和應用層相同的狀態轉移模式來處理不同狀態下對不同事件的處理,除了建立斷開鏈路層連接外,鏈路層的主要功能就是對上下層數據幀的一收一發,接收應用層的信息并組幀轉發給物理層,從物理層接收幀并拆幀將信息轉發給應用層。數據鏈路層的類圖如圖3所示。
數據鏈路層將本層具體的控制邏輯放在自己的四個狀態類中去實現。例如當調用到本層的connect()方法時,鏈路層類會用this.getLayerState().conect()方法將控制流轉移到狀態類中去處理事件。這樣可以很好地完成不同狀態下對不同事件的處理。
3.4 基于TCP層的底層協議實現
封裝層其存在的重要性在于支持單一TCP端口對應多邏輯設備的通信。因此在數據被轉發給TCP層之前,需要為數據加上WPDU幀頭,以標識數據屬于哪個邏輯設備,數據要發送給哪個邏輯設備。WPDU幀中包含源WPort地址,目的WPort地址,幀長度和信息數據。協議使用SocketChannel實現TCP層的傳輸功能。Channel類是TCP層的核心,里面實現了建立通道,注冊和收發數據等方法。
4 測 試
4.1 模擬電表
當使用一臺計算機對電表進行測試時,本系統的測試架構如圖4所示,測試系統可選擇串口通信或者TCP通信的方式與受測設備相連接,進行合規測試。
實際環境中,測試系統往往需要部署在多臺PC機上,需要同時測試多臺設備。在多機測試環境中,測試控制臺可能連接著數十臺電腦,在這數十臺電腦的測試代理上可能又懸掛著數十塊電表。而實際的測試環境中難以搭建成百上千塊電表,對多機測試系統的功能進行驗證。
對于模擬電表,通信協議棧是它的主要組成部分。由于電表是作為服務端出現的,所以模擬電表的通信協議要實現的就是IEC 62056規則服務端部分的處理、收發邏輯。在實現模擬電表協議的過程中,首先沿用客戶端的框架,采用相同分層結構和職責鏈設計模式來串連各個協議層。模擬電表的界面采用Java的JFace繪制,可設置的參數包括串口號,電表地址和開啟電表個數如圖5所示。TCP通信方式運行的模擬軟表可設置的參數包括網絡端口好和開啟電表個數如圖6所示。
4.2 合規測試
本規約一致性測試系統的設計目的是,用于驗證各廠商提供的設備是否符合協議規范。通過軟、硬編碼結合的方式組成需要的協議幀,按照測試用例流程的要求,逐個發送,根據響應的結果,判斷電表協議是否符合規范。
所有的測試用例被分為應用層測試和鏈路層測試兩類,它們都繼承TestCase類。合規測試模塊為上層的應用進程提供了三個服務調用接口init(),check()和test(),init()負責初始化測試用例,test()負責執行用例,check()負責檢查測試結果。TestCase類中完成了這三個接口方法的具體實現。TestCase類繼承了ClientProtocolLayer,因此所有的測試用例類都本質上都是一個虛構的協議層。這樣做可以使測試用例擺脫真實的協議棧的規則限制,按照測試用例的需要,實現特定的數據幀收發邏輯,以檢測協議棧的合規性。
案例(見表1):規約一致性測試→鏈路層測試→幀類型錯誤測試測試分類。反向測試測試過程如下:
(1) 選擇規約一致性測試,包含幀類型錯誤測試案例;
(2) 測試工具構建SNRM幀,將其Format type子域設置為0101(正確值為1010),而其他域(幀頭、幀尾、地址、控制字、CRC等)均為正確設置;
(3) 測試工具發送SNRM幀給電表;
(4) 電表收到報文后,應該檢查報文的合規性并進行正確的反應(如:發現SNRM命令幀的Format type域設置不正確,則對該命令幀不應答);
(5) 測試工具在規定時間內,如果接收不到應答,則認為電表“幀類型錯誤”校核合規;
(6) 否則,認為不合規。
5 結 論
本文研究了IEC 62056規范,以此為標準設計完成智能電表規約測試系統的通信協議部分。本測試系統的通信協議棧遵循IEC 62056標準規范,整體上可分為兩大部分,應用層協議和底層協議。應用層的功能包含以ASN.1語法對數據對象的編解碼,以及為應用進程提供查詢、修改電表等數據通信服務。底層協議支持串口通信和TCP通信兩種模式。串口通信方式主要工作在于設計IEC 62056?46為標準的數據鏈路層,負責數據傳輸的可靠性,TCP通信方式包含中間傳輸層以及采用JAVANIO的TCP傳輸層。
由于實際環境難以搭建多塊電表進行合規測試,所以設計了模擬軟表來模擬多塊電表同時測試。模擬軟表的通信協議為服務端協議,與客戶端的處理邏輯不同,需設計與客戶端協議完美對接。為了對電表協議進行合規測試,設計了單獨的合規測試模塊,軟硬編碼相結合,用特定的測試用例對電表協議的合規性進行檢測,并反饋結果。
參考文獻
[1] 王思彤,周暉,袁瑞銘,等.智能電表的概念及應用[J].電網技術,2010,34(4):17?23.
[2] 雷利兵,朱青,張利平.基于DLMS/COSEM協議的智能電表設計[J].微計算機信息,2010,26(2):44?46.
[3] 武岳山.HDLC/SDLC串行通信規程的幀校驗序列(FCS)[J].電子技術應用,1996(1):35?37.
[4] 彭照輝.基于IEC 62056三相多功能電能表的研究與實現[D].長沙:湖南大學,2009:25?32.
[5] 韓朋哲.DLMS/COSEM電能表通信協議在自動抄表系統中的應用[J].自動化與儀器儀表,2008(4):68?70.
[6] 常婧.智能電網建設對智能儀表的技術需求分析[J].儀表技術,2010(4):58?60.
[7] 李亦非,王文靜,丁瀟雪,等.電子式電能表可靠性預計及驗證分析[J].現代電子技術,2011,34(22):141?143.