You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STK MATLAB接口获取星地Range Rate数据报错及解决咨询

问题:MATLAB调用STK接口获取卫星-地面站Range Rate数据报错

运行MATLAB脚本获取卫星与地面站间的Range Rate数据时,前序步骤正常,最后一行触发参数错误。以下是脚本及错误信息:

运行的MATLAB脚本

stk = stkApp.Personality2;
stkScenario = stk.CurrentScenario;
if isempty(stkScenario)
    error('Please load a scenario');
end

facility = stk.GetObjectFromPath('Facility/RRFac');

satellite = stk.GetObjectFromPath('Satellite/P02S01');
access = satellite.GetAccessToObject(facility);
access.ComputeAccess;

accessDP = access.DataProviders.Item('Access Data').Exec(stkScenario.StartTime,stkScenario.StopTime);
accessStartTimes = accessDP.DataSets.GetDataSetByName('Start Time').GetValues;
accessStopTimes = accessDP.DataSets.GetDataSetByName('Stop Time').GetValues;

accessIntervals = access.ComputedAccessIntervalTimes;

accessDataProvider = access.DataProviders.Item('Access Data');
dataProviderElements = {'Start Time';'Stop Time'};
accessIntervals = access.ComputedAccessIntervalTimes;
for i = 1:1:accessIntervals.Count
    [start, stop]   = accessIntervals.GetInterval(i-1);
    satelliteDP = satellite.DataProviders.Item('DeckAccess Data').Group.Item('Start Time LocalHorizontal Geometry').ExecElements(accessStartTimes{1},accessStopTimes{1},{'Time';'Range Rate'});
    satelliteAlt = satelliteDP.DataSets.GetDataSetByName('Range Rate').GetValues;
end

错误信息

Error using Interface.AGI_STK_Objects_12_IAgDrDataSetCollection/GetDataSetByName Invoke Error, Dispatch Exception: The parameter is incorrect.

Error in GenRRreport (line 37)
    satelliteAlt = satelliteDP.DataSets.GetDataSetByName('Range Rate').GetValues

报错原因及解决方法

核心原因

  1. 字段名称不匹配:Start Time LocalHorizontal Geometry数据集里,Range Rate的标准字段名是Range Rate (m/s),而非你使用的Range Rate,直接用错误名称查找会触发参数错误。
  2. 时间范围逻辑错误:循环内复用了第一个过境区间的accessStartTimes{1}和accessStopTimes{1},而非当前循环的start和stop时间,会导致数据请求的时间范围不符合预期,也可能间接引发数据获取异常。

修正步骤

  1. 修正字段名称:将GetDataSetByName('Range Rate')替换为GetDataSetByName('Range Rate (m/s)'),匹配STK标准字段名。
  2. 修正循环时间范围:把ExecElements的时间参数换成当前循环的start和stop,而非固定第一个区间的时间。
  3. 可选:验证字段名称:可以先打印数据集的所有字段名,确认准确拼写:
    for j = 0:satelliteDP.DataSets.Count-1
        disp(satelliteDP.DataSets.Item(j).Name);
    end
    

修正后的关键代码片段

for i = 1:1:accessIntervals.Count
    [start, stop]   = accessIntervals.GetInterval(i-1);
    % 使用当前过境区间的时间范围
    satelliteDP = satellite.DataProviders.Item('DeckAccess Data').Group.Item('Start Time LocalHorizontal Geometry').ExecElements(start, stop, {'Time';'Range Rate (m/s)'});
    % 匹配标准字段名获取数据
    satelliteAlt = satelliteDP.DataSets.GetDataSetByName('Range Rate (m/s)').GetValues;
end

内容的提问来源于stack exchange,提问作者earnric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:10:35