顏文 吳潔 李尚柏



摘 要: 在數字化變電站中,面向通用對象變電站事件(GOOSE)報文被用于傳輸跳合閘命令和狀態信息,它直接服務于保護測控裝置,記錄變電站實時的運行狀態,報文的快速解碼能及時的排查偶發性故障。在詳細地分析IEC61850?GOOSE報文的結構后,考慮到報文傳輸的實時性要求,提出了GOOSE報文解碼的FPGA設計方案。重點敘述解碼模塊中兩個關鍵狀態機的設計,應用Verilog硬件描述語言在Qartus Ⅱ軟件平臺上實現了對解碼模塊的編寫,最后通過對解碼模塊的功能仿真和在線調試驗證了設計的合理性。
關鍵詞: 數字變電站; 硬件解碼; GOOSE報文; FPGA
中圖分類號: TN702?34; TP302 文獻標識碼: A 文章編號: 1004?373X(2015)18?0151?04
Abstract: In digital substation, general object oriented substation event (GOOSE) messages are used to transmit the switch command and status information. The messages are applied to protecting the measuring and control devices, and recording the real?time running state of the substation. The fast decoding to the messages can discover occasional malfunction. After analyzing the structure of IEC61850?GOOSE messages, the FPGA?based design scheme of GOOSE messages decoding is proposed by considering the real?time requirement of messages transmission. The design of two key state machines in decoding module is described emphatically. The compiling of decoding module was realized on Qartus Ⅱsoftware platform by using Verilog hardware description language. The rationality of this design was proved by function simulation of the decoding module and online debugging.
Keywords: digital substation; hardware decoding; GOOSE message; FPGA
0 引 言
變電站作為供電的樞紐,在電力系統中有著重要的地位,隨著電力行業的發展,對變電站的智能化要求也越來越高,數字化,網絡化成為其發展的趨勢。數字化變電站采用IEC61850標準進行建模和通信,實現了站內智能設備間的信息共享和不同設備的統一管理[1],GOOSE作為IEC61850標準中定義的變電站事件模型之一,其報文傳輸可靠性高,實時性好,廣泛地用于傳輸保護跳閘,信息閉鎖等重要信息。
數字變電站中傳輸的GOOSE報文是按照IEC61850標準的相關協議編碼的數據幀,接收信息的設備需要對數據幀進行解碼,并將解碼的數據保存起來便于后期的數據分析。
目前,國內數字變電站對IEC61850?GOOSE報文的解碼主要通過軟件形式在操作系統下實現,相比硬件解碼而言,這種方式不僅處理速度較慢,而且還增加了成本。FPGA在數字信號處理和控制領域都有著成熟的應用,研究基于FPGA對GOOSE報文的解碼對于維護數字變電站的正常運行和保證通信的實時性有著重要的意義。
1 IEC61850標準的GOOSE協議
1.1 BER編碼規則
根據標準規定,GOOSE協議報文采用抽象語法記法(ASN.1)的基本編碼規則(BER)編碼[2],BER的語法格式為TLV三元組。標簽域(T)定義一種類型,長度域(L)定義值域的長度,值域(V)定義數據對象的值。根據V域不同,編碼結構分為基本類型和結構類型,基本類型只包含一個TLV,而結構類型的V域至少嵌套一個TLV,具體結構如圖1所示。
1.2 IEC61850?GOOSE的報文幀結構
GOOSE服務的通信協議棧由應用層、表示層、數據鏈路層和物理層組成[3],會話層、傳輸層和網絡層均為空,這樣可以縮短報文的長度,減少傳輸的延時。應用層定義了GOOSE報文的應用協議數據單元(APDU),表示層遵循ASN.1 BER對APDU進行編碼,數據鏈路層基于ISO/IEC 8802?3標準設置報文的傳輸優先級,以太網類型,組播地址等,IEC61850?GOOSE的報文幀結構見圖2。
2 系統的工作原理
遵循IEC61850?GOOSE協議的以太網數據幀通過RJ45接口和PHY以太網芯片后傳送給MAC太網控制器[4],正常工作時,MAC對實時接收到數據幀進行卸裝,對地址匹配的數據幀去除前導碼、定界符、填充數據和校驗序列后得到MAC幀,再由輸出緩沖器接口輸出給解碼模塊。解碼模塊根據配置信息對數據幀進行解碼,將以太網配置信息,APDU配置信息,GOOSE數據集分離,并分類存儲在RAM的不同位置,用戶可通過應用程序和MCU讀取需要的數據[5],工作原理如圖3所示。
3 解碼模塊的設計
GOOSE報文內容包括報頭的以太網配置信息,APDU頭部的配置信息和GOOSE數據集3個部分[6]。以太網配置信息的數據相對固定,可以直接的解析出來,而APDU 采用BER 編碼,數據不固定,需要根據標簽類型對APDU中的各個數據項進行解碼。
根據GOOSE報文的結構特點,把報文的解碼放在Frame_fsm(數據幀解碼狀態機)和Length_fsm(TLV數據格式L域解碼狀態機)2個狀態機中進行;前者控制整個數據幀解碼流程,后者實現對長度域的解碼。
3.1 Frame_fsm狀態機
Frame_fsm狀態機主要實現數據的讀取、過濾、分離和分類存儲,包括12個狀態常量,采用獨熱碼編碼[7]。其中Idle是待解碼狀態,當start信號有效,進入Ready狀態;Ready狀態下所有輸出狀態寄存器清零,準備數據幀的解析;Read狀態下從Avalon主接口讀取數據;Wait_Read狀態下等待,直到讀取一次數據完成,并在此狀態下判斷讀到的數據是否符合過濾條件;Judge_Type狀態下對APDU包含的數據類型進行解析;WR_Heaer和Wait_WR_Header狀態下完成對以太網配置信息的存儲,如果寫傳輸中有延時則需要等待;同理,WR_APDU和Wait_WR_APDU狀態下完成對APDU配置信息的存儲;WR_Data和Wait_WR_Data狀態下,完成對GOOSE數據集的存儲;直到解析完整幀數據,進入End狀態,Frame_fsm狀態機的狀態轉移如圖4所示。
3.2 Length_fsm狀態機
Length_fsm狀態機完成對TLV數據格式的L域的解析,包括5個狀態常量,采用二進制編碼。Length_Idle是APDU中TLV數據格式的L域待解碼狀態,根據輸出標志將結構類型數據和基本數據類型分開解碼;Struct狀態下對APDU中結構類型數據的L域解碼;Basic_Short狀態下對基本類型L域編碼方式為短定長型的數據解碼;Basic_Long狀態下對基本類型L域編碼方式為長定長型的數據解碼;Basic_Indef狀態下對基本類型L域編碼方式為非定長型的數據解碼,Frame_fsm狀態機的狀態轉移如圖5所示。
3.3 模塊的功能仿真
本文在Quartus Ⅱ9.1環境中完成了解碼模塊代碼的編寫,編譯后調用ModelSim?Altera 6.5b軟件進行了功能的仿真,驗證了設計的可靠性,仿真結果如圖6所示。從圖中可以看出,read_data是解碼模塊從數據緩沖區依次讀取的報文數據,write_data為依次存放到內存中的數據,前26 B是以太網配置的信息,從第27 B開始是GOOSE報文的APDU部分,此時Header_flag標志由1變為0,APDU_flag標志由0變為1,直到APDU配置信息結束,APDU_flag標志變為0,數據集標志Data_flag標志變為1,而Frame_state和Length_state表明解碼的狀態。
4 解碼模塊的軟件仿真驗證
運用SoPC?builder將解碼模塊集成到Nios Ⅱ系統中[8],再下載到FPGA芯片中進行在線仿真調試,用到的工具有Altera公司的Quartus Ⅱ 9.1,Nios Ⅱ IDE 9.1軟件和H3C40?V6 FPGA開發板,驗證流程如圖7所示。
將用于測試的GOOSE報文數據存儲在FPGA的RAM中,通過對存儲器初始化完成[9]。在Nios Ⅱ IDE的存儲器窗口下查看內存中一幀待解碼的GOOSE報文,當報文經過交換機到達網絡端口時,已經去掉TPID(0x8100)和TCI(0x4000)標志,該報文長158 B,存放的基地址為0x00020000,如圖8所示。
解碼完成后,在Nios Ⅱ IDE變量窗口可查看解碼的相關信息,如圖9所示。圖中計時器計數值為793,系統工作時鐘50 MHz,可計算出解碼所用的時間約為15.86 μs。
為了測試解碼模塊過濾報文的性能,在RAM中存放30幀數據,包括符合過濾條件的GOOSE數據幀,不符合過濾條件的GOOSE數據幀和非GOOSE數據幀[10]。解碼完成后,在Nios Ⅱ IDE變量窗口查看結果,如圖10所示。從圖中可以看出完全符合條件的數據幀有12幀,不符合條件的數據幀被過濾掉了。Frame_Length數組中存放每1幀GOOSE報文的長度值,Header_base數組中存放報文以太網配置信息基地址,APDU_base數組中存放APDU配置信息基地址,Data_base數組中存放GOOSE數據集基地址,通過讀取解碼模塊返回的基地址,可以訪問內存中相應的已解碼數據。
5 結 語
本文基于FPGA實現了對IEC61850標準的GOOSE報文的快速解碼,通過對解碼模塊的功能仿真驗證了設計邏輯的正確性,在線的數據測試結果表明解碼模塊實現了對報文的過濾和不同數據類型的分類存儲。采用FPGA硬件方式對GOOSE報文解碼,其解析報文的速度快,滿足實時性的要求,有利于盡早地發現變電站故障,保障變電站的安全運行;FPGA資源豐富,許多功能模塊都能集成到一塊芯片上,可以方便地移植到數字變電站的智能設備中以實現快速通信。
參考文獻
[1] 羅承沐,張貴新.電感式互感器與數字變電站[M].北京:中國電力出版社,2012.
[2] 李永亮,葛維春,王之茗.IEC61850通訊標準中的編碼規范ASN.1[J].電力系統保護與控制,2008,36(22):66?70.
[3] 韓明峰,張捷,鄭永志.IEC61850?GOOSE實時通信的實現方法[J].電力自動化設備,2009,29(1):143?146.
[4] 楊柳.基于ARM和FPGA的電力光纖信號分析儀的設計[J].現代電子技術,2011,34(4):177?180.
[5] 楊新華,韓永軍.基于FPGA的數字化變電站計量儀表研究與設計[J].測控技術與儀器儀表,2012,38(5):91?93.
[6] 張侃君,夏勇軍,王晉等.智能變電站GOOSE通信技術[J].湖北電力,2013,37(1):7?10.
[7] 夏宇聞.Verilog數字信號系統設計教程[M].北京:北京航空航天大學出版社,2003.
[8] 李蘭英.Nios Ⅱ嵌入式軟核SoPC設計原理及應用[M].北京:北京航空航天大學出版社,2006.
[9] 趙倩.Verilog數字系統設計FPGA應用[M].北京:清華大學出版社,2012.
[10] 王松,黃曉明.GOOSE報文過濾方法研究[J].電力系統自動化,2008,32(19):54?57.