在STK 11中,导入TLE数据的方法稍有不同。我们需要使用STK的Connect命令来导入TLE数据。以下是修改后的代码:

MATLAB脚本示例
% 创建一个新的STK应用程序对象
app = actxserver('STK11.application'); % 创建一个STK应用程序对象并使其可见
app.Visible = 1; % 设置STK应用程序可见

% 获取根对象
root = app.Personality2; % 获取STK的根对象

% 场景文件路径
scenarioFilePath = 'G:/STK11/北斗26/SatelliteFormation.sc'; % 修改为STK场景文件的实际路径

% 尝试加载已有的情景
try
    root.LoadScenario(scenarioFilePath); % 加载指定路径的情景
    scenario = root.CurrentScenario; % 获取当前情景对象
catch
    error('Scenario file "%s" not found. Please check the file path.', scenarioFilePath); % 如果情景文件不存在,则抛出错误
end

% 设置情景时间段(可选)
scenario.SetTimePeriod('1 Jan 2024 00:00:00.000', '31 Dec 2024 23:59:59.999'); % 设置情景时间段
scenario.StartTime = '1 Jan 2024 00:00:00.000'; % 设置情景开始时间
scenario.StopTime = '31 Dec 2024 23:59:59.999'; % 设置情景结束时间
scenario.Animation.AnimStepValue = 60; % 以60秒为步长进行动画

% TLE文件夹路径
tleFolderPath = 'C:/Users/YourUsername/Documents/TLEFiles'; % 修改为TLE文件的实际文件夹路径

% 获取文件夹中所有的TLE文件
tleFiles = dir(fullfile(tleFolderPath, '*.txt')); % 获取指定文件夹中所有的TLE文件

% 导入每个TLE文件
for i = 1:length(tleFiles)
    tleFilePath = fullfile(tleFiles(i).folder, tleFiles(i).name); % 获取每个TLE文件的完整路径
    
    % 打开TLE文件并读取内容
    fid = fopen(tleFilePath, 'r'); % 打开TLE文件
    tleLines = textscan(fid, '%s', 'Delimiter', '\n'); % 逐行读取TLE文件内容
    fclose(fid); % 关闭文件
    
    % 提取TLE数据
    tleLines = tleLines{1}; % 提取读取到的TLE行数据
    if length(tleLines) < 3
        error('TLE file "%s" does not contain valid TLE data.', tleFilePath); % 如果文件中行数不足三行,则抛出错误
    end
    
    line0 = tleLines{1}; % 获取卫星名称行
    line1 = tleLines{2}; % 获取第一行TLE数据
    line2 = tleLines{3}; % 获取第二行TLE数据
    
    % 创建卫星对象
    satelliteName = sprintf('Satellite_%d', i); % 为卫星命名
    satellite = scenario.Children.New('eSatellite', satelliteName); % 在情景中创建新的卫星对象
    
    % 使用STK Connect命令设置卫星的TLE数据
    command = sprintf('SetState */Satellite/%s TLE "%s" "%s"', satelliteName, line1, line2);
    root.ExecuteCommand(command); % 执行STK Connect命令进行轨道传播
end

disp('TLE files imported successfully.'); % 打印成功导入TLE文件的信息
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
说明和修改指南
  1. 场景文件路径
  • 修改scenarioFilePath变量,将其设置为实际的STK场景文件路径。例如:
scenarioFilePath = 'G:/STK11/北斗26/SatelliteFormation.sc';
  • 1.
  1. TLE文件夹路径
  • 修改tleFolderPath变量,将其设置为实际TLE文件夹的路径。例如:
tleFolderPath = 'C:/Users/YourUsername/Documents/TLEFiles';
  • 1.
  1. STK Connect命令
  • 使用root.ExecuteCommand来执行STK的Connect命令。
  • command字符串中使用SetState命令来设置卫星的TLE数据。

通过这些修改,您可以在MATLAB中加载指定路径下的已有STK情景,并批量导入多个仅包含一个卫星TLE数据的文件到该情景中,自动创建相应的卫星对象。

根据tle里面的卫星名称设置自己的卫星名称

% 提取TLE数据
tleLines = tleLines{1}; % 提取读取到的TLE行数据
if length(tleLines) < 3
    error('TLE file "%s" does not contain valid TLE data.', tleFilePath); % 如果文件中行数不足三行,则抛出错误
end

% 获取卫星名称行,并去除多余的空白字符
rawSatelliteName = strtrim(tleLines{1}); % 从第一行获取卫星名称
formattedSatelliteName = regexprep(rawSatelliteName, '[^a-zA-Z0-9_]', '_'); % 格式化卫星名称,替换非法字符为下划线
line1 = tleLines{2}; % 获取第一行TLE数据
line2 = tleLines{3}; % 获取第二行TLE数据

% 创建卫星对象
satellite = scenario.Children.New('eSatellite', formattedSatelliteName); % 在情景中创建新的卫星对象
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.