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