Matlab和stk通过connector连接,win7下亲测好用

Matlab和stk通过connector连接,win7下亲测好用

资源下载

https://download.csdn.net/download/weixin_43496847/11942376
上面是csdn的下载网址。

测试用例

安装完成后,可以调用以下代码进行测试,先打开stk,不用新建场景,再打开matlab,输入以下脚本。
以下代码转载自知乎:https://zhuanlan.zhihu.com/p/68385977,侵删。

% 调用stk分析Starlink星座
% 戴正旭 2019.06.16
% stkConnect和stkExec操作是等价的,但个人推荐使用stkConnect,避免命令太长
%       1)stkConnect(conID, 'command', 'objPath', 'cmdParamString')
%       2)stkExec(conId, [command ' ' path ' ' cmdParamString])
function StarlinkAnalyze_MexConnect
% 开始前需要打开STK,无需新建工程
% 这部分其实可以参考COM部分自动启动程序,详情参考下一个代码示例
stkInit;                                % 建立连接
remMachine = stkDefaultHost;
conid = stkOpen(remMachine);            % 得到连接句柄(用于发送指令)
% 判断场景是否存在
scen_open = stkValidScen;
if scen_open == 1
    rtn = questdlg('Close the current scenario?')
    if ~strcmp(rtn,'Yes')
        stkClose(conid);
        return;
    else
        stkUnload('/*');
    end
end

% 新建场景
disp('创建一个场景');
stkNewObj('/','Scenario','StarLink');

% 设定场景时间
disp('设定场景时间');
strBegTime = '27 May 2019 06:14:00.000';
strEndTime = '28 May 2019 06:14:00.000';
stkSetTimePeriod(strBegTime,strEndTime,'GREGUTC');
% 使aeroToolbox中函数的历元时间与场景一致
stkSetEpoch(strBegTime,'GREGUTC');
stkSyncEpoch;
% 设定场景动画开始时间
strQuteBegTime = ['"' strBegTime '"']; % 时间写入命令是得加双引号,比较刻板
rtn = stkConnect(conid,'Animate','Scenario/StarLink',['SetValues ' strQuteBegTime ' 60 0.1']);
% rtn = stkConnect(conid,'Animate','Scenario/StarLink','SetValues "27 May 2019 06:14:00.000" 60 0.1');
% 设定动画时间回到起始点
rtn = stkConnect(conid,'Animate','Scenario/StarLink','Reset');
% 新建种子卫星
disp('创建种子卫星');
strSeedSat = 'Sat';
stkNewObj('*/','Satellite',strSeedSat);
% 卫星积分起止时间、轨道历元时间、步长
t_start=0; t_stop=24*3600; orbitEpoch=t_start; dt=60;
% 卫星初始轨道根数
a=6928.137*1000;  e=0.0; i=53.0*pi/180;
w=0*pi/180; Raan=160*pi/180; M=0*pi/180;
% 输入卫星轨道
stkSetPropClassical(['*/Satellite/' strSeedSat],'J4Perturbation','J2000',t_start,t_stop,dt,orbitEpoch,a,e,i,w,Raan,M);
% stkPropagate('*/Satellite/SZ', t_start, t_stop);
% 在种子卫星上添加传感器,创建星座后每个卫星上都会有传感器
strSensor = 'Sen';
stkNewObj(['*/Satellite/' strSeedSat],'Sensor',strSensor);
% 设置传感器参数
strSetSensor = ['Conical 0 44.85 AngularRes 360.0'];
stkConnect(conid,'Define',['*/Satellite/' strSeedSat '/Sensor/' strSensor],strSetSensor);
% strSetSensor = ['Define */Satellite/Sat/Sensor/Sen Conical 0 44.85 AngularRes 360.0'];
% SensorModel = stkExec(conid,strSetSensor);
% 生成walker星座
disp('生成walker星座');
nPlan = 2;% 平面数
nPerPlan = 2;% 每个平面卫星数
nRANNSpreed = 1;% 相邻平面卫星相位差
% STK生成的卫星名称为strSeedSat_**##,**代表平面数,##代表平面内卫星数
% 后续循环编号格式化用,表示几位数填充
nFormatPlan = 1;
nFormatPerPlan = 1;
strFormatPlan = ['%0' int2str(nFormatPlan) 'd'];
strFormatPerPlan = ['%0' int2str(nFormatPerPlan) 'd'];
% 创建星座,命名为MyConst
strWalkerSet = ['Delta ' int2str(nPlan) ' ' int2str(nPerPlan) ' ' int2str(nRANNSpreed) ' 360.0 No ConstellationName MyConst'];
stkConnect(conid,'Walker', ['*/Satellite/' strSeedSat],strWalkerSet);
% 

% 创建覆盖区域
disp('创建覆盖区域');
stkNewObj('*/','CoverageDefinition','CovGlobal');
% 定义全球覆盖分析 设置可查询Cov Grid
stkConnect(conid,'Cov','*/CoverageDefinition/CovGlobal','Grid AreaOfInterest Global');
% 设置图像参数
% stkConnect(conid,'Graphics','*/CoverageDefinition/CovGlobal','Static Points On yellow');
% stkConnect(conid,'Graphics','*/CoverageDefinition/CovGlobal','Static Regions Off');
% stkConnect(conid,'Graphics','*/CoverageDefinition/CovGlobal','Static FillPoints Off Point');

% 创建品质参数
disp('创建FOM参数');
stkConnect(conid,'New','/ */CoverageDefinition/CovGlobal/FigureOfMerit Fom');
stkConnect(conid,'Cov ','*/CoverageDefinition/CovGlobal/FigureOfMerit/Fom FOMDefine Definition NAsset Minimum');
% 设置图像参数
% stkConnect(conid,'Graphics','*/CoverageDefinition/CovGlobal/FigureOfMerit/Fom Static Off');
% stkConnect(conid,'Graphics','*/CoverageDefinition/CovGlobal/FigureOfMerit/Fom Animation On NotCurrent blue');
% stkConnect(conid,'Graphics','*/CoverageDefinition/CovGlobal/FigureOfMerit/Fom Animation FillPoints On ');

% 为区域关联覆盖资源
disp('关联覆盖资源');
% 可惜星座创建默认Assigned object是卫星,这里要用的是传感器,
% 我没找到设置星座对象集的函数,以下只好使用循环操作了
% stkConnect(conid,'Cov','*/CoverageDefinition/CovGlobal Asset */Constellation/MyConst Assign');

for i = 1:nPlan
    for j = 1:nPerPlan
        strStarName = [strSeedSat num2str(i,strFormatPlan) num2str(j,strFormatPerPlan)];
        strAssetCommand = ['*/CoverageDefinition/CovGlobal Asset */Satellite/' strStarName '/Sensor/Sen Assign'];
        stkConnect(conid,'Cov',strAssetCommand);
    end
end

% 分析覆盖
disp('分析覆盖');
stkConnect(conid,'Cov','*/CoverageDefinition/CovGlobal Access Compute');

stkClose(conid);

end
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值