解夢迪,姜姍姍,郭照峰,賈 凡
(北京航天測控技術(shù)有限公司,北京 100041)
目前在地面裝備中為提高系統(tǒng)長期加電工作可靠性,雙機(jī)冗余系統(tǒng)已經(jīng)廣泛應(yīng)用,但在系統(tǒng)軟件容錯(cuò)方面存在著一些不足,會(huì)因?yàn)橄到y(tǒng)測控軟件的問題導(dǎo)致雙機(jī)冗余失效,進(jìn)而導(dǎo)致雙機(jī)系統(tǒng)沒有起到作用。為解決因系統(tǒng)測控軟件異常導(dǎo)致的冗余失效問題,提出一種任務(wù)狀態(tài)、CPU溫度、CPU占用率[1]、磁盤剩余空間以及IO狀態(tài)監(jiān)測的故障診斷與容錯(cuò)方法,該方法進(jìn)一步提高系統(tǒng)穩(wěn)定性和可靠性,保障測控設(shè)備長期連續(xù)加電的需求。
系統(tǒng)采用基于龍芯CPU、CPCI總線以及實(shí)時(shí)操作系統(tǒng)的組合架構(gòu),主要實(shí)現(xiàn)測控流程、數(shù)字量IO的輸入輸出控制、AD/DA模擬量采集與輸出、網(wǎng)絡(luò)通訊、串口通訊以及熱備冗余等功能。如圖1所示,為實(shí)現(xiàn)雙機(jī)冗余[2]功能開發(fā)的冗余控制模塊,它是嵌入式測控系統(tǒng)雙機(jī)冗余控制和切換的核心模塊,該模塊產(chǎn)生雙機(jī)通信信息,并通過對機(jī)的信息判斷是否需要本機(jī)切換成主機(jī)或從機(jī)狀態(tài),從而給CPU主從機(jī)切換指令,實(shí)現(xiàn)主從機(jī)的熱備冗余切換,保障雙機(jī)系統(tǒng)整體可靠性。
圖1 系統(tǒng)結(jié)構(gòu)圖
如圖1所示,雙機(jī)采用冗余控制板構(gòu)建雙機(jī)冗余架構(gòu),其中1號機(jī)的sd1和sd2是冗余控制板發(fā)送的兩路心跳信號,rc1和rc2是冗余控制板接收的對機(jī)兩路心跳信號;同樣,2號機(jī)也有兩路心跳信號發(fā)送和兩路心跳信號接收,如圖2所示。
圖2 雙機(jī)心跳檢測結(jié)構(gòu)圖
而系統(tǒng)故障如任務(wù)異常、CPU溫度過高、CPU占用率過大、磁盤剩余空間不足以及IO狀態(tài)異常等因素沒有被考慮到容錯(cuò)機(jī)制中,文章將基于上述雙機(jī)系統(tǒng)開展對系統(tǒng)故障因素的影響研究并提出一種監(jiān)測與容錯(cuò)方案設(shè)計(jì)與實(shí)現(xiàn)。
系統(tǒng)主要包括龍芯微處理器(MCU,micro controller unit)模塊、多種外設(shè)功能模塊(冗余控制模塊、數(shù)字量IO模塊、AD/DA模擬量模塊、RS422串口模塊以及供電模塊等)。
圖3 龍芯控制器原理圖
2J1500+1A500_3U_CPCI板卡是3U計(jì)算機(jī)模塊,采用龍芯2J1500處理器,實(shí)現(xiàn)符合Compact PCI 2.0R3.0規(guī)范的3U Compact PCI接口計(jì)算機(jī)模塊,控制器原理如圖3所示。該計(jì)算機(jī)模塊具有完整的計(jì)算機(jī)功能,集成網(wǎng)絡(luò)、顯示、PCI-PCI橋、SATA接口、聲卡、串口、VGA、USB接口等功能。同時(shí),為避免因靜電造成的板卡IC器件損壞,故針對各個(gè)接口如USB、SATA、PS/2、VGA做了特定的ESD防護(hù)設(shè)計(jì),將ESD器件放在連接器側(cè)放置,同時(shí)濾波器件緊挨ESD器件,最大程度地保護(hù)因靜電引起的瞬態(tài)電流而對板卡器件造成的損壞,延長板卡器件使用周期。
冗余控制模塊是基于CPCI總線和FPGA的高速邏輯控制模塊,如圖4所示。該模塊用于完成包括本機(jī)切換控制、報(bào)警控制、隔離控制等功能。硬件功能組成包括RS422隔離通信、繼電器驅(qū)動(dòng)、LED驅(qū)動(dòng)、電源管理、電平轉(zhuǎn)換、電源監(jiān)控、CPCI總線及FPGA等電路。
圖4 冗余控制模塊原理圖
數(shù)字IO模塊輸出TTL電平信號,用于測控組合設(shè)備前面板信號指示燈控制,同時(shí)采集來自串口通信切換模塊的狀態(tài)回采信號用于控制器模塊對設(shè)備隔離狀態(tài)自檢回采。控制器模塊通過數(shù)字IO模塊驅(qū)動(dòng)程序控制指示燈驅(qū)動(dòng)電路實(shí)現(xiàn)面板指示燈狀態(tài)控制,原理如圖5所示。
圖5 數(shù)字量IO模塊原理圖
AD/DA模塊為基于CPCI總線和FPGA的高速邏輯控制模塊,用于完成包括模擬量電壓采集、模擬電壓輸出和開關(guān)量IO等功能。硬件功能組成包括AD、DA、IO、電源管理、CPCI總線、FPGA等電路,原理如圖6所示。
圖6 AD/DA模擬量模塊原理圖
RS422串口模塊是基于CPCI總線的4路隔離串行通信接口模塊,如圖7所示。422串口模塊主要基于UART模塊來實(shí)現(xiàn)串行通信。主要由UART模塊、電平轉(zhuǎn)換模塊、422隔離收發(fā)模塊、電源管理、CPCI總線、FPGA等電路組成。
圖7 RS422串口模塊原理圖
電源模塊主要功能將輸入直流DC28V通過內(nèi)部極性保護(hù)組件、濾波器組件、輸入濾波電路、DC/DC變換器組件及輸出濾波組件變換一組穩(wěn)定的直流輸出,給系統(tǒng)供電,原理如圖8所示。
圖8 電源模塊原理圖
系統(tǒng)測控軟件運(yùn)行在測控設(shè)備中,實(shí)現(xiàn)自檢、網(wǎng)絡(luò)接收指令、控制指令執(zhí)行、數(shù)據(jù)采集與控制、組播數(shù)據(jù)回傳、災(zāi)備恢復(fù)、應(yīng)用故障診斷等。文章詳細(xì)對故障信息采集以及故障診斷設(shè)計(jì)進(jìn)行闡述。
文章主要分析任務(wù)監(jiān)測[3]狀態(tài)、CPU溫度、CPU占用率、磁盤剩余空間狀態(tài)以及IO狀態(tài)故障診斷分析,根據(jù)故障分類形成一組結(jié)果存儲在一維數(shù)組中,從數(shù)組中查找找到并定位故障,而順序查找和二分查找的實(shí)踐復(fù)雜度分別是O(n)和O(logn),對于實(shí)時(shí)系統(tǒng)選擇用復(fù)雜度O(1)的查找算法更加合適。而哈希算法是一種復(fù)雜度O(1)的查找算法,其中位圖是其中一種應(yīng)用,本文將采用位圖查找故障元素。
故障因素按照數(shù)組設(shè)計(jì)為element_array[]={“任務(wù)狀態(tài)”,“CPU溫度”, “CPU占用率”,“磁盤剩余空間”,“IO狀態(tài)”}={4,3,2,1,0},根據(jù)element_array和切換結(jié)果保存數(shù)組Listswitch生成位圖映射表BitMap,如表1所示。
表1 位圖映射表BitMap
其中:normal表示無異常;IOabnormal表示IO異常;VHDCabnormal表示硬盤剩余異常;RCPUabnormal表示CPU占用率異常;TCPUabnormal表示CPU溫度異常;TASKabnormal表示任務(wù)異常。
圖9Listswitch中各狀態(tài)位置排列,D4表示任務(wù)狀態(tài)、D3表示CPU溫度狀態(tài)、D2表示CPU占用率狀態(tài)、D1表示磁盤狀態(tài)、D0表示IO操作狀態(tài),同理可以處理警告保存數(shù)組Listwarn。
圖9 數(shù)組示意
通過維護(hù)記錄位圖映射表BitMap和故障因素的數(shù)組Listswitch,通過計(jì)算數(shù)組Listswitch所表示的值,然后索引映射表BitMap就可以找到當(dāng)前哪些因素觸發(fā)切換條件。這個(gè)數(shù)組的值表示的位置和映射表BitMap中的位置是一一對應(yīng)的,可以快速定位當(dāng)前系統(tǒng)故障因素。
任務(wù)狀態(tài)表示實(shí)時(shí)系統(tǒng)中任務(wù)運(yùn)行狀態(tài),有多種狀態(tài)如“STOP”、“DELAY”、“SUSPEND”以及“READY”等。
測控軟件啟動(dòng)時(shí),測控軟件建立并啟動(dòng)任務(wù)時(shí),有兩類獲取到任務(wù)ID的途徑。一類是將其返回的任務(wù)ID實(shí)時(shí)的保存在任務(wù)ID列表中。另一類是系統(tǒng)任務(wù),通過系統(tǒng)函數(shù)接口使用名稱查找其任務(wù)ID,并將其存到任務(wù)ID列表中,程序動(dòng)態(tài)維護(hù)任務(wù)ID列表。
設(shè)計(jì)注冊所需要監(jiān)測的任務(wù)詳細(xì)見表2,任務(wù)狀態(tài)監(jiān)測邏輯如圖10所示。
表2 監(jiān)測任務(wù)列表
任務(wù)狀態(tài)采集與監(jiān)測設(shè)計(jì)概述如下:
1)啟動(dòng)任務(wù)時(shí)記錄任務(wù)返回值為任務(wù)的ID值并依次存入到固定數(shù)組idarray[n]。
2)動(dòng)態(tài)任務(wù)啟動(dòng)和退出主要包含刪除任務(wù)前更新數(shù)組idarray[n]的ID和正常退出前更新數(shù)組idarray[n]的ID。
3)針對數(shù)組idarray[n]進(jìn)行掃描,判斷其任務(wù)狀態(tài),識別到任務(wù)“STOP”異常后,完成異常任務(wù)切換標(biāo)志設(shè)置;識別到任務(wù)“SUSPEND”,設(shè)置報(bào)警設(shè)置,表明系統(tǒng)出現(xiàn)任務(wù)SUSPEND的狀態(tài),記錄日志。
動(dòng)態(tài)任務(wù)的個(gè)數(shù)有限,可以設(shè)計(jì)固定任務(wù)在數(shù)組前N位,動(dòng)態(tài)任務(wù)的ID存入固定的后半段N-1~M,系統(tǒng)任務(wù)存入M+1~N,邏輯設(shè)計(jì)如圖10所示。
圖10 任務(wù)狀態(tài)獲取與監(jiān)測邏輯設(shè)計(jì)圖
在任務(wù)狀態(tài)采集與監(jiān)測模塊中,完成任務(wù)ID維護(hù)、任務(wù)狀態(tài)實(shí)時(shí)監(jiān)測以及監(jiān)測結(jié)果標(biāo)記等工作,為故障診斷模塊提供處理依據(jù)。
表3 系統(tǒng)運(yùn)行任務(wù)狀態(tài)監(jiān)測判據(jù)詳細(xì)表
軟件設(shè)計(jì)獨(dú)立監(jiān)測模塊[4],周期性的采集CPU溫度(TCPU)、CPU占用率(RCPU)以及磁盤剩余空間(VHDC)信息,CPU溫度/占用率以及磁盤空間狀態(tài)判據(jù)如表4所示,傳遞給信息處理模塊使用,如圖11所示。
表4 CPU溫度/占用率以及磁盤監(jiān)測判據(jù)詳細(xì)表
圖11 CPU溫度/占用率/磁盤剩余空間監(jiān)測邏輯
軟件對于系統(tǒng)的運(yùn)行狀態(tài)(CPU溫度、CPU占用率以及磁盤剩余空間)故障進(jìn)行“故障趨勢分析”,即當(dāng)表4中的檢測項(xiàng)目的采集值超過“報(bào)警門限”或“切換門限”后,軟件會(huì)對之后5個(gè)檢測周期內(nèi)該參數(shù)的變化趨勢進(jìn)行預(yù)測與判斷,根據(jù)其曲線走向執(zhí)行相應(yīng)的報(bào)警動(dòng)作或切換動(dòng)作,防止指標(biāo)出現(xiàn)極短時(shí)間超過閾值后回落到正常范圍情況時(shí)出現(xiàn)虛報(bào),從而降低虛警概率。
系統(tǒng)監(jiān)測過程中,被監(jiān)測信息(CPU溫度、CPU占用率以及磁盤剩余空間的變化規(guī)律隨時(shí)間是不斷變化的,為了從監(jiān)測數(shù)據(jù)中提取出有效信息,需要對監(jiān)測數(shù)據(jù)的走勢做出假設(shè)。
本文采用最小二乘法[5]實(shí)現(xiàn)對嚴(yán)重故障的預(yù)測與分析,最小二乘法是一種數(shù)據(jù)優(yōu)化技術(shù),它通過最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡便的預(yù)測未來的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。
具體過程如下:“報(bào)警門限”和“切換門限”可以通過用戶配置文件設(shè)置。當(dāng)采樣值超過“報(bào)警門限”或者“切換門限”時(shí),采樣過去5個(gè)周期的實(shí)測值采用線性擬合的方法擬合出曲線,f(t)=a+b*t+…+c*tn,t表示時(shí)刻,f(t)表示t時(shí)刻的擬合值,根據(jù)此公式預(yù)測未來趨勢,進(jìn)而來預(yù)測超過“報(bào)警門限”或“切換門限”是否有效發(fā)生,完成“報(bào)警”或“切換”標(biāo)志設(shè)置,邏輯設(shè)計(jì)如圖12所示。
圖12 CPU溫度/占用率以及磁盤空間判斷邏輯圖
系統(tǒng)監(jiān)測IO輸出與采集的結(jié)果IOout和IOin比對,設(shè)計(jì)當(dāng)結(jié)果IOout?IOin,判定IO控制異常,設(shè)置切換狀態(tài)。
圖13 IO操作監(jiān)測邏輯
綜合任務(wù)狀態(tài)、CPU溫度、CPU占用率、磁盤剩余空間以及IO狀態(tài),采用位圖[6-7]查找算法,快速檢測出當(dāng)前系統(tǒng)中需要切換的因素。
故障診斷[8-22]實(shí)時(shí)監(jiān)測任務(wù)監(jiān)測狀態(tài)、CPU溫度、CPU占用率以、磁盤剩余空間狀態(tài)以及IO狀態(tài)等,并根據(jù)各項(xiàng)因素保存的“警告”列表Listwarn和“切換”列表Listswitch中狀態(tài),實(shí)時(shí)識別并做出操作。
識別是normal狀態(tài)不做處理;識別是warn狀態(tài)記錄日志提示;識別是switch狀態(tài)執(zhí)行停止喂狗并記錄日志。
綜合判斷系統(tǒng)報(bào)警與切換條件如表5所示。
表5 綜合判斷表
任務(wù)狀態(tài)、CPU溫度、CPU占用率以及磁盤剩余空間狀態(tài)獨(dú)立判斷,形成報(bào)警和異常切換結(jié)果,依據(jù)表邏輯,綜合判斷,設(shè)計(jì)如圖14所示。
圖14 綜合判斷邏輯設(shè)計(jì)
1)任務(wù)狀態(tài)出現(xiàn)“STOP”;
2)CPU溫度TCPU≥85 ℃;
3)CPU占用率RCPU≥80%;
4)磁盤剩余空間VHDC≤1 GB;
5)IO操作異常IOout?IOin。
測控軟件停止給RC模塊發(fā)喂狗操作,設(shè)備即故障隔離,觸發(fā)停止喂狗操作的輸入有任務(wù)異常、CPU溫度異常、CPU占用率異常、磁盤剩余空間不足、IO操作異常等。
5.2.1 任務(wù)異常識別仿真
任務(wù)異常是指所監(jiān)測任務(wù)狀態(tài)在運(yùn)行過程中出現(xiàn)“STOP”狀態(tài)(任務(wù)異常無法工作)。所監(jiān)測的具有代表性的任務(wù)主要包含任務(wù)如表1所示,仿真過程中,通過故障注入軟件[23]向前端測控軟件中注入觸發(fā)任務(wù)STOP指令,當(dāng)前端測控軟件響應(yīng)這一條指令時(shí),任務(wù)在t1時(shí)刻狀態(tài)切換為“STOP”狀態(tài),故障診斷模塊識別到異常狀態(tài)執(zhí)行停止喂狗操作,當(dāng)前設(shè)備故障隔離,對機(jī)切換為單主機(jī)工作。
5.2.2 CPU溫度異常識別仿真
CPU溫度表示當(dāng)前主控制器CPU實(shí)時(shí)溫度,仿真時(shí),通過故障注入軟件向前端測控軟件中注入修改CPU溫度全局變量指令:
1)設(shè)置值低于預(yù)警值(TCPU<70 ℃),無處理;
2)設(shè)置值高于預(yù)警值小于切換閾值(70 ℃≤TCPU<85 ℃),設(shè)置報(bào)警標(biāo)志并寫日志記錄CPU溫度預(yù)警;
3)設(shè)置值在預(yù)警閾值上下波動(dòng),模擬虛警的工況,根據(jù)設(shè)計(jì)通過曲線擬合可以判別出此種虛警情況,記錄虛預(yù)警記錄即可;
4)設(shè)置值達(dá)到切換閾值(TCPU≥85 ℃),執(zhí)行停止喂狗操作,當(dāng)前設(shè)備故障隔離,對機(jī)切換為單主機(jī)工作。
5.2.3 CPU占用率異常識別仿真驗(yàn)證
CPU占用率表示當(dāng)前系統(tǒng)CPU內(nèi)存使用情況,仿真時(shí),通過故障注入軟件向前端測控軟件中注入修改CPU占用率指令,指令執(zhí)行通過CPU設(shè)置接口控制當(dāng)前系統(tǒng)CPU占用率:
1)設(shè)置值低于預(yù)警值(RCPU<50%),無處理;
2)設(shè)置值高于預(yù)警值小于切換值(50%≤RCPU<80%),設(shè)置報(bào)警標(biāo)志并寫日志記錄CPU占用率預(yù)警記錄;
3)設(shè)置值在報(bào)警閾值上下波動(dòng),模擬虛警的工況,根據(jù)設(shè)計(jì)通過曲線擬合可以判別出此種虛警情況,記錄虛預(yù)警記錄即可;
4)如果預(yù)測值達(dá)到閾值(RCPU≥80%),按照切換處理;設(shè)置值達(dá)到切換閾值(RCPU≥80%),執(zhí)行停止喂狗操作,當(dāng)前設(shè)備故障隔離,對機(jī)切換為單主機(jī)工作。
5.2.4 磁盤剩余空間異常識別仿真驗(yàn)證
嵌入系統(tǒng)中磁盤空間有限,磁盤資源寶貴,剩余空間必須監(jiān)測。仿真時(shí),通過ftp工具向設(shè)備硬盤寫入文件,消耗硬盤空間:
1)剩余空間值高于預(yù)警值(VHDC>3 GB),無處理;
2)剩余空間值高于預(yù)警值小于切換值(1 GB 3)剩余空間值在預(yù)警閾值上下波動(dòng),模擬虛警的工況,根據(jù)設(shè)計(jì)通過曲線擬合可以判別出此種虛警情況,記錄虛預(yù)警記錄即可; 4)如果預(yù)測值低于閾值(VHDC≤1 GB),按照切換處理,執(zhí)行喂狗操作,當(dāng)前設(shè)備故障隔離,對機(jī)切換為單主機(jī)工作。 5.2.5 IO操作異常識別仿真驗(yàn)證 IO操作(IOcontrol)異常表示IO輸出結(jié)果IOout與回采結(jié)果IOin不一致,表示IO功能失效,直接影響系統(tǒng)的執(zhí)行結(jié)果。仿真時(shí),通過故障注入軟件向測控軟件中注入修改IO回采結(jié)果IOin,IOout==IOin表示正常狀態(tài)無需處理;IOout?IOin表示異常,執(zhí)行停止喂狗操作,當(dāng)前設(shè)備故障隔離,對機(jī)切換為單主機(jī)工作。 5.2.6 故障診斷綜合判斷仿真驗(yàn)證 綜合設(shè)計(jì)測試用例組合如表6所示。 表6 實(shí)驗(yàn)組合列表 依據(jù)表設(shè)計(jì),每種條件開展20次測試,測試結(jié)果如表7所示。 表7 實(shí)驗(yàn)結(jié)果列表 通過實(shí)驗(yàn)結(jié)果表明,文章所設(shè)計(jì)的系統(tǒng)故障診斷與容錯(cuò)方法能夠100%識別所監(jiān)測任務(wù)狀態(tài)、CPU溫度、CPU占用率、磁盤剩余空間以及IO操作異常的“報(bào)警門限”和“切換門限”,并且能夠有效地處理虛報(bào)警和虛切換的工況,有效地增強(qiáng)了冗余測控系統(tǒng)的運(yùn)行可靠性,文章目前只采考慮了任務(wù)狀態(tài)、CPU溫度、CPU占用率、磁盤剩余空間以及IO狀態(tài)等5項(xiàng)異常信息輸入且故障信息分析處理算法比較單一,與實(shí)際工況存在著一些差異,實(shí)際場景中工作參數(shù)會(huì)更多,如各個(gè)功能板卡工作情況、系統(tǒng)數(shù)據(jù)來源是否存在嚴(yán)重異常,并且在數(shù)據(jù)分析方面可以引入智能化算法分析研究等。 文章提出一種故障診斷與容錯(cuò)方法,能夠識別系統(tǒng)中任務(wù)異常、CPU溫度過高、CPU占用率過大、磁盤剩余空間不足以及IO操作異常等故障狀態(tài),并對各項(xiàng)結(jié)果進(jìn)行綜合分析判斷以及結(jié)果等級分類與處理,有效提高了冗余測控系統(tǒng)工作的可靠性和系統(tǒng)穩(wěn)定性,但文章也存在輸入?yún)?shù)不足以及數(shù)據(jù)處理不夠智能的問題,還需要對數(shù)據(jù)預(yù)測和學(xué)習(xí)進(jìn)行研究,將來可以延伸應(yīng)用到小型化多冗余分布式的測控系統(tǒng)。5.3 實(shí)驗(yàn)數(shù)據(jù)
5.4 實(shí)驗(yàn)結(jié)果分析
6 結(jié)束語