龐富寬,汪洋,袁瑞銘,巨漢基,宋錫強 ,汪萍萍
(1.國網冀北電力有限公司電力科學研究院,北京 100045;2.華立科技股份有限公司,浙江 杭州 310023)
International Recommendation 46(簡稱R46)是國際法制計量組織(OIML)最新修訂完成的電能表國際建議,對電能計量提出了更高的要求,標準一經發布,包括中國在內的所有OIML成員國必須采納并執行[1]。我國已經在結合R46標準進行相關型式評價大綱、檢定規程等法制內容的修訂,R46標準的修訂對電能計量性能保護軟件設計提出了更高的要求[2]。
R46標準中提供了軟件驗證過程的分析方法,但以文檔審查和設計確認為主,其中相關標準OIML D31《軟件控制計量器具通用要求》及歐洲法制計量組織(WELMEC)的規范WELMEC Guide 7.2《MID軟件指南》針對軟件功能驗證也主要以文檔審查和源代碼檢查為主[3-4]。從國際上看,針對R46標準要求的軟件檢查,目前以廠家文檔可信性申明或第三方源代碼測試為主。該手段可信性不高、可測試性不強,且源代碼檢測過于復雜、檢測成本高。針對國內情況,論文研究了一種針對目標碼的R46表軟件檢測方法,以FPGA技術,代替傳統軟件,采用硬件環境仿真實現軟件模塊間接口測試或軟件故障注入測試,進而實現R46表的軟件法制計量分離、軟件保護、參數保護及在線升級等檢測。
R46標準第3部分Metrological Requirements(計量要求)的3.6條Protection of metrological properties(計量性能的保護)要求儀表應具備保護其計量性能的方法,提出了軟件的標識、軟件保護、參數保護、電子設備和子組件的分離、軟件分離、數據存儲和通信系統數據傳輸、軟件維護和重新配置等,其中關鍵功能,也難以通過傳統黑盒系統測試檢測的以軟件分離、軟件和參數保護、軟件升級為主[5]。
軟件分離要求法制計量部分和非法制計量部分分離,所有執行法制相關功能或包含法制相關數據域的軟件模塊(程序,子程序,對象等)根據要求進行標識,只能通過接口與其它程序進行數據交互;通過接口收到的命令不能影響執行法制計量相關部分組件和設備中的數據、功能;軟件保護要求可通過軟件保護的方式防止未經授權的軟件寫入、修改和改變內存內容;參數保護要求電能表中關鍵計量參數能防止未經授權的修改等;軟件可在線升級,且非法制功能的升級不能影響法制計量功能,升級不成功可恢復先前版本。
國家電網公司R46項目組2016年發布了《基于R46的“雙芯”智能表需求說明書V3.0》,國內采用“雙芯”的技術方案,見圖1所示[6]。即法制計量MCU和管理MCU,從物理上實現法制部分和非法制部分的徹底隔離,該設計方案同時提高了軟件的可測試性,接口易插裝,可實現數據的監測和錯誤注入。

圖1 “雙芯”智能電能表設計方案
法制計量部分計量芯獨立運行,法制認證,不允許軟件升級,由計量功能及相關組件組成,具體包括電壓及電流采樣網絡、計量芯片、計量MCU、存儲單元、RS-485、RTC等;管理芯實現其它非法制應用性功能,包括管理MCU、上、下行通信模塊、顯示單元、存儲單元、RS-485通信、ESAM電路等,管理芯軟件允許升級。
FPGA(Field Programmable Gate Array)現場可編程門陣列,一種新型的半定制邏輯電路,一切通過軟件手段更改、配置器件內部連接結構、元件參數、可隨意定制內部邏輯陣列[7]。優點在于邏輯功能模塊和I/O模塊配置靈活,尤其可重復編程、反復改寫,可代替傳統軟件,使采用硬件來實現故障模擬變得可行、方便[8]。R46智能電能表的軟件仿真測試環境中,利用FPGA進行MCU外圍的EEPROM、Flash、計量芯片寄存器等模擬,可替代其功能,并可實現存儲數據的任意改寫,實現接口數據的監測、錯誤注入等,從而驗證測試程序的執行情況。
文中針對以圖1中國內“雙芯”R46智能電能表進行軟件檢測方案的研究,基于FPGA的軟件仿真測試環境設計如圖2所示,總體設計方案:
(1)MCU核心板:使用廠家提供真實的計量MCU及管理MCU,保證待測R46智能電能表程序運行環境的真實性,2個MCU之間采用SPI接口進行數據交換,接口間可數據插裝,集成到一塊核心板上,該板尺寸、接口統一制定,還由液晶顯示模塊、檢測裝置外圍接口組成;(2)基板:整個檢測裝置的電源及上下電源控制模塊;(3)接口板:安裝電表核心板并與FPGA仿真測試板連接;(4)FPGA仿真板:是軟件測試裝置的核心仿真單元,可采用Intel的FPGA板平臺(含ARM硬核單元),使用可編程語言分別模擬計量MCU及管理MCU外圍的計量芯片、EEPROM、Flash、時鐘芯片及對應接口等,其存儲數據及接口可進行錯誤注入、監測等,形成仿真測試板,仿真過程采用雙端口方式,一個端口模擬實現芯片本身功能,一個端口進行芯片信息與控制單元的數據傳輸及分析;(5)控制單元:利用ARM芯片完成Linux的程序設計,主要進行上位機測試軟件與下位機檢測仿真裝置的數據傳輸、控制及分析,包括SOPC(System-on-a-Programmable-Chip)模塊的設計、網絡接口的設計、通信及FPGA接口控制、上位機軟件及FPGA通信設計等。

圖2 “雙芯”R46智能電能表軟件測試環境設計
2.2.1 FPGA仿真設計
FPGA仿真設計主要包括:(1)FPGA仿真接口定義,覆蓋計量MCU與管理MCU的主要通信與存儲外設接口;(2)FPGA測試板仿真;(3)FPGA與上位機通信接口協議設計。
FPGA仿真接口定義:(1)與計量MCU接口,含UART數據接口;RTC數據接口,FPGA仿真RTC寄存器;計量芯片接口,FPGA仿真計量芯片寄存器數據;Flash數據接口,模擬Flash時序與計量MCU交互;I2C數據接口;IO數據接口;雙芯SPI接口;(2)與管理MCU接口,除類似計量MCU接口外,還包括CARD卡接口數據、ESAM數據接口。
FPGA仿真測試板:基于QuartusII開發平臺,采用Verilog硬件描述語言和有限狀態機分別實現對SPI+Flash、I2C+EEPROM、UART+計量芯片的接口時序和器件控制邏輯仿真[9],實現對FPGA與控制單元ARM的數據交互及仿真設計,模擬替代原有功能,并可實現對通信接口、存儲數據的篡改及監控。以FPGA仿真SPI+Flash模塊為例,包括模擬SPI接口、Flash控制器、Flash存儲器各模塊構成,存儲器使用FPGA內部生成的2個雙端口RAM替代,一端口作為存儲命令和狀態寄存器,一端口存儲數據;FPGA對接受的用戶命令進行解碼譯碼、轉化為相應的信號,控制啟動指令的子模塊。Flash控制器子模塊產生讓芯片執行各操作(寫使能、頁面變成、讀寫狀態寄存器、擦除等)時的指令時序,用戶只需輸入可芯片內部操作的指令及地址即可,SPI接口與Flash數據傳輸由控制器內部的有限狀態機實現[10]。
FPGA與上位機通信協議接口設計:FPGA與上位機采用ModBus TCP/IP協議,上位機作為客戶端,FPGA作為服務器。應用層自定義協議幀包括讀計量MCU FPGA配置、寫計量MCU FPGA配置、讀計量MCU輸入開關量、計量MCU計量芯片寄存器讀寫、計量MCU時鐘芯片寄存器讀寫、計量MCU EEPROM1、統一EEPROM2、FLASH寄存器讀寫、計量MCU RS-485、下行通信模塊寄存器讀寫、管理MCU FPGA配置等。
2.2.2 上位機自動化測試設計
上位機基于.NET平臺的多層技術架構,使用C#語言、MySQL數據庫、腳本技術等實現測試的全自動化。重點包括以下功能模塊:
(1)元器件配置模塊:FPGA仿真覆蓋廠家通用的各EEPROM、FLASH、計量芯片等型號,可選定需要的器件型號,且各器件的FPGA仿真程序可升級;
(2)存儲器地址配置模塊:R46智能電能表軟件檢測主要涉及深層次的軟件內部存儲邏輯,為提高測試自動化,廠家將存儲按照規范化的地址分配表進行填寫,如表1所示。

表1 存儲器件地址分配表
提供關鍵數據類的表頭,以便方案設計快速找到地址,存儲名稱,存儲單元起始地址、數據類型、格式、存儲位置(存儲器件類型等)。上位機將根據導入的數據規則自動解析;
(3)測試方案設計模塊:制定基礎操作規范,包括FPGA操作(以存儲數據、接口數據錯誤注入操作為主)、控源操作、函數運算、信息提示。方案編制結構化、標準化,每個測試用例根據測試方案定義測試步驟,每個測試步驟對應一個最小單元的基礎操作,將所有測試步驟按照基礎操作編制,形成可實施自動測試的方案;
(4)數據實時監測模塊:可以進行存儲數據及寄存器數據的實時監控、手工的數據改寫,輔助測試分析。
2.2.3 測試步驟
整個測試過程由3部分組成,上位機方案編輯及自動測試單元、ARM自動控制單元、待測單元(FPGA及加載待測程序的核心板)。將測試方案等基礎信息配置自動發送測試命令,ARM控制單元進行下位機的控制及協議、數據交互,測試用例在FPGA及核心板組成的測試環境中自動運行,測試結果返回上位機,詳細步驟見圖3描述。

圖3 測試步驟
測試用例設計方法主要為故障注入法及接口測試法:(1)故障注入測試:一種相對特殊的高度靈活性方法,有意識根據已知故障模式,產生故障并施加于目標系統,加速系統錯誤和失效發生,采集系統對注入故障的反應信息,并對回收信息進行分析,提供有關結果的過程;(2)接口測試:測試系統組件間接口的一種測試,檢測外部系統與系統之間以及內部各個子系統之間的交互點,重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關系等。針對R46智能電能表軟件要求,以存儲數據、參數已知故障進行注入及模塊間接口交互影響測試為主。
以R46軟件檢測的法制計量分離測試、電量數據保護測試等為例,測試用例設計方案舉例如下:
(1)法制計量軟件分離測試:電能表管理MCU電量、時鐘等的數據來源于計量MCU,模擬管理MCU外圍EEPROM故障,驗證計量MCU部分電量運行是否正確且管理MCU部分電量是否從計量部分讀取,可恢復。測試用例設計方案流程如圖4所示;

圖4 法制計量軟件分離測試
(2)計量芯EEPROM電量數據保護測試:電表EEPROM在讀寫過程中,受外部干擾,讀出/寫入數據有可能為錯誤數據,電量作為關鍵數據應當具有備份、錯誤自恢復功能。假如有4份備份數據,改錯備份2、3、4的電量數據及校驗和,驗證電量是否可依靠備份1數據自恢復,測試用例設計方案流程如圖5所示。

圖5 計量芯EEPROM電量數據保護測試
應用該測試裝置,針對幾個廠家提供的基于“雙芯”基礎方案開發的R46智能電能表,進行軟件測試驗證,分別發現了一些不符合R46智能電能表設計要求的問題:
(1)2個廠家的軟件分離設計不符合要求,當管理芯EEPROM出現問題時,1個廠家計量芯部分電量出錯,不能正常計量;1個廠家計量芯電量正常,但管理芯的電量沒有同步計量芯電量,沒有正常恢復;
(2)3個廠家的軟件在線升級不合格,管理芯部分升級成功后,對法制計量產生了影響,1個廠家計量芯電量數據計量不準確;1個廠家計量芯停止了計量;另外1個廠家沒有產生升級事件記錄;
(3)2個廠家的計量芯校表參數沒有保護設計,當寄存器中校表參數被改錯后,1個廠家校表參數未恢復正確值;1個廠家未在規定時間內恢復,糾錯時間過長。
測試驗證該測試平臺達到設計目的,檢測方法可行且具有合理性,可有效應用于R46智能電能表的軟件項目檢測,實現基于表目標碼的測試。
研究了R46智能電能表的軟件檢測項目需求,基于國內“雙芯”表方案,采用FPGA仿真MCU外圍器件及接口等設計了檢測方案,分析了測試原理、FPGA仿真設計法、上位機自動測試設計及測試步驟等。最后舉例設計了基于故障注入,進行R46智能電能表法制計量軟件分離、軟件保護等測試用例,通過對試驗廠商生產的智能電能表的程序的檢測,驗證了測試平臺可實現基于目標碼的R46智能電能表軟件分離測試、軟件保護、參數保護、在線升級等檢測。可根據后續下一代R46智能電能表的詳細設計規范進一步優化該測試平臺,并編寫R46智能電能表軟件檢測規范,研究成果為R46智能電能表在國內落地及檢測奠定了基礎,提供了測試手段。