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
报错原因及解决方法
核心原因
- 字段名称不匹配:
Start Time LocalHorizontal Geometry数据集里,Range Rate的标准字段名是Range Rate (m/s),而非你使用的Range Rate,直接用错误名称查找会触发参数错误。 - 时间范围逻辑错误:循环内复用了第一个过境区间的
accessStartTimes{1}和accessStopTimes{1},而非当前循环的start和stop时间,会导致数据请求的时间范围不符合预期,也可能间接引发数据获取异常。
修正步骤
- 修正字段名称:将
GetDataSetByName('Range Rate')替换为GetDataSetByName('Range Rate (m/s)'),匹配STK标准字段名。 - 修正循环时间范围:把
ExecElements的时间参数换成当前循环的start和stop,而非固定第一个区间的时间。 - 可选:验证字段名称:可以先打印数据集的所有字段名,确认准确拼写:
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
相关产品推荐
相关产品推荐

