王 珍謝永明曾仕途許 凱
(華立科技股份有限公司,浙江 杭州 310023)
基于IR46智能電能表軟件分離測試方法研究
王珍1謝永明1曾仕途2許凱2
(華立科技股份有限公司,浙江 杭州 310023)
電能表涉及法定計量和金額結(jié)算,屬于國家法制管理的計量器具。其軟件的層次性、可靠性和合法性,日益受到各國的高度重視。IR46是對各國電能表法制計量的統(tǒng)一建議。國家標(biāo)委會已明確要將IR46納入國標(biāo)。軟件分離是IR46建議中的重點及難點。本文分析了電能表嵌入式軟件的現(xiàn)狀并針對IR46的建議,采用軟件故障注入技術(shù),探討了合理實施電能表嵌入式軟件分離測試的方法。
嵌入式軟件;智能電能表;IR46;軟件分離;故障注入
OIML TC12于2014年發(fā)布新版IR46,OIML建議能夠反應(yīng)適應(yīng)立法的不斷變化和保護(hù)消費(fèi)者利益的需求。國家標(biāo)委會已明確要將IR46納入國標(biāo)。國網(wǎng)和南網(wǎng)以后也將在國標(biāo)基礎(chǔ)上建立企標(biāo)。我國是電能表的生產(chǎn)大國,IR46新文件的要求將對我國電能表的計量、生產(chǎn)和使用產(chǎn)生巨大影響。
隨著國家智能電網(wǎng)的快速發(fā)展,智能電能表快速推廣應(yīng)用,市場對智能電能表產(chǎn)品質(zhì)量和智能化程度要求越來越高。
智能電能表較傳統(tǒng)電能表增加了許多新功能,這些功能的集成不僅增加了電能表軟件的復(fù)雜性,而且對電能表軟件的系統(tǒng)平臺提出了更高的要求。目前,電能表型式評價中采用的實驗方法和評價標(biāo)準(zhǔn)基本滿足了檢測電能表硬件的需求,相較而言對電能表軟件評價較少。智能電能表嵌入式軟件現(xiàn)狀是,計量和其他功能一體化設(shè)計,導(dǎo)致其他部分軟硬件的設(shè)計更改難免影響到計量性能。而其他功能的損壞或失效可能導(dǎo)致計量部分損壞或失效。電能表是法定計量器具,為了保證計量的合法性,任何更計量相關(guān)的更改都需要通過質(zhì)量監(jiān)督局的測試和認(rèn)定。
2.1計量性能的保護(hù)
在計量軟件評價項目中,IR46要求對智能電能表對計量性能予以保護(hù)。IR46的計量性能保護(hù)部分包括軟件標(biāo)識、防誤操作、防欺詐、參數(shù)保護(hù)、電子設(shè)備和組件分離、軟件分離、數(shù)據(jù)存儲和通信傳輸參數(shù)保護(hù)、自動存儲、傳輸延時和傳輸中斷、時間戳、維護(hù)和重新配置11個方面內(nèi)容。
通過文檔說明或測試驗證來對這11個方面的內(nèi)容進(jìn)行形式評價。IR46計量性能保護(hù)要求功能部分可從計量基表分離出來,可進(jìn)行升級。同時要求功能部分的升級不影響計量性能,升級過程中計量部分應(yīng)正常工作,升級中斷或失敗時可恢復(fù)到原有版本,功能的升級可追溯。
2.2IR46中軟件部分的分離
所有執(zhí)行法制相關(guān)功能或包含法制相關(guān)數(shù)據(jù)域的軟件模塊(程序、子程序、對象等)構(gòu)成儀表的法制相關(guān)軟件部分,這些都將含有其標(biāo)識。如果執(zhí)行法制相關(guān)功能的軟件模塊無標(biāo)識,則整個軟件視為法制相關(guān)。如果法制相關(guān)軟件部分與其他軟件部分交互,應(yīng)定義軟件接口。所有交互只能通過這個接口進(jìn)行。法制相關(guān)軟件部分、接口應(yīng)在文檔中明確說明文檔中明確說明組成軟件接口的數(shù)據(jù)域,包括從法制相關(guān)部分輸出到接口數(shù)據(jù)域的代碼,以及由從接口輸入到法制相關(guān)部分的代碼必須明確定義并在文檔中說明。聲明的軟件接口不得被繞過而直接讀寫。在軟件法制相關(guān)部分,所有啟動功能或數(shù)據(jù)交換的每個指令應(yīng)有明確任務(wù)。通過軟件接口交互的指令應(yīng)聲明并在文檔中說明。只有文檔中聲明的指令才允許通過軟件接口激活。
3.1IR46軟件分離實現(xiàn)分析
IR46要求電能表中的法制計量部分不允許受儀表其他功能的影響,同時電能表遠(yuǎn)程升級無論成功與否都不能影響電能表正常計量。因此如何界定計量部分組件成為目前首要任務(wù)。智能電能表旨在通過考慮時間和存儲結(jié)果的功率積分連續(xù)地測量電能,因此電能計量及RTC時鐘部分就屬于法制計量組件。目前電能表都已有成熟通信協(xié)議,基表只需設(shè)計統(tǒng)一的帶保護(hù)的外置通信模塊接口,保證當(dāng)更新模塊或采用更先進(jìn)通信技術(shù)模塊時不需變動或更換基表。因此通信協(xié)議棧及相關(guān)組件可不屬于法制計量相關(guān)部分。
考慮到企業(yè)生產(chǎn)檢定、局方驗收及現(xiàn)場運(yùn)行需要等情況,且標(biāo)準(zhǔn)中明確要求軟件標(biāo)識應(yīng)和軟件本身緊密關(guān)聯(lián),應(yīng)在起動或操作時在顯示器上顯示出來或者通過指令展示出來,因此建議法制計量及相關(guān)組件提供相應(yīng)的顯示屬于法制計量組件,如有/無功電能、最大需量及時間的循顯?;诂F(xiàn)場故障分析需求與法制計量相關(guān)的事件記錄(如修改時鐘、總電能清零、軟件升級追溯等)屬于計量部分。
3.2IR46軟件分離平臺規(guī)劃
電能表軟件平臺設(shè)計為滿足需求應(yīng)采用積木式、模塊化的開發(fā)設(shè)計模式,而模塊化是整個表計系統(tǒng)軟件的一個關(guān)鍵屬性,也是實現(xiàn)軟件分離的基本。根據(jù)IR46軟件分離要求,如將計量部分以及計量相關(guān)組件設(shè)計為最小“系統(tǒng)”基表,則電能表軟件可分為3個區(qū):計量相關(guān)基表軟件、功能軟件、功能軟件備份。為保降低軟件復(fù)雜性,同時提高軟件可靠性,軟件設(shè)計應(yīng)采用航空業(yè)嵌入式軟件可靠性技術(shù),對計量基表系統(tǒng)平臺軟件進(jìn)行保護(hù),使得功能軟件的BUG導(dǎo)致的功能程序混亂或失效不影響計量基表系統(tǒng)平臺。
4.1IR46軟件分離測試方法
智能電能表程序是典型的嵌入式程序,由于嵌入式系統(tǒng)的自身特點,如實時性、內(nèi)存不豐富、I/O通道少等,目前沒有專門應(yīng)用于電能表IR46軟件分離要求的檢測方法與通用的檢測平臺。因此需要對軟件進(jìn)行深入測試尋找其他辦法來進(jìn)一步測試。如基于錯誤的測試,軟件故障注入測試,探索性測試等非正常測試。為滿足IR46對軟件分離要求運(yùn)用故障注入技術(shù)搭建故障注入與分析平臺,通過對該平臺注入軟件故障,驗證計量基表獨立性及容錯能力。
軟件故障注入方法完全通過軟件的方法來實現(xiàn)故障注入測試,通過在編譯時或運(yùn)行時動態(tài)修改執(zhí)行程序,在程序執(zhí)行過程中改變處理器的正常狀態(tài),不需要任何硬件設(shè)施就可以實現(xiàn)軟件故障的模擬。
由于功能軟件可通過通信口升級,所以可通過人為在功能軟件注入故障,將帶有故障功能程序升級到表內(nèi),進(jìn)行IR46軟件分離測試,驗證計量軟件獨立性及容錯性。注入故障包括:外設(shè)越權(quán)訪問、內(nèi)存越界訪問、內(nèi)存泄漏、修改堆棧、PC跑飛等。
4.2IR46軟件分離測試方案
4.2.1功能程序越權(quán)訪問外設(shè)
(a)電能表設(shè)計中,選用SPI接口或UART接口專用計量芯片,來完成基本的能量累積、電壓測量、電流測量、功率測量、頻率測量。通過在功能程序中編寫SPI或UART驅(qū)動,并通過該驅(qū)動改寫計量芯片數(shù)據(jù),將故障程序通過通信口升級到電能表,來驗證該越權(quán)外設(shè)訪問是否干擾到計量程序。
(b)電能表設(shè)計中,選用IIC接口的EEPROM、DATAFLASH、鐵電等存儲芯片來存儲校表數(shù)據(jù)和累計電量數(shù)據(jù)。選用IIC接口實時時鐘芯片實現(xiàn)日歷功能??赏ㄟ^在功能程序中編寫IIC驅(qū)動,并通過該驅(qū)動改寫任意外部存儲芯片數(shù)據(jù)和實時時鐘芯片數(shù)據(jù),將故障程序通過通信口升級到電能表,來驗證該越權(quán)外設(shè)訪問是否干擾到計量程序和實時時鐘。
(c)電能表設(shè)計中,通過采集計量芯片脈沖或累計能量產(chǎn)生電能脈沖,并通過MCU IO口將能量脈沖發(fā)出供準(zhǔn)確度校驗??赏ㄟ^在功能程序中編寫隨意控制MCU IO脈沖口。將故障程序通過通信口升級到電能表,來驗證該越權(quán)外設(shè)訪問是否干擾到計量準(zhǔn)確度。
4.2.2功能程序內(nèi)存越界訪問
在功能程序中通過任意絕對地址訪問來修改任意內(nèi)存數(shù)據(jù),將故障程序通過通信口升級到電能表,來驗證該內(nèi)存越界是否干擾到計量準(zhǔn)確度、電流計量、測量數(shù)據(jù)和實時時鐘數(shù)據(jù)。
4.2.3功能程序內(nèi)存泄漏
電能表通常使用C語言進(jìn)行設(shè)計,可通過malloc()函數(shù)任意申請堆內(nèi)存,不使用配套的free()進(jìn)行堆內(nèi)存釋放。將故障程序通過通訊口升級到電能表,來驗證該內(nèi)存泄漏是否干擾到計量準(zhǔn)確度、電流計量、測量數(shù)據(jù)和實時時鐘數(shù)據(jù),或造成復(fù)位或死機(jī)。
4.2.4惡意修改堆棧和PC跑飛
電能表通常使用C語言進(jìn)行設(shè)計,程序中SP指針可見,通過惡意修改SP指針。或當(dāng)程序調(diào)用子程序時,會將調(diào)用后的下一條指令PC壓入堆棧,程序返回時從堆棧中的PC恢復(fù),繼續(xù)調(diào)用前的下一條指令執(zhí)行??稍谧映绦蛑型ㄟ^當(dāng)前SP指針找到壓如堆棧的PC值,任意修改該堆棧位置。將故障程序通過通訊口升級到電能表,來驗證該內(nèi)存泄漏是否干擾到計量準(zhǔn)確度、電流計量、測量數(shù)據(jù)和實時時鐘數(shù)據(jù),或造成復(fù)位或死機(jī)。
本文在分析了IR46軟件分離方案基礎(chǔ)上,討論外設(shè)越權(quán)訪問、內(nèi)存越界訪問、內(nèi)存泄漏、修改堆棧、PC跑飛的軟件故障注入檢測方法,是IR46中有關(guān)計量法制部分軟件分離相關(guān)要求的一種合理技術(shù)檢測手段,也是IR46電能表軟件評價有效補(bǔ)充。
[1]朱文忠. OIML IR46電能表國際建議修訂中的新動向[J].計量技術(shù),2011(12):14-17.
[2]吳瀛. OIML IR46電能表型式評價中軟件型評的要求與方法[J].計量技術(shù),2013(12):33-36.
[3] OIML IR46, Active Electrical Energy Meters.
[4]朱文忠.智能電能表的概念、標(biāo)準(zhǔn)化和檢測方法初探[J].電測與儀表,2011(6):48-53.
[5]徐晴.基于EEPROM數(shù)據(jù)讀寫的智能電能表白盒測試方法[J].電測與儀表,2014(3):1-5.
[6]黃海林.龍芯1號處理器的故障注入方法與軟錯誤敏感性分析[J].計算機(jī)研究與發(fā)展,2006,43(10):1820-1827.
[7]張鵬.嵌入式軟件內(nèi)存泄露檢測方法研究[J].計算機(jī)工程與應(yīng)用,2013,49(14):56-59.
TP17
A