本發明涉及無人機測控及通信鏈路數據挖掘,特別涉及無人機地面站研發中基于有限狀態機的無人機時序數據回放器的通用設計方法。
背景技術:
1、無人機地面站是無人機系統的重要組成部分,其中數據管理模塊負責將整站的終端設備和各上位機軟件傳輸處理的多源時序數據記錄成文件(也稱回放數據文件),飛行任務結束后可交由時序數據回放器(簡稱回放器)功能模塊讀取并對齊時間進行回放,從而還原由數據驅動的任務現場。在現有的回放器設計中,通常狀態轉換條件和事件響應邏輯混雜散布在代碼各處,使得回放器的業務行為耦合復雜,難以擴展和維護。
2、針對上述難點,本發明提出基于有限狀態機機制的無人時序數據回放器通用設計方法,在目前文獻未見報道,屬于創新性發明。
技術實現思路
1、有鑒于此,本發明提出的一種基于有限狀態機的無人機時序數據回放器的通用設計方法,能夠適應不同的數據回放場景。該方法將時序數據回放器的行為和狀態抽象為一個有限狀態機,其中封裝了一般地面站系統中回放器功能的通用邏輯,開放了不同狀態下回放器的行為接口以便高效地針對各型地面站進行多態實現,解決了傳統回放器存在的狀態轉換和事件響應邏輯復雜,安全性低,兼容性和可維護性差的問題。
2、本發明所采取的技術方案為:
3、一種基于有限狀態機的無人機時序數據回放器的通用設計方法,包括以下過程:
4、(1)根據數據管理功能模塊的實際業務,將回放器抽象為有限狀態機模型,并確定回放器的狀態總數、基本動作和狀態遷移的觸發條件以及響應動作,形成狀態機模型圖;
5、(2)根據狀態機模型圖,描繪回放器需要創建的功能實體和函數接口及之間的關系,形成結構化邏輯框架,結構化邏輯框架通用地描述了回放器的行為活動,包括狀態轉換和事件響應。
6、進一步的,狀態機模型圖的內容包括:就緒狀態runnable、運行狀態running和掛起狀態suspend三個基本狀態及內部的基本動作,以及開始start、暫停pause、停止stop和關機shutdown四個基本狀態遷移事件,其中:
7、(1.1)就緒狀態runnable包含兩個基本動作:
8、do,表示當進入本狀態時,等待用戶選擇要處理的回放數據文件;fileselection,表示當發生用戶選擇了回放數據文件事件時,創建并初始化對應數據格式的數據解碼模塊實體,初始化過程包括數據解碼模塊實體的回放數據文件指針指向當前回放數據文件,并調用回放文件解析接口,將回放數據文件中的數據按時序數據表格式提取并保存;
9、在就緒狀態runnable下響應start和shutdown兩種基本狀態遷移事件:
10、start,表示在本狀態下接收到開始事件后,觸發本狀態下的開始動作,然后狀態遷移至運行狀態running;shutdown,表示在本狀態下接收到關機信號后,觸發本狀態下的關機動作,然后狀態機停止工作;
11、(1.2)運行狀態running包含一個基本動作:
12、do,表示在本狀態中,啟動數據讀取線程,并在對應線程中加載數據解碼模塊實體,當回放數據文件指針不為空時,即未移動到回放數據文件末尾,數據讀取線程持續調用時序數據獲取接口,按時序輸入時間信息,獲取時序數據幀索引和幀長,移動回放數據文件指針,讀取并輸出時序數據幀;當回放數據文件指針為空時,由當前狀態自動遷移至就緒狀態runnable;
13、在運行狀態running下響應pause、stop和shutdown三種基本狀態遷移事件:
14、pause,表示在本狀態下接收到暫停信號后,觸發本狀態下的暫停動作,然后狀態遷移至掛起狀態suspend;stop,表示在本狀態下接收到結束信號后,觸發本狀態下的結束動作,然后狀態遷移至就緒狀態runnable;shutdown,表示在本狀態下接收到關機信號后,觸發本狀態下的關機動作,然后狀態機停止工作;
15、(1.3)掛起狀態suspend包含一個基本動作:
16、do,表示在本狀態中,持續掛起數據讀取線程;
17、在掛起狀態suspend下響應start和shutdown兩種基本狀態遷移事件:
18、start,表示在本狀態下接收到開始事件后,觸發本狀態下的開始動作,然后狀態遷移至運行狀態running;shutdown,表示在本狀態下接收到關機信號后,觸發本狀態下的關機動作,然后狀態機停止工作。
19、進一步的,結構化邏輯框架包括:一個事件父類event及4個子事件類start、stop、pause和shutdown,一個狀態父類state及三個狀態子類runnable、running和suspend,一個函數式接口action,一個數據解碼模塊decoder;
20、構建回放器的狀態機實體,其中:
21、每個state的狀態子類實體,通過do方法執行進入到自身狀態時要執行的基本動作,以及自定義方法執行必要的其它基本動作;
22、每個狀態子類實體中包含一個“事件-動作”映射表,在創建時,通過“添加事件動作”方法添加“事件-動作”實體鍵值對到映射表中;
23、每個狀態類實體通過“響應事件”方法響應接收到的事件實體,若“事件-動作”映射表中包含對應事件的“鍵”,則取出對應的“值”,即動作實體,并執行動作實體的“事件動作”方法;
24、數據解碼模塊包含一個回放數據文件指針,并向外部統一提供回放文件解析接口和時序數據獲取接口,回放文件解析接口由用戶根據不同無人機型號的回放數據格式自定義多態實現,用于從選擇的回放數據文件中按照對應格式提取出時間信息、時序數據幀索引位置以及時序數據幀長度,保存到時序數據表中;時序數據獲取接口用于通過輸入的時間信息從時序數據表中查詢出對應的時序數據幀在文件中的索引位置和數據幀的長度,并通過回放數據文件指針移動到對應索引位置,提取出對應長度的數據返回給調用者。
25、進一步的,狀態子類實體的do方法和自定義方法具體包括:
26、就緒狀態runnable實體,do方法執行的動作為待用戶選擇要處理的回放數據文件;“選擇文件”方法執行的動作為,當發生用戶選擇了回放數據文件事件時,創建并初始化對應于數據格式的數據解碼模塊實體,初始化工作包括數據解碼模塊實體的回放數據文件指針指向當前回放數據文件,調用回放文件解析接口,將回放數據文件中的數據按時序數據表格式提取并保存;
27、運行狀態running實體,do方法執行的動作為啟動數據讀取線程,并在對應線程中加載數據解碼模塊實體,當回放數據文件指針不為空時即未移動到回放數據文件末尾時,數據線程持續調用時序數據獲取接口,按時序輸入時間信息,獲取時序數據幀索引和幀長,移動回放數據文件指針,讀取并輸出時序數據幀;當回放數據文件指針為空時,由當前狀態自動遷移至就緒狀態runnable;
28、掛起狀態suspend實體,do方法執行的動作為持續掛起數據讀取線程。
29、進一步的,添加和執行“事件-動作”實體的具體內容包括:
30、就緒狀態runnable實體在創建時,通過“添加事件動作”方法分別添加開始事件start實體及動作,即接收到start事件會觸發本狀態下的開始動作,然后狀態遷移至運行狀態running;關機事件shutdown實體及動作,即接收到shutdown事件會觸發本狀態下的關機動作,然后狀態機停止工作;
31、運行狀態running實體在創建時,通過“添加事件動作”方法分別添加暫停事件pause實體及其動作,即接收到pause事件會觸發本狀態下的暫停動作,然后狀態遷移至掛起狀態;結束事件stop實體及動作,即接收到stop事件會觸發本狀態下的結束動作,然后狀態遷移至就緒狀態;關機事件shutdown實體及動作,即接收到shutdown事件會觸發本狀態下的關機動作,然后狀態機停止工作;
32、掛起狀態suspend實體在創建時,通過“添加事件動作”方法分別添加開始事件start實體及動作,即接收到start事件會觸發本狀態下的開始動作,然后狀態遷移至運行狀態;關機事件shutdown實體及動作,即接收到shutdown事件會觸發本狀態下的關機動作,然后狀態機停止工作。
33、本發明采用以上技術方案,與現有技術相比具有以下技術效果:
34、本發明解決了通用性差、開發和版本管理成本昂貴問題。各地面站子系統的數據接口不同,各數據管理模塊存在功能差異,所以會產生不同數據結構的回放數據,需要由不同的回放器來讀取回放,這些回放器的技術標準不統一會造成高額的開發成本和版本管理成本。
35、本發明基于有限狀態機的設計將回放器的各狀態和業務邏輯進行了清晰的定義和隔離,提高了程序的安全性。
36、本發明的結構化邏輯框架易于適配不同無人機型號的回放數據格式,解決了回放器的由于數據格式和技術標準不統一造成的高額開發成本和版本管理成本,且具有與編程語言無關的多態模塊化,實現通用性適配和低成本擴展,達到敏捷開發的目的,提高了可維護性。