Data Providers via Object Model in MATLAB

Information

 
Notes/Code
%Establish the connection
% Launch a new instance of STK and grab it
uiapp = actxserver('STK8.application');
    % - OR -
% Grab an existing instance of STK 
%uiApp = actxGetRunningServer('STK8.application)

%get the root from the personality
%it has two... get the second, its the newer STK Object Model Interface as
%documented in the STK Help
root = uiapp.Personality2;

%set units to epoch seconds because this works the easiest in matlab
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EPSEC');

%create new scenario
root.NewScenario('Test');

%create satellite and fac
root.ExecuteCommand('New / */Satellite Sat');
root.ExecuteCommand('New / */Facility Fac')

%propagate sat...
root.ExecuteCommand('SetState */Satellite/Sat Cartesian J4Perturbation "1 Jul 2006 12:00:00.00" "2 Jul 2006 12:00:00.00" 60 J2000 "1 Jul 2006 12:00:00.00" -5465000.513055 4630000.194365 0.0 712.713627 841.292034 7377.687805');

%HOW TO GET NORMAL DATA PROVIDERS - GENERIC REPORT TYPES
%get LLA data providers
LLADataPrv = root.CurrentScenario.Children.Item('Sat').DataProviders.Item('LLA State').Group.Item('Fixed');
LLAResult = LLADataPrv.Exec(0,1000,100);
LLAInterval = LLAResult.Intervals;
LLAInt = LLAInterval.Item(0);

%iterate through result interface to obtain info
%values come back in a cell array form
for i=1:(LLAInt.DataSets.Count - 1)
        ds = LLAInt.DataSets.Item(i-1);
        dsvalue = ds.GetValues;
        switch (ds.ElementName) 
        
        case 'Time'
            timeArray = dsvalue;
        case 'Lat'
			latArray = dsvalue;
		case 'Lon'
			lonArray = dsvalue;
		case 'Alt MSL'
			altArray = dsvalue;
        end
end

%print
fprintf('   %s\t %s\t %s\t %s\n','Time (s)','Lat','Lon', 'Alt');

%create regular matrices to convert the cells for printing
Time = zeros(0);
Lat = zeros(0);
Lon = zeros(0);
Alt = zeros(0);

for i=1:length(latArray)
    
    %populate regular matrices then print out
    %converts from cell array to regular matrix/array
    Time(i) = timeArray{i};
    Lat(i) = latArray{i};
    Lon(i) = lonArray{i};
    Alt(i) = altArray{1};
    
    
    fprintf('%8.2f\t%6.3f\t%6.3f\t%6.3f\n',Time(i),Lat(i),Lon(i),Alt(i));
end


%create access
Satellite = root.CurrentScenario.Children.Item('Sat');
Facility = root.CurrentScenario.Children.Item('Fac');
access = Satellite.GetAccessToObject(Facility);
access.ComputeAccess;

%GET ACCESS DATA PROVIDERS HERE
%see above
AccInfo = access.DataProviders.Item('Access Data');
AccResult = AccInfo.Exec(0,86400);
AccIntervalList = AccResult.Intervals;

%iterate through each interval to get the data
for i=1:(AccIntervalList.Count)
    %grab the current interval - this example only has 1 item
    interval = AccIntervalList.Item(0);

    %loop through the current interval
    for j=1:(interval.DataSets.Count-1)
        
        %obtain the values from the data sets...
        dsA = interval.Datasets.Item(j-1);
        dsAvalue = dsA.GetValues;

        %switch on the name to get the data provider you want
        switch (dsA.ElementName) ;
        
        %remember - cell arrays come back
        case 'Start Time'
			startArray = dsAvalue;
		case 'Stop Time'
			stopArray = dsAvalue;
		case 'Duration'
			durArray = dsAvalue;
        end
    end
end

%print out the access times

%prepopulate generic arrays
start = zeros(0);
stop = zeros(0);
dur = zeros(0);

%header
fprintf('\n\n%s\n\n   %s\t%s\t%s\n','Access Data','Start','Stop','Duration');

for i=1:length(startArray)
    
    %populate regular matrices then print out
    start(i) = startArray{i};
    stop(i) = stopArray{i};
    dur(i) = durArray{i};
    
    fprintf('%8.3f\t%8.3f\t%8.3f\n',start(i),stop(i),dur(i));
end

 
Download File