?

一種基于RPC的組態化衛星模擬器故障注入方法*

2021-05-18 05:48楊善強李華旺常亮高才棟虞業濼
中國科學院大學學報 2021年3期
關鍵詞:單機調用模擬器

楊善強,李華旺,常亮,高才棟,虞業濼

(1 中國科學院微小衛星創新研究院, 上海 201210; 2 中國科學院大學, 北京 100049; 3 上??萍即髮W, 上海 201210)(2019年8月9日收稿; 2019年12月4日收修改稿)

衛星長時間運行在復雜、惡劣的太空環境中,不可避免地會出現故障,有的故障會對衛星的壽命和應用造成影響[1-2]。故障注入能夠有效檢驗系統的容錯能力,已經在軟件測試領域得到廣泛應用。故障注入的基本思想是:應用和環境共同組成系統,環境的范圍包含所有不屬于應用程序的代碼,應用和環境交互的接口處是故障的注入點,通過在故障注入點上模擬實現各類在真實環境中可能出現的故障,觀察被測對象的反應,從而檢驗其對故障的耐受能力[3-4]。

目前對故障注入不同角度和深度的研究已有很多成果,其實現方法和應用場景各不相同:

1)為提高模擬程度,建立基于半物理的實時仿真平臺,實現不同層次不同類型故障的單獨注入,更加真實地得到故障信息。然而半實物仿真測試環境需要開發硬件設備,搭建硬件連接,測試的及時性和靈活性得不到保證[5]。

2)為精確有效地實現故障注入,通過在源碼中添加故障注入代碼,在有故障注入請求時就進入相應分支進行故障注入。然而故障注入工具的開放性欠好,很難在此基礎上進行再開發和擴展[6]。

3)為注入任意位置任意類型的故障,提高仿真平臺的通用性,根據系統配置信息構建存儲所有可能的通信鏈路節點的故障庫,通過多元組或文本模型實現對任意位置任意時間的故障注入。但該方法只實現了目標系統鏈路的離散故障,缺少對連續故障的注入[7]。

以上方法與目標研究系統有較強的關聯性,但在面對新的目標系統時故障注入模型的復用程度低[8-11]。本文從提高故障仿真模型的可復用性角度,就衛星系統的仿真測試提出一種基于RPC(remote procedure call,遠程過程調用)的組態化模擬器故障注入方法,設計一個內含故障注入的通用衛星單機模型,可以通過通用衛星單機模型的組態化實現不同的衛星單機,同時在配置衛星單機模型時不必考慮故障注入。進一步地,該通用單機適用于不同型號的衛星單機,有效縮短衛星仿真建模的周期。

1 故障注入模型設計

1.1 故障注入模型結構

故障注入模型根據功能需要由通用單機模型、故障協議與故障注入前端3部分組成。故障注入前端負責獲取用戶輸入的故障信息和顯示衛星的信息,并且通過RPC調用模擬器的功能函數來封裝、組幀故障信息。通過模型拆分,各模塊之間通過接口實現,可以有效地增加整個模型的可維護性和復用性。模型體系結構如圖1所示。

圖1 故障注入模型結構圖Fig.1 Structure chart of fault injection model

1)故障注入是故障注入前端將故障信息傳遞給衛星模擬器,然后獲取衛星模擬器對故障信息處理的返回值的過程。為提高故障注入模型的復用性,使之適用于不同型號的單機,設計一種通用單機模型。在通用單機模型中提供模型接口,當為某型號衛星建模時可以直接調用相應接口配置為實際的單機模型(如星敏感器、飛輪等)。

2)為提高故障注入模型的可維護性、可擴展性和代碼的易讀性,將添加故障信息過程抽象為RPC。使用RPC通信能夠使故障注入前端就像進行本地調用一樣去調用模擬器的相應函數來處理打包故障信息。

3)同時設計故障注入協議用以對故障前端輸出與接收故障信息進行控制,其規定了故障信息的封裝方式以及故障注入前端與衛星模擬器之間通信鏈路的數據格式,是溝通故障注入前端與模擬器的橋梁。

1.2 通用單機模型設計

由于任何數據以及數據交互過程均可抽象為某種數據交互模型,在仿真環境中把數據交互模型稱為數據流模型[12]?;诖?,設計一個如圖2所示的通用數據流單機模型框架,將單機的參數與數據打包動作進行分離,通過參數庫、數據打包、邏輯控制3個功能模塊描述該通用單機模型。功能模塊之間通過接口進行信息交互,單機參數、數據打包以及邏輯動作都是由用戶定義,同時故障注入在框架內部完成。

圖2 通用單機模型結構圖Fig.2 General model structure diagram

為提高單機模型的復用性,對通用單機模型的內部模塊做如下約定:

1)參數庫中使用三元組(標識符、數據、數據鎖)定義單機的參數屬性,分別表示該單機收到的指令或遙測數據的身份標識、該參數值和該值是否可以被修改,若此時值由于故障被鎖定,則動力學數據無法寫入參數庫。

2)數據打包模塊從參數庫中提取數據,進行打包封裝、校驗,并且當有故障激發,在打包時進行故障注入。

3)邏輯模塊讀取和更新參數庫的內容,同時決定數據包封裝和發送的時機,還規定了發送次數。外部可以調用邏輯模塊的外部接口。

單機通用模型的3個模塊都提供外部接口函數,在搭建具體單機仿真模型時,只需調用相應的接口函數來創建自己的參數庫、數據更新函數、數據發送函數即可快速完成單機建模。

1.3 故障協議設計

設計一組故障協議規定模擬器對故障注入前端的故障信息的打包封裝格式。并將通用故障協議分為3層:鏈路層、任務數據層、業務控制層,如圖3所示。

圖3 故障協議層次圖Fig.3 Fault agreement hierarchy

1)鏈路層協議

鏈路層是整個故障協議的最底層,所有的上層模塊都依賴于鏈路層,其不關心實際的遠程調用邏輯,僅負責信息的收發和編解碼,同時為上層模塊提供與業務無關的基礎服務。

在鏈路層,數據是以通信幀的形式在衛星單機各模塊間流動的,各種數據從產生節點到目的節點需要指定一個傳輸鏈路,并且需要規定好通信幀的格式,本文設計的通信幀格式如表1所示。此處,衛星模擬器與故障注入前端之間通過TCP(transmission control protocol,傳輸控制協議)進行通信。

表1 通信幀格式描述Table 1 Description of communication frame format

2)任務數據層協議

任務數據層主要記錄故障注入的數據信息,同時對不同的故障信息設計不同的數據格式封裝處理,這里設計6種(協議類、單機參數類、動力學數據類、仿真控制類、指令注入類、外設類)數據格式應對不同類型的故障信息。

這6種數據格式均分為有效載荷區和數據區兩部分,有效載荷存放的是需要調用的數據交互方法和同類故障數據的組數計數器,數據區為故障前端輸入的故障數據。對不同的故障信息,數據區內部的數據結構不同,如圖4所示。

圖4 任務數據層數據格式Fig.4 Data format of task data layer

3)業務控制層協議

業務控制層定義一組數據業務,又稱為數據交互方法,衛星模擬器通過調用不同的業務來處理故障注入前端傳來的故障信息,即將故障信息注入到衛星仿真模型中。

由于衛星中數據交互的任意接口位置都有可能發生故障,因此在本文中將所有的數據交互方法統稱為原子故障。原子故障是衛星模擬器的最底層故障,通過原子故障可以組合共同作用實現更加復雜的故障,根據衛星模擬器故障注入的需要,設計表2所示的28種原子故障實現衛星模擬器的故障。

1.4 基于RPC的通信機制

為了提供未來進一步擴展和維護的可能性[13],使用RPC完成對故障注入前端故障信息的封裝。RPC是一種基于客戶/服務模式的函數調用過程,它將一個服務的請求和執行分別存放在客戶端和服務器之中,其本質是在客戶端要求遠程服務端運行某項服務并獲取其結果的過程,如圖5所示。它是一種進程間的通信機制,一般承擔系統協調與數據交互的責任,并未規定具體的實現方式、平臺和語言[14-15]。

表2 原子故障類型表Table 2 Atomic fault types

圖5 調用包在遠程過程調用中的傳輸Fig.5 Transmission of the call package during a RPC

通過使用RPC的通信機制,可以將故障信息的封裝與故障注入前端分離,這樣故障注入前端只需要負責捕獲用戶輸入的故障信息以及顯示功能,易于擴展新的故障。

這里將故障注入前端設定為客戶端,衛星模擬器為服務端,提供客戶端需要的故障信息打包封裝函數。通過RPC封裝故障前端的故障信息的過程為:當使用者在故障注入前端添加故障信息后,客戶端將目標程序的規范和相關參數放置在調用信息包中,并請求RPC網絡鏈路將調用包發送給被調用者,即服務端。一旦服務端接收到這些信息包,服務端會將它們解包獲取任務數據,然后根據任務數據中有效載荷標識的業務方法去執行一個完全正常的本地調用,該本地調用會調用服務端中相對應的程序去處理任務數據中的數據。與此同時,服務端的調用進程將被掛起并等待結果包的返回。當服務端中的調用完成時,它將結果包發送給客戶端,然后結果包傳送回給客戶端被掛起的進程,它們將被解包并返回客戶端的初始調用函數。

1.5 故障注入流程

基于上述設計模塊,故障注入實現流程如圖6所示。

圖6 故障注入流程Fig.6 Flow chart of simulating faults of satellite

1)在故障注入前端的界面上給目標單機添加故障信息后,通過RPC調用數據交互方法將故障信息、故障單機信息添加到通信幀中,然后發送給模擬器。

2)模擬器接受到通信幀后,分析通信幀的目的地(即目標單機),向目標單機發送故障數據,而單機接收到數據后,在更新或打包單機數據時根據故障類型將故障信息封裝到單機數據中。

3)之后模擬器再將單機數據按照表1所示格式組幀,然后發送給故障注入前端,故障注入前端再將收到的通信幀解幀并且通過界面顯示。

2 實踐驗證

2.1 組態化實現星敏感器

通過前文設計的衛星通用單機模型能夠組態實現不同型號的單機模型,由于篇幅有限,本文僅以某型號的星敏感器為例講述使用通用單機模型組態化為實際單機的過程,不同型號、不同單機只是它們的參數庫、遙測控包和觸發事件的邏輯不同,其他并無不同?;谏鲜鐾ㄓ脝螜C模型實現單機模型的過程是向通用單機模型框架注冊參數、數據包、邏輯,同時定義單機接口的過程。圖7所示為組態實現的該型號星敏感器結構圖。

圖7 星敏感器結構圖Fig.7 Star sensor structure diagram

基于通用單機模型實現星敏感器的過程為:

1)搭建星敏感器參數庫:輸入星敏感器的所有參數,并給這些參數賦初值。

2)構建星敏感器打包模塊:首先設置該星敏感器的參數包列表;然后給出各參數包的組成元素,即每個參數包由參數庫中的哪些元素組成,以及將這些參數打包的動作;最后設置對遙控指令幀的解幀、提取指令值的動作。

3)注冊星敏感器邏輯模塊:設置單機參數更新的時機、連接指令與打包動作、連接指令與參數包發送動作。

基于此方法實現星敏感器的花費資源如表3所示。

表3 新舊方法花費資源對比Table 3Resource cost comparison of new and old methods

2.2 故障注入過程示例

表2描述的原子故障是最基本的故障,通過多個原子故障組合能夠實現任意位置、任意組合的故障注入,表4列舉了一些常見的故障類型。

表4 故障示例Table 4 The fault samples

以2.1節組態實現的星敏感器為例,進行故障注入仿真過程演示,該型號有3個星敏感器,分別以A、B、C命名,除此之外并無差別,這里選取星敏感器A進行展示。

1)注入單機參數故障

圖8展示對星敏感器A注入單機參數故障前后的參數值變化,此處注入故障的參數為星敏四元素Q1。

圖8 對星敏感器注入參數故障的過程Fig.8 The process of injecting a parameter fault into a star sensor

在正常仿真狀態下,星敏A的星敏四元素數值變化范圍為(-1,1),如圖8(a)所示;接下來模擬星敏四元素Q1未能正常更新的故障,在給星敏四元素Q1注入參數故障1000并鎖死后,觀察到Q1的值固定在1000而不再更新。當星務軟件檢測到星敏A發生了故障,根據內部算法放棄星敏A采集到的數據,改用星敏B的數據。由此判定星務軟件對星敏故障的應對措施有效。

2)注入遙測幀故障

圖9展示對星敏感器A遙測姿態包的第3、4個字節中的某些位注入故障前后姿態包信息的變化。

圖9 對星敏感器注入遙測故障的過程Fig.9 The process of injecting a telemetry fault into a star sensor

對星敏感器A發送的遙測姿態包按位進行故障注入,遙測幀故障注入格式為(幀位置、掩碼、故障值),遙測幀故障按照下式規則進行注入。

Value=f(value,mask,fault)

=(fault&mask)|(value&~mask),

(1)

式中:value為遙測幀原值;mask為掩碼值,按位屏蔽輸入的故障值,若該位為1則屏蔽故障,為0則允許該位注入故障;fault為注入的故障值;Value為故障注入后值。

通過對姿態包第3、4字節的數值(16進制表示)按照上述規則進行計算,計算結果如圖10所示,與圖9展示的故障注入后的數據是匹配的,說明遙測故障注入有效。

圖10 數值計算結果Fig.10 Numerical calculation result

2.3 新方法使用前后對比

在設計使用本故障注入模型之前,對某通信衛星建立仿真模型以及故障注入模型時,該通信衛星的陀螺、反作用輪、推力器、星敏、太敏等不同單機的故障源、故障類型都不相同,某一單機的不同故障也需要單獨處理,導致該型號的仿真模型代碼冗余,一般需要一個月的時間才能完成衛星仿真模擬器的搭建和調試。

而使用基于RPC的故障注入模型,只需調用通用單機模型的接口組態化為不同型號的不同單機模型,該方法已應用于對SVOM、某通信衛星、某遙感衛星的仿真建模中,為這些型號搭建仿真模擬器分別使用了兩周左右時間,為這些型號的方案設計驗證、星務代碼的測試提供了支持。

同時,使用基于RPC的故障注入方法具有故障類型豐富的特點,支持如數據風暴:同一時間點內發送大量有效數據;中斷沖突:星務軟件觸發假中斷或中斷嵌套。

使用新舊方法參數對比如表5所示。

表5 新舊方法對比Table 5 Comparison of parameters of old and new methods

3 結束語

本文設計一種基于RPC的組態化模擬器標準故障注入方法,通過對衛星單機建立通用仿真模型,對衛星系統進行故障注入。該衛星仿真模型實現的功能如下:

1)虛擬化構建衛星的硬件環境和外部數據源,等效模擬實際衛星的運轉狀況。

2)在沒有故障注入時,故障注入前端向模擬器發送獲取數據的請求,模擬器將由動力學更新的單機數據組包發送給故障注入前端,故障注入前端將通信幀解幀獲得各單機參數并顯示在界面上。

3)在有故障信息注入時,故障注入前端通過RPC調用模擬器端的數據交互方法將故障信息組幀打包發送給模擬器端,模擬器解包通信幀獲得故障信息,在單機數據更新和打包時將故障信息注入,然后向故障注入前端發送已被故障注入的該單機數據包。

本方法投入實踐使用后,能夠有效縮短衛星仿真模型開發周期,對型號的仿真建模從原來的一個月縮短到兩周時間。在以后的研究工作中,應繼續提煉形成更加標準化的通用模型,使得可以通過配置文本的方式建立衛星仿真模型,進一步提高模型組態化、復用性的程度;另一方面可以從動力學模型、能源熱控模型等角度入手,提高模型的仿真精度。

猜你喜歡
單機調用模擬器
駕駛模擬器轉向系統的設計與研究
了不起的安檢模擬器
熱連軋單機架粗軋機中間坯側彎廢鋼成因及對策
一種單機式渦流探傷儀電性能校準裝置
盲盒模擬器
劃船模擬器
軍工企業軍品單機配套立項風險評價淺析軍品
宇航通用單機訂單式管理模式構建與實踐
系統虛擬化環境下客戶機系統調用信息捕獲與分析①
基于屬性數據的系統調用過濾方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合