霍爍爍 劉鎮(zhèn)瑜 陳 磊 趙文杰 錢蘇敏
(中國(guó)洛陽電子裝備試驗(yàn)中心 洛陽 471000)
基于C#Connect連接的STK遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)?
霍爍爍 劉鎮(zhèn)瑜 陳 磊 趙文杰 錢蘇敏
(中國(guó)洛陽電子裝備試驗(yàn)中心 洛陽 471000)
STK(衛(wèi)星仿真工具包)已成為系統(tǒng)仿真領(lǐng)域重要的工具軟件,其覆蓋雷達(dá)、通信、光電等領(lǐng)域的仿真開發(fā)能力為各類系統(tǒng)仿真開發(fā)提供了強(qiáng)大的支撐。STK Connect模塊為基于網(wǎng)絡(luò)通信的STK二次開發(fā)提供了高效的實(shí)現(xiàn)方法。論文深入研究了基于C#的STK Connect連接方法,提出一種基于此的STK遠(yuǎn)程控制系統(tǒng)軟件的設(shè)計(jì)方法,實(shí)現(xiàn)了對(duì)STK的通用驅(qū)動(dòng)。
STK;Connect;C#;二次開發(fā)
STK作為一款重要的仿真開發(fā)軟件,其在視景仿真領(lǐng)域也擁有重要的地位,結(jié)合C#較為快捷的桌面應(yīng)用開發(fā)能力,能夠迅速搭建出定制化的視景仿真軟件。本文對(duì)基于C#的STK Connect連接方法進(jìn)行研究,并基于此提出一種基于C#的STK con?nect連接的STK遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)方法。
STK Connect模塊是STK中進(jìn)行網(wǎng)絡(luò)驅(qū)動(dòng)開發(fā)的一個(gè)重要模塊,封裝了一種基于TCP/IP的網(wǎng)絡(luò)連接方式,為用戶進(jìn)行二次開發(fā)提供了基本的通信接口函數(shù)及返回信息,具體的通信流程如圖1所示。
STK Connect模塊提供了用于連接開發(fā)的函數(shù)庫[2,4],函數(shù)庫使用基本流程如圖 2所示。
系統(tǒng)采用C#進(jìn)行開發(fā),主要功能為基于STKConnect模塊實(shí)現(xiàn)對(duì)STK的遠(yuǎn)程控制,包括實(shí)現(xiàn)多種格式航跡數(shù)據(jù)的驅(qū)動(dòng)、固定格式命令按鈕的控制以及通用的STK命令控制等功能,系統(tǒng)的用例圖如圖3所示。
如用例圖所示,系統(tǒng)主要功能包括數(shù)據(jù)接入、任務(wù)管理、STK控制三個(gè)部分。其中,數(shù)據(jù)接入功能主要是通過網(wǎng)絡(luò)通信及讀取本地文件的方式讀取路徑及航跡類數(shù)據(jù),用于對(duì)STK相關(guān)運(yùn)動(dòng)模型進(jìn)行數(shù)據(jù)驅(qū)動(dòng);任務(wù)管理模塊主要用于對(duì)多源數(shù)據(jù)的驅(qū)動(dòng)以及驅(qū)動(dòng)多個(gè)STK模塊任務(wù)的管理;STK控制功能是通過Connect模塊對(duì)STK進(jìn)行控制,包括對(duì)運(yùn)動(dòng)模型的數(shù)據(jù)驅(qū)動(dòng)及通過按鈕、命令文本的方式發(fā)送控制命令控制STK進(jìn)行相關(guān)操作。
基于對(duì)系統(tǒng)功能模塊的分析和上一節(jié)對(duì)STK Connect模塊的分析,系統(tǒng)主要功能活動(dòng)圖如圖4所示。
本系統(tǒng)的運(yùn)行方式是以任務(wù)為基本管理對(duì)象進(jìn)行相關(guān)操作的,因此系統(tǒng)啟動(dòng)后首先需要設(shè)置基本的任務(wù)參數(shù),基于任務(wù)相關(guān)參數(shù)生成STK驅(qū)動(dòng)控制任務(wù)。添加任務(wù)后,啟動(dòng)任務(wù)開始接收網(wǎng)絡(luò)數(shù)據(jù)或讀取本地文件數(shù)據(jù),連接STK對(duì)STK場(chǎng)景中相關(guān)運(yùn)動(dòng)模型進(jìn)行數(shù)據(jù)驅(qū)動(dòng)。同時(shí),可以通過輸入命令參數(shù)或以命令參數(shù)生成控制按鈕,對(duì)STK場(chǎng)景進(jìn)行相關(guān)控制操作。在任務(wù)添加后,還可以對(duì)任務(wù)進(jìn)行刪除操作,任務(wù)運(yùn)行期間,任務(wù)信息顯示框會(huì)實(shí)時(shí)顯示任務(wù)的運(yùn)行狀態(tài)信息。
系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)在于采用C#語言調(diào)用STK Connect模塊對(duì)STK進(jìn)行驅(qū)動(dòng)控制。因?yàn)镾TK Connect模塊提供了直接供VC++、JAVA等語言調(diào)用的函數(shù)動(dòng)態(tài)庫,但沒有提供基于C#編寫的動(dòng)態(tài)庫,且?guī)椭臋n及示例程序中沒有相關(guān)調(diào)用說明,因此,本節(jié)對(duì)基于C#的Connect連接方法進(jìn)行研究,提出了兩種可行方法。
3.2.1 C#直接調(diào)用AgConnect.dll進(jìn)行連接
C#可以直接調(diào)用VC的動(dòng)態(tài)庫[5]進(jìn)行軟件開發(fā),因此,第一種方法就是直接調(diào)用AgConnect.dll動(dòng)態(tài)庫進(jìn)行Connect模塊的調(diào)用。C#[6]調(diào)用VC動(dòng)態(tài)庫僅需要.dll文件,其具體調(diào)用步驟為:
1)將.dll文件放在C#工程目錄的Debug文件夾下;
2)在類申明中包含命名空間using System.Run?time.InteropServices,為引入dll文件中的函數(shù)提供了相應(yīng)的類或者方法來支持托管/非托管模塊間的互相調(diào)用;
3)在類中導(dǎo)入要引入的函數(shù),部分示例代碼如下:
[DllImport(“AgConnect.dll”,CallingConvention=Call?ingConvention.Cdecl)]
public static extern int AgConOpenSTK(ref IntPtr con?text,string notUsed,string pczConnectName);
經(jīng)過以上幾個(gè)步驟,即可調(diào)用VC動(dòng)態(tài)庫中的函數(shù),實(shí)現(xiàn)相應(yīng)功能。此方法存在的困難主要在第三步導(dǎo)入VC動(dòng)態(tài)庫函數(shù)時(shí)。因VC中數(shù)據(jù)類型與C#不一致,且AgConnect.dll中函數(shù)參數(shù)類型較為復(fù)雜,存在多種類型的指針、結(jié)構(gòu)體及結(jié)構(gòu)體指針等數(shù)據(jù)類型,直接調(diào)用該動(dòng)態(tài)庫需在C#中轉(zhuǎn)換所有調(diào)用的函數(shù)參數(shù)類型并在C#中重寫結(jié)構(gòu)體等類型,數(shù)據(jù)類型轉(zhuǎn)換較多,容易出現(xiàn)內(nèi)存泄漏等諸多安全隱患。
3.2.2 基于VC動(dòng)態(tài)庫封裝的連接方法
基于對(duì)C#直接調(diào)用AgConnect.dll方法的研究,改進(jìn)一種Connect模塊調(diào)用方法。重新建立VC動(dòng)態(tài)庫工程對(duì)AgConnect.dll動(dòng)態(tài)庫進(jìn)行封裝,屏蔽中間過程調(diào)用的諸多函數(shù),從而減少C#調(diào)用Ag?Connect.dll時(shí)需進(jìn)行函數(shù)參數(shù)數(shù)據(jù)類型轉(zhuǎn)換的數(shù)量及復(fù)雜度。本方法分兩步,首先,使用VC進(jìn)行動(dòng)態(tài)庫編程,重新生成供C#調(diào)用的dll文件;然后,使用C#調(diào)用新的動(dòng)態(tài)庫文件進(jìn)行Connect模塊的驅(qū)動(dòng)。
本文使用MFC規(guī)則DLL建立動(dòng)態(tài)庫,該動(dòng)態(tài)庫需要采用靜態(tài)調(diào)用方式調(diào)用STK提供的Connect接口庫AgConnect.dll,引入AgConnect.lib和AgCon?nect.h文件。在頭文件中添加導(dǎo)出變量和函數(shù),部分代碼示例如下:
extern“C”__declspec(dllexport) void SendSTKCmd(char strCmd[]);
其.cpp文件中的具體實(shí)現(xiàn)如下:
extern“C”__declspec(dllexport) void SendSTKCmd(char strCmd[])
{
AgTConReturnInfo returnInfo;
int ires=AgConProcessSTKCmd(connection,strCmd,&returnInfo);
AgConCleanupReturnInfo(&returnInfo);
if(ires==AgCError||ires==AgCNackReturned)
{
throw“STK命令錯(cuò)誤!”;
}
}
代碼中調(diào)用AgConnect.dll中的函數(shù)實(shí)現(xiàn)主要功能,添加了一些異常判斷。屏蔽了內(nèi)部函數(shù)的調(diào)用實(shí)現(xiàn),導(dǎo)出的函數(shù)參數(shù)僅保留char數(shù)組,與C#中char數(shù)組結(jié)構(gòu)一致,能夠直接進(jìn)行參數(shù)的調(diào)用。編譯該工程后,形成可供C#調(diào)用的。dll文件。然后,采用與上一種方法相同的調(diào)用動(dòng)態(tài)庫步驟調(diào)用該動(dòng)態(tài)庫。
基于系統(tǒng)設(shè)計(jì)分析及對(duì)C#STK Connect連接方法的研究,采用C#開發(fā)出一款調(diào)用Connect模塊對(duì)STK進(jìn)行遠(yuǎn)程控制的應(yīng)用軟件[7~8]。軟件主界面如圖5所示。
軟件啟動(dòng)后,在任務(wù)參數(shù)設(shè)置區(qū)內(nèi)分別添加數(shù)據(jù)接收設(shè)置內(nèi)容及STK驅(qū)動(dòng)設(shè)置內(nèi)容,作為任務(wù)的初始化參數(shù)添加任務(wù),任務(wù)添加后的界面如圖6所示。
添加任務(wù)后,選擇某項(xiàng)任務(wù)連接STK并啟動(dòng)任務(wù),在任務(wù)信息顯示欄顯示該項(xiàng)任務(wù)連接STK及啟動(dòng)信息,任務(wù)管理欄的任務(wù)狀態(tài)項(xiàng)顯示為已啟動(dòng),任務(wù)啟動(dòng)后界面如圖7所示。
在任務(wù)信息顯示欄顯示所選任務(wù)已連接和已啟動(dòng)后,能夠?qū)TK場(chǎng)景運(yùn)動(dòng)模型[9~10]進(jìn)行數(shù)據(jù)驅(qū)動(dòng)或操作右側(cè)STK控制區(qū)的場(chǎng)景常用操作按鈕及發(fā)送命令按鈕發(fā)送Connect命令對(duì)場(chǎng)景進(jìn)行控制。場(chǎng)景控制界面及STK場(chǎng)景顯示效果如圖8、圖9、圖10所示。
本文首先對(duì)STK Connect模塊應(yīng)用進(jìn)行介紹,然后提出一種基于C#Connect連接的STK遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)方法,并對(duì)其中的關(guān)鍵技術(shù)進(jìn)行了詳細(xì)分析。最后,基于系統(tǒng)設(shè)計(jì)分析及對(duì)C#Connect連接的研究,采用C#語言調(diào)用Connect模塊開發(fā)出一款對(duì)STK場(chǎng)景進(jìn)行遠(yuǎn)程驅(qū)動(dòng)控制的軟件系統(tǒng)。本系統(tǒng)能夠?qū)崿F(xiàn)對(duì)STK場(chǎng)景的遠(yuǎn)程控制[11~12]及多源數(shù)據(jù)的實(shí)時(shí)驅(qū)動(dòng)接入,是一款通用性較強(qiáng)的STK遠(yuǎn)程控制軟件系統(tǒng)。
[1]楊穎,王琦.STK在計(jì)算機(jī)仿真中的應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2005.
[2]張?jiān)票颍瑥堄郎?STK/Connect模塊分析與應(yīng)用[J].鄭州:測(cè)繪學(xué)院學(xué)報(bào),2001,18(S1):29-32.
[3]黃潔,黨同心,趙擁軍.VC和STK集成的途徑及其在仿真中的應(yīng)用[J].計(jì)算機(jī)仿真,2007,24(1):291-294.
[4]李弢,陳立云,連云峰,高秀峰.基于STK的Connect模塊設(shè)計(jì)與應(yīng)用[J].科學(xué)技術(shù)與工程,2008,8(22):6110-6112.
[5]譚浩強(qiáng).C++程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004.
[6]管西京.C#核心開發(fā)技術(shù)從入門到精通[M].北京:電子工業(yè)出版社,2009.
[7]李睿,曾德賢.STK用于網(wǎng)絡(luò)環(huán)境下仿真的實(shí)現(xiàn)方法[J].航天控制報(bào),2005,23(3):64-68.
[8]張占月,徐艷麗,曾國(guó)強(qiáng).基于STK的航天任務(wù)仿真方案分析[J].裝備指揮技術(shù)學(xué)院學(xué)報(bào),2006,17(1):48-51.
[9]鄧晶,張明智,李志強(qiáng),等.基于STK的信息作戰(zhàn)態(tài)勢(shì)三維可視化表現(xiàn)方法研究[J].系統(tǒng)仿真學(xué)報(bào),2010,11(22):2654-2659.
[10]杜增.基于STK 軟件包的應(yīng)用開發(fā)[J].軟件,2015,36(4):102-106.
[11]http://www.agi.com/STK Suite.
[12]彭會(huì)湘,陳順昌.STK開發(fā)包用法探討[J].無線電工程,2007(11):62-64.
Design and implementation of STK remote control system based on C#Connect connection
HUO ShuoshuoLIU Zhenyu CHEN LeiZHAO WenjieQIAN Sumin
(Luoyang Electronic Equipment Test Center of China,Luoyang 471000)
STK has become an important tool in the field of system simulation.Its simulation capabilities coverage of radar,communications,optoelectronics and other fields provides a strong support for the development of various types of system simulation.The STK Connect module provides an efficient implementation method for the secondary development of STK based on network com?munication.In this paper,the method of STK Connect connection based on C#is deeply studied,a design method of STK remote con?trol system software based on this is developed,which realizes the universal drive of STK.
STK,Connect,C#,secondary development
TP391
10.3969/j.issn.1672-9730.2017.11.025
Class Number TP391
2017年5月17日,
2017年6月27日
霍爍爍,男,工程師,研究方向:數(shù)據(jù)可視化。劉鎮(zhèn)瑜,男,工程師,研究方向:數(shù)據(jù)可視化。陳磊,男,碩士研究生,助理工程師,研究方向:數(shù)據(jù)可視化。趙文杰,男,碩士研究生,助理工程師,研究方向:數(shù)據(jù)可視化。錢蘇敏,女,碩士研究生,助理工程師,研究方向:數(shù)據(jù)可視化。