STK 航空仿真(二)STK MATLAB自动化(1)自动化目的和方法简介
1.STK自動化的目的
STK自動化是指使用其他軟件或者程序語言,直接操作STK對象和UI界面。之所以需要STK自動化,是因為直接使用STK UI界面進行仿真存在以下困境:
(1)通常情況下,STK航空仿真需要大量的數據,例如一系列的飛機軌跡點等等,手動在STK界面中輸入這些軌跡點比較耗時耗力。
(2)STK航空仿真大多是實時仿真,數據不是預先給定的,是由一定的算法或者其他軟件(如MATLAB)在仿真時生成的。
(3)項目交付時,需要接收方熟練使用STK,然而對甲方爸爸提這種要求百分之百會被噴。
(4)對于大型項目,使用UI界面設置仿真參數很容易出錯,也難以保證操作的規范性,如果使用自動化腳本完成仿真配置,可以保證每次配置都是一致的,減少出錯的概率。
鑒于這些情況,通常需要定制一些接口,讓其他軟件或者程序語言能直接與STK進行交互,這樣可以專心于仿真的算法設計而無需事先掌握STK的使用。
2.STK自動方法
2.1 查閱自動化幫助文檔
打開STK幫助文檔可以查閱STK自動化的幫助文檔:
?
?其中Automate Tasks一節就是STK自動化的幫助文檔。
2.2 自動化的方法
在幫助文檔中可以看到,STK自動化有以下幾種方法:
(1)OLE 自動化
OLE(Object Linking and Embedding,對象連接與嵌入),是一種面向對象的技術,利用這種技術可開發可重復使用的軟件組件(COM)。OLE從多媒體借鑒而來,是Windows的一組服務功能,提供了一種以源于不同應用軟件的信息建立復合文檔的強有力方法。在對象連接和嵌入系統中,對象可以是幾乎所有的數據類型,例如文字、點陣圖像和矢量圖形,甚至于聲音、注解和錄像剪輯等均可。對象被賦予了智能屬性,即參與連接和嵌人的對象本身帶有計算機指令。最典型的OLE應用就是PowerPoint,PPT就是一種廣泛使用OLE技術的多媒體文檔,所以我們可以在PPT中直接播放音視頻。
STK的OLE自動化支持Java,C++,Python,Matlab和Javascript等,其他軟件也可以使用OLE調用STK。
通過OLE自動化,可以使用STK Model Object(AgSTKObjects, AgSTKGraphics, AgVGT and AgSTKUtil 和AGI.STKObjects, AGI.STKGraphics,AGI.STKVgt and AGI.STKUtil等)操作STK中的模型和工具組件,也可以使用AgUiCore庫操作STK的窗口,工具欄等。
優點:不依賴于特定的STK版本和編程語言,可以使用多種語言編程實現。
缺點:需要配置相應的OLE支持庫,每種語言的OLE支持庫有差異,需要分別配置。
(2)TCP/IP socket通信
STK在運行時會啟動一個TCP服務器,默認監聽5001端口,啟動多個STK窗口,監聽的端口以5001,5002的形式遞增。想這個端口以文本的形式發送STK命令,STK會解釋這些命令并反饋結果。
優點:可以在本地或者通過網絡與STK交互,不依賴于特定的STK版本,任何可以發起TCP請求的編程語言或者軟件都可以與STK交互,依賴的庫很少,通用性強。
缺點:命令和數據以文本的形式傳遞,延遲大,數據也要進行轉義和編碼處理。
(3)自定義STK UI
STK支持使用HTML 網頁來自定義和拓展UI界面,同時也支持使用UI插件來自定義工具欄和窗口。優點:定制好的自動化界面是圖形界面,使用簡單,操作方便。
缺點:由于圖形界面表示的狀態有限,只能實現有限的自動化功能,并且需要手動觸發,對于不能用圖形界面表示的或者觸發時機不確定的自動化操作無能為力,編制圖形化界面所需的代碼量比較大。
(4)使用官方提供的MATLAB 連接組件
AGI公司提供了一個插件MATLAB Connector來支持MATLAB和STK的交互,但是這個插件只支持特定MATLAB和STK版本之間的連接。
優點:可以直接在MATLAB中操作STK,方便連接仿真算法進行實時仿真。
缺點:MATLAB Connector只適合特定版本的MATLAB和STK,適配性差。
2.3 怎樣選擇自動化方法
就我個人理解,自動化應該遵循以下的原則:
(1)版本獨立原則:自動化程序應該不依賴于目標軟件版本,否則換個版本就需要更新自動化程序,成本很高,特別是對于大型仿真任務。
(2)簡潔配置原則:自動化程序的配置應當十分簡單,確保用戶只需少量操作就可以執行使用自動化程序執行任務,如果配置太繁瑣,就背離了自動化的目的,自動化效果也不明顯。
(3)少量開發原則:自動化程序承擔的是功能調度和數據輸入的責任,要盡可能利用目標軟件的接口完成任務,自身的邏輯不能太復雜,否則會增加自動化時出錯的概率。
結合上述原則,考慮到航空仿真時數據輸入量比較大的特點,這里采用OLE技術開發自動化程序。
3.STK自動化實現
3.1 自動化目標
使用STK的OLE接口,開發一個STK自動化simulink模塊,適配大多數的MATLAB版本,實現用Simulink操控STK,輸入仿真數據,設置和獲取STK模型數據等。
3.2 開發環境配置
MATLAB2021a,STK10
3.3 在MATLAB中啟動一個STK窗口
open_STK.m
uiapp = actxserver('STK10.application'); root = uiapp.Personality2; uiapp.visible = 1;運行會啟動一個空白的STK窗口,注意第一行中的uiapp = actxserver('STK10.application')要隨STK版本而更改,我用的是STK10,如果是STK12,改為?uiapp = actxserver('STK12.application');其他版本類似。
?可以看到窗口中什么也沒有。
3.4 新建一個場景并設定時區
%打開一個STK窗口 uiapp = actxserver('STK10.application'); root = uiapp.Personality2; uiapp.visible = 1; % 創建一個新場景并設定時區 root.NewScenario('open_STK'); root.UnitPreferences.Item('DateFormat').SetCurrentUnit('UTCG'); root.CurrentScenario.SetTimePeriod('1 Jul 2013 12:00:00.000', '2 Jul 2013 12:00:00.000'); root.CurrentScenario.AnalysisEpoch.SetExplicitTime('1 Jul 2013 12:00:00.000');現在就打開了一個帶有2D和3D視圖的默認STK窗口:
?限于篇幅,這里先介紹如何使用MATLAB啟動STK窗口,下一節將詳細講述使用MATLAB自動化配置STK仿真場景以及將自動化腳本使用MATLAB S 函數封裝成simulink模塊。
3.5 STK MATLAB OLE自動化示例文檔
隨軟件安裝的STK幫助文檔中關于STK MATLAB?OLE自動化的代碼示例在:
?
3.6 自動化的理念
就我的理解,自動化不是說完全解放雙手,實現不用點一次鼠標就操控軟件,而是應該針對以下幾種情形進行自動化:
(1)重復性操作:比如STK進行航空仿真時飛機軌跡點的輸入就是重復操作。
(2)觸發時機不確定的操作:有些操作的觸發時機是不確定,比如當雷達掃描到目標后報告目標方位,但是人不可能一直盯著仿真界面;有些操作需要滿足一定條件才能觸發,比如飛機發射導彈,這時候不可能通過圖形界面來觸發導彈發射。
(3)實時性操作:很多時候仿真是實時進行的,仿真數據不是預先給定的,這時候不可能通過圖形化界面設置達到目的。
(4)操作由外部信號觸發:仿真時操作的觸發由外部給定信號,這時候就必須使用自動化程序才能達到目的。
簡而言之,自動化的目的應該是:使用程序操作軟件完成使用圖形界面不能完成或者完成起來很繁瑣的工作。對于一些一次性的,或者變化很頻繁的操作,使用自動化反而會弄巧成拙,增加工作量。
總結
以上是生活随笔為你收集整理的STK 航空仿真(二)STK MATLAB自动化(1)自动化目的和方法简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP、Oracle和微软:ERP该选哪
- 下一篇: UG塑胶模具设计之夹具底板的6点使用要素