STK / Connect 模块分析与应用

来源:互联网 发布:MAC 百度网盘 编辑:程序博客网 时间:2024/04/29 20:46

STK / Connect 模块分析与应用

张云彬,张永生

(信息工程大学测绘学院,河南郑州450052)

摘要:STK 的重要模块之一STK/ Connect 提供用户在客户机/ 服务器环境下与STK 连接的功能,根据作者的实践,文中介绍了STK/ Connect 的一些核心技术及其编程实现。
关键词:STK;客户机/ 服务器;STK/ Connect

卫星工具软件STK(SateIIite TooI Kit)是航天领域中先进的系统分析软件,由美国分析图形有限公司(AGI)研制,用于分析复杂的陆地、海洋、航空及航天任务。它可提供逼真的2 维、3 维可视化动态场景以及精确的图表、报告等多种分析结果。支持卫星寿命的全过程,在航天飞行任务的系统分析、设计制造,测试发射以及在轨运行等各个环节中都有广泛的应用,对于军事遥感卫星的战场监测、覆盖分析、打击效果评估等方面同样具有极大的应用潜力。STK/ Connect 是STK 的重要模块之一,提供用户在客户机/ 服务器环境下与STK 连接的功能,使用TCP / IP 或UNIX Domain Sockets 在第三方应用软件与STK 之间传输数据(包括实时数据传输),为其他应用程序提供了一个向STK 发送消息和接受数据的通讯工具。

1 Connect 模块简介

STK/ CON 即Connect 在早期的名称是交互处理通讯模块(IPC),它包括一系列的功能来打开UNIX或TCP / IP 到STK 的接口,以便给STK 发送连接命令和接收从STK 返回的数据,并在通讯完成后关闭接口。Connect 具有提供信息的功能,可按用户规定的各种方式输出错误信息和诊断信息。如果需要,用户还可取消此信息使它满足自己的需要。使用Connect 时仅需提供连接名和端口,以便STK 驻留和打开接口。IPC 指令可以用单一函数发送然后返回所希望的数据。
主要特性:
1)在客户机/ 服务器环境下工作

Connect 通过TCP / IP 的Socket 或UNIX DomainSocket 很方便地建立用户应用程序和STK 的接口。这种网络能力允许来自任何虚拟环境的实时数据传送。
2)连接库
可以使用与Connect 同时提供的库来方便地建立和使用TCP / IP 或Domain Socket。利用库提供的函数、常值和其他消息能力可以建立第三方应用程序与STK 的连接。
3)信息功能
Connect 可以有选择的生成信息,用户也可以取消标准的信息,使用自定义的格式编辑以适应第三方的应用程序。这个功能可以使开发人员更好的控制信息环境。
4)实时可视化
Connect 联接着STK 和STK/ VO,研究人员可以实时观察事件。例如,可以通过Connect 获得从运载火箭或卫星上得到的遥测数据,然后在2 维或3 维地图窗口中模拟飞行任务,帮助了解和解决任何可能出现的情况。

2 初始化Connect 模块

在启动Connect 模块之前,首先要进行初始化工作,这时需调用初始化函数 AgConInit( ),它的函数原型是int AgConInit( char *initFiIeName);参数initFiIeName 指向初始化配置文件,亦可通过定义STK 的环境变量AGCONNECTINIT 来指定该文件。若initFiIeName 参数为空,或未定义AGCONNECTINIT 变量,Connect 将启用缺省配置文件,对于UNIX 系统,该文件为~ / . connectrc;对于PC机,该文件为Connect 当前目录下的Connect. dat。若初始化成功,STK 将返回AgCNoError 消息,否则返回AgCError 消息。初始化配置文件中列出了拥有返回数据的Connect 命令,这些命令是第三方程序获得STK 数据的有效途径。此外,初始化文件中还包含一些必要的配置信息,用于建立联接时Connect 模块的参数设置。

3 与STK 通讯

1)打开联接

初始化工作完成后,可以打开一个与STK 的联接,使用函数AgConOpenSTK(),它的原型是:
int AgConOpenSTK(char **context,char **connectType,char **connectName);
其中,参数connectType 用于指定联接的类型,它可以是以下两个常量中的一个:
AgCUnixType “UNIXSOCKET”(只用于UNIX操作系统)
AgCTcpType “TCPSOCKET”
connectName 参数包含了联接的更多细节,对基于TCP / IP 协议的联接,它指定了主机名和通讯端口名,例如locaIhost:5001;对基于UNIX socket 的联接,它指明了socket 的路径。至于参数context,由于应用程序可以同时打开多个与STK 的联接,因此这里使用它来区分这些不同的联接。

2)发送命令并接收数据

完成上述工作后,用户软件就可以同STK 进行通讯了。这里将用到一个重要的函数AgConProcessSTKCmd(),用于发送命令以及接收数据。
它的原型是:
int AgConProcessSTKCmd(char **context,char **cmdString,AgTConReturnInfo **returnInfo);
参数context 用于区分接受命令的不同联接,cmdString 则包含了命令的具体内容。returnInfo 参数以结构的形式存贮了STK 返回的数据,它的定义如下:

typedef struct AgTConReturnInfo

char hdrType[AgCRMHAHdrTypeLen + 1];
char transId[AgCRMHAHdrIdLen + 1];
int numEntries;
char **returnList;
}AgTConReturnInfo;
其中,hdrType 与transId 用于异步通讯模式,存贮类型及标识符信息;numEntries 存贮返回数据包的数目,returnList 则存贮每一个具体的数据包。数据包的格式将在第5 节介绍。
AgConProcessSTKCmd()函数若成功访问STK,将返回消息AgCNoError,否则返回消息AgCError;若命令正确发出但因某些因素导致STK 拒绝响应,将返回消息AgCNackReturned。

3)关闭联接

在执行完必要的操作后,可关闭与STK 的联接。如果只想关闭当前联接,可使用函数AgConCIoseSTK(),其原型为
int AgConCIoseSTK(char **context);
其中参数context 的意义与函数AgConOpenSTK()中相同。若想彻底清除Connect 静态库中申请的内存,完全中止与STK 的联接,可使用函数AgConShutdownConnect( ),这时若再与 STK通讯,需重新进行初始化。

4 Connect 消息机制

在外部程序与STK 通讯的过程中,Connect 随时产生各种相关信息,包括响应外部命令之后的返回数据以及各种诊断信息,它们都以消息的方式发送给用户。在Connect 与STK 内部,进行这种消息运作主要通过两个函数:AgUtMsg( )和AgUtMsgSetMsgFunc ()。用户程序可以重载它们,改变参数设置,使得消息流程及处理方式满足用户指定的要求。这种技术大大拓宽了STK 消息的传播途径,增强了用户程序利用STK 内部信息的灵活性。
Connect 内部的消息机制如图1 所示。


1)使用AgUtMsg()函数传送消息

AgUtMsg()函数传送消息的方式取决于参数的设置,它的函数原型如下:
AgTVoid AgUtMsg(AgTInt msgType,AgTBooI waitFIag,AgTInt dispiayID,AgTInt errorCode,AgTChar *sourcefiie,AgTInt LineNo,AgTChar **msgFormat,⋯);

其中,参数msgType 定义了消息的类型,它可取以下常量之一:
AgCMsgDebug   AgCMsgInfo    AgCMsgForceInfo     AgCMsgWarning    AgCMsgAlarm
参数waitFlag 取常量AgCMsgNoWait 或AgCMsgWait,前者使AgUtMsg()函数无须等待系统的确认应答,后者将设置AgUtMsg()等待应答信号。dispiayID指明消息输出的通道,用户可根据需要改变输出指向,或使用系统的缺省输出对象AgCMsgDispDefauit。errorCode 参数指明出错信息,可由用户自行定义,或使用系统提供的常量:
AgCError     AgCNoError    AgCNackReturned     AgCMsgNoErrorCode
参数sourceFile 和LineNo 不必一一给出,只需用一个宏AgMSourceLine 代替,该宏在AgConnect. h 头文件中定义。MsgFormat 参数存放真正的消息字符串,用户可自行定义消息输出的格式,AgUtMsg()函数根据这个参数控制消息的输出。

2)使用AgutMsgSetMsgfunc()更改消息处理函数

AgUtMsgSetMsgFunc()函数允许用户对消息处理函数进行替换、增加或删除操作,其原型如下:
AgTInt  AgUtMsgSetMsgFunc(AgTInt setOption,AgTInt dispiayID,AgTMessageFunc messageFunc);
参数setOption 指明了不同的操作,它可取以下值:
AgCMsgReplace   AgCMsgAdd    AgCMsgRemove

AgCMsgReplace 将使系统替换由displayID 标识的消息处理函数,同理,AgCMsgAdd 和AgCMsgRemove值分别表示增加新的以及删除旧的消息处理函数,该函数同样由displayID 标识。messageFunc指向具体的消息处理函数,该函数可由用户定义,但其参数声明必须与AgUtMsg()保持一致。

5 输入输出格式

1)命令格式

Connect 模块为用户程序提供了一系列命令,用以控制STK 内部复杂的操作,命令的格式如下:
< CommandName > < ObjectPath >[ < CommandData> ]

< CommandName > 表示特定的命令名,如“Load”,“Access”等。< ObjectPath > 指明一个STK 的类实例,如“Scenario / stkDemo / Satellite / Shuttle”。对于不同的命令名,

< CommandData > 项有不同的形式,它表示了命令所需输入的参数。

2)输出数据格式

STK 在执行完用户命令后,Connect 将应答消息,其中既有诊断信息,也有STK 数据。数据的格式分两种,一种是单消息数据,另一种是多重消息数据。现分别描述如下:

单消息数据格式为< Header > < Data >

数据头< Header > 是一个40 字节长固定大小的包。包含了命令名及后续数据的字节数;<Data > 中存放了由Connect 返回的具体数据。

多重消息数据由若干个单消息数据构成,它的格式为
< Mult Message Header > < Multiple Message Data > < Single Message Header > < Single Message Data > ⋯⋯
< Mult Message Header > 亦是一个40 字节固定大小的包,它包含了命令名及< Multiple Message Data > 的字节数。
< Multiple Message Data > 指明了组成多重消息的单消息数。
< Single Message Header > 与< Single MessageData > 的意义与单消息数据相同。
以下是用户程序向STK 发送GetAccesses 命令后,STK 响应命令所返回的一个多重消息数据实例:
ACK
GETACCESSES 3

73
GETACCESSES 111
/ Application / STK/ Scenario / stkDemo / Facility / Perth
/ Appiication / STK/ Scenario / stkDemo / Facility /
Baikonur
NoAccesses
GETACCESSES 114
/ Application / STK/ Scenario / stkDemo / Facility / Santiago
/ Application / STK/ Scenario / stkDemo / Facility /
Baikonur
NoAccesses
GETACCESSES 111
/ Application / STK/ Scenario / stkDemo / Facility / Santiago
/ Application / STK/ Scenario / stkDemo / Facility / Perth
NoAccesses
GETACCESSES 113
/ Application / STK/ Scenario / stkDemo / Facility /Waiiops
/ Application / STK/ Scenario / stkDemo / Facility /
Baikonur
NoAccesses
⋯ ⋯

GETACCESSES 170
/ Application / STK/ Scenario / stkDemo / Satellite / ERSl
/ Application / STK/ Scenario / stkDemo / Facility /Waiiops
/
Sensor / FiveDegElev
1 Nov 2000 00:33:06.88 1 Nov 2000 00:45:05.96

6 结束语

STK 作为先进的航天分析软件,具有复杂而完善的功能。目前国内对它的需求正在不断增长,但整体应用水平还有待于进一步提高。文中所论述的Connect 模块的相关技术,已通过编程实现,在实际的应用中取得了良好的效果。相信随着对该软件研究的不断深入,STK 以及未来拥有自主知识产权的卫星工具软件,将会在航天遥感领域拥有更为广阔的应用前景。


参考文献

[l] Raiph C Patrick,Sheiia R Marshaii. STK Connect [R]. AnalyticalGraphics,Inc.
[2] STK/ VO User’s Manual[ R]. Analytical Graphics,Inc. 325 Technoiogydrive,Maivern,PA l9355.

[3] Sheiia R Marshaii,Raiph C Patrick. STK/ PL Astrodynamics & Utilities[R].Analytical Graphics,Inc

更多STK学习资料免费下载:

http://download.csdn.net/user/appe1943


原创粉丝点击