杜蜀薇,趙兵,孔令達(dá),岑煒
(1.國家電網(wǎng)公司,北京100031;2.中國電力科學(xué)研究院,北京100192)
隨著用電信息采集系統(tǒng)的全面建設(shè),大量智能電能表已投入到現(xiàn)場應(yīng)用中。截至2016年末,全國范圍內(nèi)已累計安裝智能電能表4億多只,每年新增智能電能表安裝數(shù)量達(dá)6 000萬只,智能電能表的安全可靠管理問題一直是電力部門深切關(guān)注的問題[1-4]。目前,智能電能表供應(yīng)商數(shù)量已經(jīng)達(dá)到100多個,規(guī)模有大有小,設(shè)計能力參差不齊,智能電能表投入運行的數(shù)量又極其龐大。如此大規(guī)模的智能電能表投運后,其運行可靠性對電力企業(yè)的經(jīng)營效益和社會形象影響非常大。
智能電能表現(xiàn)場運行數(shù)據(jù)表明,依據(jù)已有技術(shù)標(biāo)準(zhǔn)進(jìn)行的常規(guī)功能性檢測雖然在一定程度上確保了智能電能表的供貨質(zhì)量,但無法排除其在典型環(huán)境下的潛在軟件隱性故障。這些故障一旦發(fā)生,就是同一軟件批次的所有智能電能表的批量故障,所引發(fā)的后果將不堪設(shè)想,在給電力公司帶來經(jīng)濟(jì)損失的同時,也損害了用戶的切身利益。因此,亟需深入研究智能電能表軟件可靠性測試技術(shù),提高智能電能表軟件成熟度和可靠性,減少智能電能表運行故障[5]。
FPGA技術(shù)具有使用靈活、高數(shù)據(jù)處理能力、高運行速度和高可靠性等技術(shù)優(yōu)勢,已廣泛應(yīng)用于航空航天[6]、軍事[7-8]、通信和交通[9]等領(lǐng)域中。目前,智能電能表主要由MCU、計量單元、存儲單元、安全單元等部件組成,大多數(shù)功能都是通過嵌入式軟件來實現(xiàn)的[10-11]。為了驗證智能電能表嵌入式軟件的可靠性,設(shè)計了一種基于FPGA仿真模擬技術(shù)的智能電能表軟件測試系統(tǒng)。該系統(tǒng)采用FPGA技術(shù),通過模擬智能電能表各功能芯片的運行工況,通過觀察MCU對模擬板的操作實現(xiàn)智能電能表的軟件可靠性測試。
FPGA是一種新型的半定制邏輯電路,其功能由內(nèi)部規(guī)則排列的邏輯單元陣列(Logic Cell Array)實現(xiàn)。邏輯單元陣列內(nèi)部主要由可配置邏輯模塊(Configurable Logic Block)、輸入輸出模塊(Input Output Block)和內(nèi)部連接模塊(Interconnect Block)3部分組成。FPGA最大的優(yōu)點在于它具有可重復(fù)編程、邏輯功能模塊和I/O模塊配置比較方便靈活等特性,能夠進(jìn)行系統(tǒng)重構(gòu),有效實現(xiàn)用戶需要的功能[12]。
FPGA支持不同的編程方式,用戶可以根據(jù)不同的配置模式,通過存放在片內(nèi)RAM中的程序來設(shè)置工作狀態(tài)。因此,F(xiàn)PGA應(yīng)用比較方便靈活,并且與ARM相比,具有較強(qiáng)的數(shù)據(jù)處理能力和較高的運行速度[13]。
在智能電能表軟件測試過程中,需要上位機(jī)測試軟件通過ARM對智能電能表外圍模擬芯片進(jìn)行信息配置并寫入故障。但是,如果ARM在和上位機(jī)測試軟件進(jìn)行信息交互的同時,也與被測智能電能表MCU進(jìn)行信息交互,其處理速度的實時性將會嚴(yán)重降低,甚至引起測試失效。FPGA具有使用靈活、高數(shù)據(jù)處理能力、高運行速度和高可靠性的技術(shù)優(yōu)勢,因此,可采用FPGA的硬件邏輯來實現(xiàn)外圍器件的仿真需求,是可行性較高的方案[14]。
智能電能表軟件可靠性測試系統(tǒng)主要由主機(jī)測試軟件、模擬測試板和MCU核心板組成。智能電能表軟件可靠性測試系統(tǒng)邏輯結(jié)構(gòu)如圖1所示。
圖1 智能電能表軟件可靠性測試系統(tǒng)邏輯結(jié)構(gòu)Fig.1 Logical structure of smartmeter software reliability testing system
智能電能表軟件測試系統(tǒng)主機(jī)測試軟件在設(shè)計時盡量保持各個模塊的獨立性,在設(shè)計模式上采用MVC(Model View Controller,模型-視圖-控制器模式)框架,將用戶界面與數(shù)據(jù)層分離,使用控制層連接用戶界面和數(shù)據(jù)層,這樣使得系統(tǒng)易于維護(hù),開發(fā)效率相對更高。主要包括軟件測試數(shù)據(jù)庫、軟件測試管理、Socket通信和功能模擬測試等模塊,其邏輯架構(gòu)如圖2所示。
圖2 上位機(jī)測試軟件邏輯結(jié)構(gòu)Fig.2 Logical structure of host computer testing software
其中,軟件測試數(shù)據(jù)庫主要用于存儲測試用例和參數(shù)配置信息等。測試管理模塊主要包括測試信息導(dǎo)入、功能顯示/配置、自動腳本編譯、測試狀態(tài)及結(jié)果顯示和測試日志/報告管理等模塊,主要完成各類測試信息配置、測試腳本編譯及管理功能,如芯片的選擇、測試方案的選擇與配置、各通信接口的選擇等。Socket通信模塊主要用于完成測試軟件與模擬測試板的通信。功能模擬測試模塊主要根據(jù)實際測試需求,通過FPGA模擬各類型芯片功能,完成實際軟件測試[15]。
以Socket通信模塊為例,智能電能表軟件測試系統(tǒng)主機(jī)測試軟件通信過程設(shè)計思路如下:
在測試軟件架構(gòu)中,界面操作是主線程,通過功能按鈕觸發(fā)數(shù)據(jù)管理線程,數(shù)據(jù)管理線程判斷應(yīng)與哪個端口進(jìn)行通信,收發(fā)的是哪種類型的數(shù)據(jù)。建立收/發(fā)兩個線程,與各個測試板建立連接(循環(huán)),將建立連接的通信套接字的服務(wù)器端IP端口保存到通信列表里,之后所有向服務(wù)器端發(fā)送的Socket信息都從這個列表中取出發(fā)送,如圖3所示。
圖3 Socket通信模塊工作原理Fig.3 Working principle of socket communication module
在多線程通信過程中,主線程建立消息管理隊列實現(xiàn)線程管理,與數(shù)據(jù)庫連接實現(xiàn)數(shù)據(jù)的存取和數(shù)據(jù)分頁顯示。界面設(shè)計運用C#中的winforms控件完成,界面主題采用頁簽(tabpage)的形式來展示不同的測試模塊,分別為:總體配置頁、計量芯片單元、存儲芯片單元、時鐘芯片單元、安全芯片單元、紅外/485單元、負(fù)載開關(guān)單元、電流電壓檢測單元、通信連接頁。
MCU核心板和模擬測試板是智能電能表軟件可靠性測試系統(tǒng)的核心器件。MCU核心板相當(dāng)于被測對象,由被測試廠家按照規(guī)范要求加工制作并注入實際運行的智能電能表程序。
模擬測試板包括模擬監(jiān)控板ARM和芯片模擬板FPGA,使用可編程語言分別模擬仿真計量芯片、存儲芯片、時鐘芯片等,實現(xiàn)智能電能表的軟件測試。模擬仿真過程采用雙端口方式,其中一個端口模擬實現(xiàn)芯片的原有功能,另一個端口將芯片的狀態(tài)信息和響應(yīng)信息實時傳送給控制單元進(jìn)行軟件測試與分析。接口A是主機(jī)測試軟件和模擬測試板之間的接口,采用以太網(wǎng)接口,模擬測試板為服務(wù)端;接口B是模擬測試板內(nèi)部模擬監(jiān)控板ARM與芯片模擬板FPGA之間的接口;接口C是模擬測試板與MCU核心板之間的接口[16-17]。
芯片模擬板FPGA主要包括I2C總線內(nèi)核、仲裁選擇、三總線、SRAM存儲控制、SRAM芯片、修改芯片內(nèi)容、讀取操作指令和寄存器等功能模塊。仲裁選擇模塊與I2C總線內(nèi)核、三總線模塊、SRAM存儲控制模塊和SRAM芯片依次進(jìn)行信息交互;修改芯片內(nèi)容模塊分別與SRAM存儲控制模塊和寄存器模塊連接;讀取操作指令模塊分別與SRAM芯片和寄存器模塊連接,并與SRAM存儲控制模塊和寄存器模塊進(jìn)行信息交互。
在軟件測試過程中,模擬監(jiān)控板ARM通過接口A接收主機(jī)測試軟件發(fā)送的指令,同時通過接口B與測試模擬板FPGA進(jìn)行信息交換,完成測試軟件要求的操作。MCU核心板通過接口C對芯片模擬板FPGA進(jìn)行信息交互,模擬智能電能表對芯片的功能操作。智能電能表軟件測試系統(tǒng)工作原理如下:
(1)模擬電能表對EEPROM的讀寫操作
通過I2C總線內(nèi)核接收MCU核心板發(fā)送的串行時鐘信號、串行數(shù)據(jù)信號及寫保護(hù)信號,I2C總線內(nèi)核根據(jù)I2C協(xié)議將接收的數(shù)據(jù)信號解析為通信地址、傳輸數(shù)據(jù)及讀寫控制信號;仲裁選擇模塊接收I2C總線內(nèi)核發(fā)送的請求信號,進(jìn)行片選,使對應(yīng)的I2C總線內(nèi)核將通信地址、傳輸數(shù)據(jù)及讀寫控制信號發(fā)送至三總線模塊;三總線模塊通過SRAM存儲控制模塊實現(xiàn)對SRAM的讀寫操作。
(2)讀取操作指令
讀取操作指令模塊由操作指令控制子模塊和操作指令FIFO(First Input First Output,先入先出)子模塊兩部分組成,操作指令控制子模塊讀取SRAM存儲器控制模塊內(nèi)的數(shù)據(jù)、地址、讀寫控制等信息,并按照一定的協(xié)議組合成一條完整的操作指令,發(fā)送至操作指令FIFO子模塊。由于FIFO滿足先入先出的排序方式,因此操作指令可按執(zhí)行操作的先后順序存入操作指令FIFO子模塊。當(dāng)寄存器模塊接收到模擬監(jiān)控板ARM發(fā)送的讀取操作指令信號后,讀取相應(yīng)的操作指令,再發(fā)送至模擬監(jiān)控板ARM,實現(xiàn)讀取操作指令功能。
(3)芯片故障模擬
芯片故障模擬的主要思路是通過改變芯片內(nèi)特定地址的數(shù)據(jù)來模擬現(xiàn)場復(fù)雜工況引發(fā)的現(xiàn)象。測試系統(tǒng)通過ARM發(fā)送修改芯片內(nèi)容指令至寄存器模塊,寄存器模塊按協(xié)議解析接收的指令,將數(shù)據(jù)、地址、寫控制等信息經(jīng)過修改芯片內(nèi)容模塊發(fā)送至三總線模塊,再通過SRAM存儲控制模塊將修改的數(shù)據(jù)寫入對應(yīng)的地址。在執(zhí)行芯片故障寫入過程中,需屏蔽由I2C內(nèi)核寫入該地址的功能,以免ARM修改的數(shù)據(jù)被MCU核心板寫入的數(shù)據(jù)覆蓋。同時,ARM可通過寄存器模塊將數(shù)據(jù)、地址、讀控制信息發(fā)送至三總線模塊,經(jīng)過SRAM存儲控制模塊讀取SRAM對應(yīng)地址的數(shù)據(jù),以檢驗故障是否成功寫入。
(4)芯片信息配置
寄存器模塊按協(xié)議對ARM發(fā)送的配置芯片信息指令進(jìn)行解析,再發(fā)送至I2C內(nèi)核中,然后由I2C配置芯片數(shù)量,修改芯片地址位數(shù)并配置芯片的存儲容量。
在智能電能表軟件可靠性測試過程中,首先要對被測的智能電能表嵌入式系統(tǒng)進(jìn)行信息配置,由于不同的電能表廠家、同廠家不同型號的電能表都有不同的測試需求,因此需要有個性化的測試策略來配合。主機(jī)測試軟件作為服務(wù)端通過以太網(wǎng)將配置信息下發(fā)到模擬測試板,模擬測試板收到信息并配置成功后開始軟件測試。軟件測試過程如圖4所示。
智能電能表軟件可靠性測試過程描述如下:
(1)啟動測試軟件,用戶登陸測試系統(tǒng);
(2)主機(jī)測試軟件向模擬測試板發(fā)送通信連接請求,若連接成功,系統(tǒng)進(jìn)入配置頁面,若失敗,重新發(fā)起連接請求;
(3)檢測人員確定送檢樣表型號,在數(shù)據(jù)庫中匹配廠商信息(若是初次測試,錄入電能表信息,將配置信息保存至數(shù)據(jù)庫中;若不是初次測試,直接調(diào)用數(shù)據(jù)庫中的電能表配置信息);
(4)向模擬測試板發(fā)送配置信息,模擬測試板判斷是否配置成功,若成功,返回“配置成功”提示信息,若失敗,返回“重新發(fā)送配置信息”提示;
(5)信息配置成功后,進(jìn)入各功能模塊測試頁面,用編寫好的測試用例進(jìn)行軟件測試;
(6)測試完成后,生成測試報告并將相關(guān)信息存入系統(tǒng)數(shù)據(jù)庫中。
圖4 軟件測試流程Fig.4 Software testing process
為了驗證智能電能表軟件測試系統(tǒng)的性能,分別選擇24家智能電能表生產(chǎn)廠商的26塊單、三相智能電能表分別開展測試系統(tǒng)性能驗證試驗和智能電能表軟件可靠性驗證試驗。其中,測試系統(tǒng)核心功能測試結(jié)果如表1所示。
表1 測試系統(tǒng)驗證試驗結(jié)果Tab.1 Test result of software reliability testing system
選用計量參數(shù)出錯恢復(fù)機(jī)制測試、計量校表參數(shù)EEPROM內(nèi)數(shù)據(jù)錯誤測試、計量芯片有效脈沖測試、扣費機(jī)制測試、時鐘同步測試、EEPROM越界測試等測試用例進(jìn)行了10次軟件可靠性測試。測試結(jié)果如表2所示。
表2 智能電能表軟件測試結(jié)果Tab.2 Test result of smartmeter software
通過測試結(jié)果分析,基于FPGA仿真模擬技術(shù)的智能電能表測試系統(tǒng)可測試出不同廠家的智能電能表在極限情況下出現(xiàn)的如電能表參數(shù)錯誤未修復(fù);修復(fù)時間過長;少計量或計量偏差、掉電脈沖尾數(shù)丟失、事件記錄EEPROM越界等深度軟件可靠性問題。
這些問題在常規(guī)測試中,缺陷是觸發(fā)不出來的。若這些缺陷未測出,在現(xiàn)場幾年或更長時間的運行過程中,可能出現(xiàn)因異常事故的發(fā)生或現(xiàn)場各種環(huán)境的干擾導(dǎo)致智能電能表軟件運行故障發(fā)生,這些故障將會給智能電能表正常計量、結(jié)算或運行帶來隱患,產(chǎn)生電費糾紛等事件。
為了有效驗證智能電能表的軟件可靠性,防止大批量智能電能表故障發(fā)生,文章首先分析了FPGA技術(shù)在智能電能表軟件測試中的應(yīng)用需求,從軟、硬件兩方面設(shè)計了一種基于FPGA仿真模擬技術(shù)的智能電能表軟件可靠性測試系統(tǒng)。在該測試系統(tǒng)中應(yīng)用FPGA模擬各類型芯片,實現(xiàn)了智能電能表軟件的快速準(zhǔn)確可靠性測試。之后,選取不同的測試樣本對基于FPGA仿真模擬技術(shù)的智能電能表軟件可靠性測試系統(tǒng)進(jìn)行了性能驗證。驗證結(jié)果表明:基于FPGA仿真模擬技術(shù)的智能電能表測試系統(tǒng)可測試出不同廠家的智能電能表在極限情況下存在電能表參數(shù)錯誤未修復(fù)或修復(fù)時間過長、少計量或計量不準(zhǔn)確、掉電脈沖尾數(shù)丟失、事件記錄EEPROM越界等深度軟件可靠性問題,有效提高了智能電能表軟件的成熟度和可靠性,減少了其批量運行故障隱患。