龐富寬,汪洋,袁瑞銘,巨漢基,宋錫強(qiáng) ,汪萍萍
(1.國網(wǎng)冀北電力有限公司電力科學(xué)研究院,北京 100045;2.華立科技股份有限公司,浙江 杭州 310023)
International Recommendation 46(簡稱R46)是國際法制計(jì)量組織(OIML)最新修訂完成的電能表國際建議,對電能計(jì)量提出了更高的要求,標(biāo)準(zhǔn)一經(jīng)發(fā)布,包括中國在內(nèi)的所有OIML成員國必須采納并執(zhí)行[1]。我國已經(jīng)在結(jié)合R46標(biāo)準(zhǔn)進(jìn)行相關(guān)型式評價大綱、檢定規(guī)程等法制內(nèi)容的修訂,R46標(biāo)準(zhǔn)的修訂對電能計(jì)量性能保護(hù)軟件設(shè)計(jì)提出了更高的要求[2]。
R46標(biāo)準(zhǔn)中提供了軟件驗(yàn)證過程的分析方法,但以文檔審查和設(shè)計(jì)確認(rèn)為主,其中相關(guān)標(biāo)準(zhǔn)OIML D31《軟件控制計(jì)量器具通用要求》及歐洲法制計(jì)量組織(WELMEC)的規(guī)范WELMEC Guide 7.2《MID軟件指南》針對軟件功能驗(yàn)證也主要以文檔審查和源代碼檢查為主[3-4]。從國際上看,針對R46標(biāo)準(zhǔn)要求的軟件檢查,目前以廠家文檔可信性申明或第三方源代碼測試為主。該手段可信性不高、可測試性不強(qiáng),且源代碼檢測過于復(fù)雜、檢測成本高。針對國內(nèi)情況,論文研究了一種針對目標(biāo)碼的R46表軟件檢測方法,以FPGA技術(shù),代替?zhèn)鹘y(tǒng)軟件,采用硬件環(huán)境仿真實(shí)現(xiàn)軟件模塊間接口測試或軟件故障注入測試,進(jìn)而實(shí)現(xiàn)R46表的軟件法制計(jì)量分離、軟件保護(hù)、參數(shù)保護(hù)及在線升級等檢測。
R46標(biāo)準(zhǔn)第3部分Metrological Requirements(計(jì)量要求)的3.6條Protection of metrological properties(計(jì)量性能的保護(hù))要求儀表應(yīng)具備保護(hù)其計(jì)量性能的方法,提出了軟件的標(biāo)識、軟件保護(hù)、參數(shù)保護(hù)、電子設(shè)備和子組件的分離、軟件分離、數(shù)據(jù)存儲和通信系統(tǒng)數(shù)據(jù)傳輸、軟件維護(hù)和重新配置等,其中關(guān)鍵功能,也難以通過傳統(tǒng)黑盒系統(tǒng)測試檢測的以軟件分離、軟件和參數(shù)保護(hù)、軟件升級為主[5]。
軟件分離要求法制計(jì)量部分和非法制計(jì)量部分分離,所有執(zhí)行法制相關(guān)功能或包含法制相關(guān)數(shù)據(jù)域的軟件模塊(程序,子程序,對象等)根據(jù)要求進(jìn)行標(biāo)識,只能通過接口與其它程序進(jìn)行數(shù)據(jù)交互;通過接口收到的命令不能影響執(zhí)行法制計(jì)量相關(guān)部分組件和設(shè)備中的數(shù)據(jù)、功能;軟件保護(hù)要求可通過軟件保護(hù)的方式防止未經(jīng)授權(quán)的軟件寫入、修改和改變內(nèi)存內(nèi)容;參數(shù)保護(hù)要求電能表中關(guān)鍵計(jì)量參數(shù)能防止未經(jīng)授權(quán)的修改等;軟件可在線升級,且非法制功能的升級不能影響法制計(jì)量功能,升級不成功可恢復(fù)先前版本。
國家電網(wǎng)公司R46項(xiàng)目組2016年發(fā)布了《基于R46的“雙芯”智能表需求說明書V3.0》,國內(nèi)采用“雙芯”的技術(shù)方案,見圖1所示[6]。即法制計(jì)量MCU和管理MCU,從物理上實(shí)現(xiàn)法制部分和非法制部分的徹底隔離,該設(shè)計(jì)方案同時提高了軟件的可測試性,接口易插裝,可實(shí)現(xiàn)數(shù)據(jù)的監(jiān)測和錯誤注入。
圖1 “雙芯”智能電能表設(shè)計(jì)方案
法制計(jì)量部分計(jì)量芯獨(dú)立運(yùn)行,法制認(rèn)證,不允許軟件升級,由計(jì)量功能及相關(guān)組件組成,具體包括電壓及電流采樣網(wǎng)絡(luò)、計(jì)量芯片、計(jì)量MCU、存儲單元、RS-485、RTC等;管理芯實(shí)現(xiàn)其它非法制應(yīng)用性功能,包括管理MCU、上、下行通信模塊、顯示單元、存儲單元、RS-485通信、ESAM電路等,管理芯軟件允許升級。
FPGA(Field Programmable Gate Array)現(xiàn)場可編程門陣列,一種新型的半定制邏輯電路,一切通過軟件手段更改、配置器件內(nèi)部連接結(jié)構(gòu)、元件參數(shù)、可隨意定制內(nèi)部邏輯陣列[7]。優(yōu)點(diǎn)在于邏輯功能模塊和I/O模塊配置靈活,尤其可重復(fù)編程、反復(fù)改寫,可代替?zhèn)鹘y(tǒng)軟件,使采用硬件來實(shí)現(xiàn)故障模擬變得可行、方便[8]。R46智能電能表的軟件仿真測試環(huán)境中,利用FPGA進(jìn)行MCU外圍的EEPROM、Flash、計(jì)量芯片寄存器等模擬,可替代其功能,并可實(shí)現(xiàn)存儲數(shù)據(jù)的任意改寫,實(shí)現(xiàn)接口數(shù)據(jù)的監(jiān)測、錯誤注入等,從而驗(yàn)證測試程序的執(zhí)行情況。
文中針對以圖1中國內(nèi)“雙芯”R46智能電能表進(jìn)行軟件檢測方案的研究,基于FPGA的軟件仿真測試環(huán)境設(shè)計(jì)如圖2所示,總體設(shè)計(jì)方案:
(1)MCU核心板:使用廠家提供真實(shí)的計(jì)量MCU及管理MCU,保證待測R46智能電能表程序運(yùn)行環(huán)境的真實(shí)性,2個MCU之間采用SPI接口進(jìn)行數(shù)據(jù)交換,接口間可數(shù)據(jù)插裝,集成到一塊核心板上,該板尺寸、接口統(tǒng)一制定,還由液晶顯示模塊、檢測裝置外圍接口組成;(2)基板:整個檢測裝置的電源及上下電源控制模塊;(3)接口板:安裝電表核心板并與FPGA仿真測試板連接;(4)FPGA仿真板:是軟件測試裝置的核心仿真單元,可采用Intel的FPGA板平臺(含ARM硬核單元),使用可編程語言分別模擬計(jì)量MCU及管理MCU外圍的計(jì)量芯片、EEPROM、Flash、時鐘芯片及對應(yīng)接口等,其存儲數(shù)據(jù)及接口可進(jìn)行錯誤注入、監(jiān)測等,形成仿真測試板,仿真過程采用雙端口方式,一個端口模擬實(shí)現(xiàn)芯片本身功能,一個端口進(jìn)行芯片信息與控制單元的數(shù)據(jù)傳輸及分析;(5)控制單元:利用ARM芯片完成Linux的程序設(shè)計(jì),主要進(jìn)行上位機(jī)測試軟件與下位機(jī)檢測仿真裝置的數(shù)據(jù)傳輸、控制及分析,包括SOPC(System-on-a-Programmable-Chip)模塊的設(shè)計(jì)、網(wǎng)絡(luò)接口的設(shè)計(jì)、通信及FPGA接口控制、上位機(jī)軟件及FPGA通信設(shè)計(jì)等。
圖2 “雙芯”R46智能電能表軟件測試環(huán)境設(shè)計(jì)
2.2.1 FPGA仿真設(shè)計(jì)
FPGA仿真設(shè)計(jì)主要包括:(1)FPGA仿真接口定義,覆蓋計(jì)量MCU與管理MCU的主要通信與存儲外設(shè)接口;(2)FPGA測試板仿真;(3)FPGA與上位機(jī)通信接口協(xié)議設(shè)計(jì)。
FPGA仿真接口定義:(1)與計(jì)量MCU接口,含UART數(shù)據(jù)接口;RTC數(shù)據(jù)接口,F(xiàn)PGA仿真RTC寄存器;計(jì)量芯片接口,F(xiàn)PGA仿真計(jì)量芯片寄存器數(shù)據(jù);Flash數(shù)據(jù)接口,模擬Flash時序與計(jì)量MCU交互;I2C數(shù)據(jù)接口;IO數(shù)據(jù)接口;雙芯SPI接口;(2)與管理MCU接口,除類似計(jì)量MCU接口外,還包括CARD卡接口數(shù)據(jù)、ESAM數(shù)據(jù)接口。
FPGA仿真測試板:基于QuartusII開發(fā)平臺,采用Verilog硬件描述語言和有限狀態(tài)機(jī)分別實(shí)現(xiàn)對SPI+Flash、I2C+EEPROM、UART+計(jì)量芯片的接口時序和器件控制邏輯仿真[9],實(shí)現(xiàn)對FPGA與控制單元ARM的數(shù)據(jù)交互及仿真設(shè)計(jì),模擬替代原有功能,并可實(shí)現(xiàn)對通信接口、存儲數(shù)據(jù)的篡改及監(jiān)控。以FPGA仿真SPI+Flash模塊為例,包括模擬SPI接口、Flash控制器、Flash存儲器各模塊構(gòu)成,存儲器使用FPGA內(nèi)部生成的2個雙端口RAM替代,一端口作為存儲命令和狀態(tài)寄存器,一端口存儲數(shù)據(jù);FPGA對接受的用戶命令進(jìn)行解碼譯碼、轉(zhuǎn)化為相應(yīng)的信號,控制啟動指令的子模塊。Flash控制器子模塊產(chǎn)生讓芯片執(zhí)行各操作(寫使能、頁面變成、讀寫狀態(tài)寄存器、擦除等)時的指令時序,用戶只需輸入可芯片內(nèi)部操作的指令及地址即可,SPI接口與Flash數(shù)據(jù)傳輸由控制器內(nèi)部的有限狀態(tài)機(jī)實(shí)現(xiàn)[10]。
FPGA與上位機(jī)通信協(xié)議接口設(shè)計(jì):FPGA與上位機(jī)采用ModBus TCP/IP協(xié)議,上位機(jī)作為客戶端,F(xiàn)PGA作為服務(wù)器。應(yīng)用層自定義協(xié)議幀包括讀計(jì)量MCU FPGA配置、寫計(jì)量MCU FPGA配置、讀計(jì)量MCU輸入開關(guān)量、計(jì)量MCU計(jì)量芯片寄存器讀寫、計(jì)量MCU時鐘芯片寄存器讀寫、計(jì)量MCU EEPROM1、統(tǒng)一EEPROM2、FLASH寄存器讀寫、計(jì)量MCU RS-485、下行通信模塊寄存器讀寫、管理MCU FPGA配置等。
2.2.2 上位機(jī)自動化測試設(shè)計(jì)
上位機(jī)基于.NET平臺的多層技術(shù)架構(gòu),使用C#語言、MySQL數(shù)據(jù)庫、腳本技術(shù)等實(shí)現(xiàn)測試的全自動化。重點(diǎn)包括以下功能模塊:
(1)元器件配置模塊:FPGA仿真覆蓋廠家通用的各EEPROM、FLASH、計(jì)量芯片等型號,可選定需要的器件型號,且各器件的FPGA仿真程序可升級;
(2)存儲器地址配置模塊:R46智能電能表軟件檢測主要涉及深層次的軟件內(nèi)部存儲邏輯,為提高測試自動化,廠家將存儲按照規(guī)范化的地址分配表進(jìn)行填寫,如表1所示。
表1 存儲器件地址分配表
提供關(guān)鍵數(shù)據(jù)類的表頭,以便方案設(shè)計(jì)快速找到地址,存儲名稱,存儲單元起始地址、數(shù)據(jù)類型、格式、存儲位置(存儲器件類型等)。上位機(jī)將根據(jù)導(dǎo)入的數(shù)據(jù)規(guī)則自動解析;
(3)測試方案設(shè)計(jì)模塊:制定基礎(chǔ)操作規(guī)范,包括FPGA操作(以存儲數(shù)據(jù)、接口數(shù)據(jù)錯誤注入操作為主)、控源操作、函數(shù)運(yùn)算、信息提示。方案編制結(jié)構(gòu)化、標(biāo)準(zhǔn)化,每個測試用例根據(jù)測試方案定義測試步驟,每個測試步驟對應(yīng)一個最小單元的基礎(chǔ)操作,將所有測試步驟按照基礎(chǔ)操作編制,形成可實(shí)施自動測試的方案;
(4)數(shù)據(jù)實(shí)時監(jiān)測模塊:可以進(jìn)行存儲數(shù)據(jù)及寄存器數(shù)據(jù)的實(shí)時監(jiān)控、手工的數(shù)據(jù)改寫,輔助測試分析。
2.2.3 測試步驟
整個測試過程由3部分組成,上位機(jī)方案編輯及自動測試單元、ARM自動控制單元、待測單元(FPGA及加載待測程序的核心板)。將測試方案等基礎(chǔ)信息配置自動發(fā)送測試命令,ARM控制單元進(jìn)行下位機(jī)的控制及協(xié)議、數(shù)據(jù)交互,測試用例在FPGA及核心板組成的測試環(huán)境中自動運(yùn)行,測試結(jié)果返回上位機(jī),詳細(xì)步驟見圖3描述。
圖3 測試步驟
測試用例設(shè)計(jì)方法主要為故障注入法及接口測試法:(1)故障注入測試:一種相對特殊的高度靈活性方法,有意識根據(jù)已知故障模式,產(chǎn)生故障并施加于目標(biāo)系統(tǒng),加速系統(tǒng)錯誤和失效發(fā)生,采集系統(tǒng)對注入故障的反應(yīng)信息,并對回收信息進(jìn)行分析,提供有關(guān)結(jié)果的過程;(2)接口測試:測試系統(tǒng)組件間接口的一種測試,檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點(diǎn),重點(diǎn)是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。針對R46智能電能表軟件要求,以存儲數(shù)據(jù)、參數(shù)已知故障進(jìn)行注入及模塊間接口交互影響測試為主。
以R46軟件檢測的法制計(jì)量分離測試、電量數(shù)據(jù)保護(hù)測試等為例,測試用例設(shè)計(jì)方案舉例如下:
(1)法制計(jì)量軟件分離測試:電能表管理MCU電量、時鐘等的數(shù)據(jù)來源于計(jì)量MCU,模擬管理MCU外圍EEPROM故障,驗(yàn)證計(jì)量MCU部分電量運(yùn)行是否正確且管理MCU部分電量是否從計(jì)量部分讀取,可恢復(fù)。測試用例設(shè)計(jì)方案流程如圖4所示;
圖4 法制計(jì)量軟件分離測試
(2)計(jì)量芯EEPROM電量數(shù)據(jù)保護(hù)測試:電表EEPROM在讀寫過程中,受外部干擾,讀出/寫入數(shù)據(jù)有可能為錯誤數(shù)據(jù),電量作為關(guān)鍵數(shù)據(jù)應(yīng)當(dāng)具有備份、錯誤自恢復(fù)功能。假如有4份備份數(shù)據(jù),改錯備份2、3、4的電量數(shù)據(jù)及校驗(yàn)和,驗(yàn)證電量是否可依靠備份1數(shù)據(jù)自恢復(fù),測試用例設(shè)計(jì)方案流程如圖5所示。
圖5 計(jì)量芯EEPROM電量數(shù)據(jù)保護(hù)測試
應(yīng)用該測試裝置,針對幾個廠家提供的基于“雙芯”基礎(chǔ)方案開發(fā)的R46智能電能表,進(jìn)行軟件測試驗(yàn)證,分別發(fā)現(xiàn)了一些不符合R46智能電能表設(shè)計(jì)要求的問題:
(1)2個廠家的軟件分離設(shè)計(jì)不符合要求,當(dāng)管理芯EEPROM出現(xiàn)問題時,1個廠家計(jì)量芯部分電量出錯,不能正常計(jì)量;1個廠家計(jì)量芯電量正常,但管理芯的電量沒有同步計(jì)量芯電量,沒有正?;謴?fù);
(2)3個廠家的軟件在線升級不合格,管理芯部分升級成功后,對法制計(jì)量產(chǎn)生了影響,1個廠家計(jì)量芯電量數(shù)據(jù)計(jì)量不準(zhǔn)確;1個廠家計(jì)量芯停止了計(jì)量;另外1個廠家沒有產(chǎn)生升級事件記錄;
(3)2個廠家的計(jì)量芯校表參數(shù)沒有保護(hù)設(shè)計(jì),當(dāng)寄存器中校表參數(shù)被改錯后,1個廠家校表參數(shù)未恢復(fù)正確值;1個廠家未在規(guī)定時間內(nèi)恢復(fù),糾錯時間過長。
測試驗(yàn)證該測試平臺達(dá)到設(shè)計(jì)目的,檢測方法可行且具有合理性,可有效應(yīng)用于R46智能電能表的軟件項(xiàng)目檢測,實(shí)現(xiàn)基于表目標(biāo)碼的測試。
研究了R46智能電能表的軟件檢測項(xiàng)目需求,基于國內(nèi)“雙芯”表方案,采用FPGA仿真MCU外圍器件及接口等設(shè)計(jì)了檢測方案,分析了測試原理、FPGA仿真設(shè)計(jì)法、上位機(jī)自動測試設(shè)計(jì)及測試步驟等。最后舉例設(shè)計(jì)了基于故障注入,進(jìn)行R46智能電能表法制計(jì)量軟件分離、軟件保護(hù)等測試用例,通過對試驗(yàn)廠商生產(chǎn)的智能電能表的程序的檢測,驗(yàn)證了測試平臺可實(shí)現(xiàn)基于目標(biāo)碼的R46智能電能表軟件分離測試、軟件保護(hù)、參數(shù)保護(hù)、在線升級等檢測。可根據(jù)后續(xù)下一代R46智能電能表的詳細(xì)設(shè)計(jì)規(guī)范進(jìn)一步優(yōu)化該測試平臺,并編寫R46智能電能表軟件檢測規(guī)范,研究成果為R46智能電能表在國內(nèi)落地及檢測奠定了基礎(chǔ),提供了測試手段。