OPNET导入STK轨道文件的问题

在用OPNET导入STK轨道文件的过程中,遇到一系列问题。摸索着解决了一下,有些问题很奇怪,可能来自软件的bug,有些问题可能有更好的解决方法,希望大家指点~

现将问题及解决方案整理如下:

注:我使用的是OPNET 14.5

(1)问题:我要仿真的卫星网络有200多颗卫星,希望在Topology-->Import STK Orbit中选择“All STK files under chosen directory”,来一下子全部导入。可是,选择好文件夹,点“OK”,程序卡死了,换了一台配置更好的电脑,还是老长时间没反应。

解决方法:试着分若干次导入(当然得新建文件夹把轨道文件分组)。虽然有时还很卡,但起码最终能够全部导入进来,而不用看着程序停在一个画面长时间不动还无法指望能出来结果。

(2)问题:分次导入的过程中遇到了一个奇怪的问题。我连着导入了五次,保存,关闭项目,再打开,发现只有前四次导入的保存了下来。试了好几次都是这样,起初还以为OPNET导入的卫星数目有限制呢。偶尔一次,在导入轨道后,修改了一下节点的某个属性(看问题(3)),保存后关闭项目,再打开,问题解决。。。

(3)问题:在导入轨道文件时,勾选“Create a satellite node for each orbit”,会为每个轨道文件自动生成一个节点。打开节点模型,发现其模型名称为NONE,要将其替换成自己创建的节点模型。

解决方法:选中节点,右键Edit Attributes,勾选属性对话框右下角的Advanced,这时,就可以在“model”属性里选择自己的节点模型了。

(4)问题:轨道是分次导入的,使得节点在界面中的分布特别乱,希望节点能按其轨道编号、轨道上的卫星编号排列成网格。在节点的属性对话框里(勾选Advanced),有两个属性:x position和y position,定义的就是节点的位置。一个一个改改不过来,于是,我尝试着通过代码来设置每一个节点的位置。

起初是这样做的:在节点模型的某个进程模型的初始状态下,获取节点的名称(我的节点名称和轨道编号、轨道上的卫星编号是对应的),然后使用obj_ima_obj_attr_set函数来设置节点的位置。运行仿真,错误提示说x position和y position这两个属性是只读的!可软件的帮助文档中介绍说是可以通过obj_ima_obj_attr_set函数来动态修改这两个属性的值呀!是代码的位置放的不对吗?

解决方法:我在菜单栏Topology下看到一个Export Topology,可以将网络拓扑导出成各种格式,也有一个Import Topology,可以从其他格式导入拓扑。我尝试将网络拓扑导出成XML文件,打开XML文件,发现其中记录着各个节点的属性,包括x position和y position!那么,修改这个XML文件,然后再导入,不就OK了?

我用C写了一个小程序,读取这个XML文件,为每个节点修改x position和y position的值,写入新的XML文件,从OPNET中导入,节点按自己希望的样子排列开来~

修改XML文件的程序这里就先不贴了,其中涉及到的主要是文件的读写以及字符串的一些操作。写这个小程序也费了我一些时间(本人水平有限),不过想到写一次程序,多次使用,方便地修改拓扑,还是很开心的~

 

另外,关于obj_ima_obj_attr_set的问题希望大家指点~

-------------------------------------------------------------------------

使用OPNET中导入STK生成的.sa文件时,需要将文件中的EphemerisTimePosVel替换成EphemerisEcfTimePosVel。.sa文件可能比较多,手动一个一个地替换比较麻烦。使用这个程序可以进行批量替换。

你可能感兴趣的:(OPNET,STK)