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