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