Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions Orbitersdk/samples/ProjectApollo/src_launch/MCCPADForms.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,39 @@ struct AP7TPI {
double GET; // Time that range,range-rate,azimuth, and elevation parameters are valid
};

// SKYLAB - MANEUVER
struct SLMNV {
double GETI; // TIG
VECTOR3 dV; // P30 dV
double Vc; // EMS dV
double Weight; // Vehicle weight
double pTrim, yTrim; // SPS pitch/yaw trim
double burntime; // Burn time
VECTOR3 Att; // Attitude at TIG
char remarks[256]; // remarks
int type; // 1 = NC1, 2 = NPC, 3 = NC2, 4 = NCC, 5 = NSR
bool prelim; // preliminary or final pad
int Star; // Nav star for orientation check
double Shaft, Trun; // Shaft and trunnion values for orientation check
};

// SKYLAB - TERMINAL PHASE INITIATE
struct SLTPI {
SLTPI::SLTPI()
{
GETI = 0.0;
Vg = _V(0, 0, 0);
Backup_dV = _V(0.0, 0.0, 0.0);
Backup_bT = _V(0.0, 0.0, 0.0);
}
// ON THE FORM:
double GETI; // TIG
VECTOR3 Vg; // P40 velocity to be gained
VECTOR3 Backup_dV; // Backup "line-of-sight to Target" dV (fore/aft, left/right, up/down)
VECTOR3 Backup_bT; // Burn time to get dV in backup axes
bool prelim;
};

// APOLLO 7 - ENTRY UPDATE
struct AP7ENT {
// Pre-burn
Expand Down
22 changes: 11 additions & 11 deletions Orbitersdk/samples/ProjectApollo/src_launch/MCC_Mission_SL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,43 +39,43 @@ void MCC::MissionSequence_SL()
UpdateMacro(UTP_NONE, PT_NONE, mcc_calcs.GETEval(30.0*60.0), 10, MST_SL_RENDEZVOUS_PLAN);
break;
case MST_SL_RENDEZVOUS_PLAN: //Rendezvous planning to NC1 preliminary update
UpdateMacro(UTP_NONE, PT_NONE, mcc_calcs.GETEval(1.0*3600.0 + 35.0*60.0), 11, MST_SL_PRELIM_NC1);
UpdateMacro(UTP_PADONLY, PT_GENERIC, mcc_calcs.GETEval(1.0*3600.0 + 35.0*60.0), 11, MST_SL_PRELIM_NC1);
break;
case MST_SL_PRELIM_NC1: //NC1 preliminary update to NC1 final update
UpdateMacro(UTP_PADONLY, PT_AP7MNV, mcc_calcs.GETEval(1.0 * 3600.0 + 55.0*60.0), 12, MST_SL_FINAL_NC1);
UpdateMacro(UTP_PADONLY, PT_SLMNV, mcc_calcs.GETEval(1.0 * 3600.0 + 55.0*60.0), 12, MST_SL_FINAL_NC1);
break;
case MST_SL_FINAL_NC1: //NC1 final update to NC2 preliminary update
UpdateMacro(UTP_PADWITHCMCUPLINK, PT_AP7MNV, mcc_calcs.GETEval(3.0 * 3600.0 + 5*60.0), 13, MST_SL_PRELIM_NC2);
UpdateMacro(UTP_PADWITHCMCUPLINK, PT_SLMNV, mcc_calcs.GETEval(3.0 * 3600.0 + 5*60.0), 13, MST_SL_PRELIM_NC2);
break;
case MST_SL_PRELIM_NC2: //NC2 preliminary update to SV uplink
UpdateMacro(UTP_PADONLY, PT_AP7MNV, mcc_calcs.GETEval(3.0 * 3600.0 + 27.0*60.0), 14, MST_SL_NC2_SVs);
UpdateMacro(UTP_PADONLY, PT_SLMNV, mcc_calcs.GETEval(3.0 * 3600.0 + 27.0*60.0), 14, MST_SL_NC2_SVs);
break;
case MST_SL_NC2_SVs: //SV uplink to NC2 final update
UpdateMacro(UTP_CMCUPLINKONLY, PT_NONE, mcc_calcs.GETEval(4.0*3600.0 + 12 * 60.0), 24, MST_SL_FINAL_NC2);
break;
case MST_SL_FINAL_NC2: //NC2 final update to NCC preliminary update
UpdateMacro(UTP_PADONLY, PT_AP7MNV, SubStateTime > 2.0*60.0, 15, MST_SL_PRELIM_NCC);
UpdateMacro(UTP_PADONLY, PT_SLMNV, SubStateTime > 2.0*60.0, 15, MST_SL_PRELIM_NCC);
break;
case MST_SL_PRELIM_NCC: //NCC preliminary update to NSR preliminary update
UpdateMacro(UTP_PADONLY, PT_AP7MNV, SubStateTime > 2.0*60.0, 16, MST_SL_PRELIM_NSR);
UpdateMacro(UTP_PADONLY, PT_SLMNV, SubStateTime > 2.0*60.0, 16, MST_SL_PRELIM_NSR);
break;
case MST_SL_PRELIM_NSR: //NSR preliminary update to NCC final update
UpdateMacro(UTP_PADONLY, PT_AP7MNV, mcc_calcs.GETEval(rtcc->calcParams.CSI - 24.0*60.0), 18, MST_SL_FINAL_NCC);
UpdateMacro(UTP_PADONLY, PT_SLMNV, mcc_calcs.GETEval(rtcc->calcParams.CSI - 24.0*60.0), 18, MST_SL_FINAL_NCC);
break;
case MST_SL_FINAL_NCC: //NCC final update to NSR final update
UpdateMacro(UTP_PADONLY, PT_AP7MNV, SubStateTime > 2.0*60.0, 17, MST_SL_FINAL_NSR);
UpdateMacro(UTP_PADONLY, PT_SLMNV, SubStateTime > 2.0*60.0, 17, MST_SL_FINAL_NSR);
break;
case MST_SL_FINAL_NSR: //NSR final update to TPI preliminary update
UpdateMacro(UTP_PADONLY, PT_AP7MNV, mcc_calcs.GETEval(rtcc->calcParams.TPI - 34.0*60.0), 19, MST_SL_PRELIM_TPI);
UpdateMacro(UTP_PADONLY, PT_SLMNV, mcc_calcs.GETEval(rtcc->calcParams.TPI - 34.0*60.0), 19, MST_SL_PRELIM_TPI);
break;
case MST_SL_PRELIM_TPI: //TPI preliminary update to docking attitude PAD
UpdateMacro(UTP_PADONLY, PT_AP7MNV, SubStateTime > 2.0*60.0, 20, MST_DOCKING_ATTITUDE_PAD);
UpdateMacro(UTP_PADONLY, PT_SLTPI, SubStateTime > 2.0*60.0, 20, MST_DOCKING_ATTITUDE_PAD);
break;
case MST_DOCKING_ATTITUDE_PAD: //Docking attitude PAD to TPI final update
UpdateMacro(UTP_PADONLY, PT_GENERIC, mcc_calcs.GETEval(rtcc->calcParams.TPI - 26.0*60.0), 22, MST_SL_FINAL_TPI);
break;
case MST_SL_FINAL_TPI: //TPI final update to Skylab Solar Inertial Command
UpdateMacro(UTP_PADONLY, PT_AP7MNV, mcc_calcs.GETEval(rtcc->calcParams.TPI + 21.0*60.0), 21, MST_SL_SOLAR_INERTIAL);
UpdateMacro(UTP_PADONLY, PT_SLTPI, mcc_calcs.GETEval(rtcc->calcParams.TPI + 21.0*60.0), 21, MST_SL_SOLAR_INERTIAL);
break;
case MST_SL_SOLAR_INERTIAL: //Skylab Solar Inertial Command to
UpdateMacro(UTP_NONE, PT_NONE, false, 23, MST_ENTRY);
Expand Down
119 changes: 84 additions & 35 deletions Orbitersdk/samples/ProjectApollo/src_launch/RTCC_Mission_SL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,
break;
case 11: //RENDEZVOUS PLANNING
{
GENERICPAD * form = (GENERICPAD *)pad;
char Buff1[64], Buff2[64];
DKIOpt opt;

opt.sv_CSM = StateVectorCalcEphem(calcParams.src);
Expand Down Expand Up @@ -156,21 +158,28 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,
calcParams.CDH = PZREDT.GET[3]; //NSR time
calcParams.TPI = PZRPDT.data[0].GETTPI; //TPI time

char Buff1[64], Buff2[64];
OrbMech::format_time_HHMMSS(Buff1, calcParams.Phasing);
OrbMech::format_time_HHMMSS(Buff2, calcParams.TPI);

sprintf(upMessage, "NC1: %s, TPI: %s", Buff1, Buff2);
sprintf(form->paddata, "NC1: %s, TPI: %s", Buff1, Buff2);
}
break;
case 12: //NC1 preliminary update
preliminary = true;
case 13: //NC1 final update
{
AP7MNV* form = (AP7MNV*)pad;
SLMNV* form = (SLMNV*)pad;
AP7ManPADOpt manopt;
DKIOpt opt;

if (fcn == 12)
{
preliminary = true;
}
else
{
preliminary = false;
}

opt.sv_CSM = StateVectorCalcEphem(calcParams.src);
opt.sv_LM = StateVectorCalcEphem(calcParams.tgt);
opt.MV = 1; //CSM maneuvers
Expand Down Expand Up @@ -210,8 +219,10 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,
manopt.sv0 = opt.sv_CSM;
manopt.WeightsTable = GetWeightsTable(calcParams.src, true, false);

AP7ManeuverPAD(manopt, *form);
sprintf(form->purpose, "NC1");
SLManeuverPAD(manopt, *form);

form->type = 1;
form->prelim = preliminary;

if (preliminary == false)
{
Expand All @@ -231,14 +242,22 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,
}
break;
case 14: //NC2 preliminary update
preliminary = true;
case 15: //NC2 final update
{
AP7MNV* form = (AP7MNV*)pad;
SLMNV* form = (SLMNV*)pad;
AP7ManPADOpt manopt;
DKIOpt opt;
double CSMMass;

if (fcn == 14)
{
preliminary = true;
}
else
{
preliminary = false;
}

opt.sv_CSM = StateVectorCalcEphem(calcParams.src);
CSMMass = calcParams.src->GetMass();
opt.sv_LM = StateVectorCalcEphem(calcParams.tgt);
Expand Down Expand Up @@ -280,24 +299,35 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,
char Buff1[64];
OrbMech::format_time_HHHMMSSCS(Buff1, calcParams.TPI);

AP7ManeuverPAD(manopt, *form);
sprintf(form->purpose, "NC2");
SLManeuverPAD(manopt, *form);

form->type = 3;
form->prelim = preliminary;

if (preliminary)
{
sprintf(form->remarks, "TPI: %s", Buff1);
}
}
break;
case 16: //NCC preliminary update
preliminary = true;
case 17: //NCC final update
{
AP7MNV* form = (AP7MNV*)pad;
SLMNV* form = (SLMNV*)pad;
AP7ManPADOpt manopt;
TwoImpulseOpt opt;
TwoImpulseResuls res;
double CSMMass;

if (fcn == 16)
{
preliminary = true;
}
else
{
preliminary = false;
}

opt.mode = 5;
opt.T1 = GMTfromGET(calcParams.CSI);
opt.T2 = GMTfromGET(calcParams.CDH);
Expand Down Expand Up @@ -344,17 +374,27 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,
manopt.WeightsTable.CC[RTCC_CONFIG_C] = true;
manopt.WeightsTable.ConfigWeight = manopt.WeightsTable.CSMWeight = CSMMass;

AP7ManeuverPAD(manopt, *form);
sprintf(form->purpose, "NCC");
SLManeuverPAD(manopt, *form);

form->type = 4;
form->prelim = preliminary;
}
break;
case 18: //NSR preliminary update
preliminary = true;
case 19: //NSR final update
{
AP7MNV* form = (AP7MNV*)pad;
SLMNV* form = (SLMNV*)pad;
AP7ManPADOpt manopt;

if (fcn == 18)
{
preliminary = true;
}
else
{
preliminary = false;
}

manopt.TIG = calcParams.CDH;
manopt.dV_LVLH = calcParams.DVSTORE1; //Was calculated for NCC PAD
manopt.enginetype = RTCC_ENGINETYPE_CSMSPS;
Expand All @@ -368,24 +408,38 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,
manopt.WeightsTable.CC[RTCC_CONFIG_C] = true;
manopt.WeightsTable.ConfigWeight = manopt.WeightsTable.CSMWeight = calcParams.SVSTORE1.mass;

AP7ManeuverPAD(manopt, *form);
sprintf(form->purpose, "NSR");
SLManeuverPAD(manopt, *form);

form->type = 5;
form->prelim = preliminary;
}
break;
case 20: //TPI preliminary update
preliminary = true;
case 21: //TPI final update
{
AP7MNV* form = (AP7MNV*)pad;
AP7ManPADOpt manopt;
SLTPI* form = (SLTPI*)pad;
AP7TPIPADOpt manopt;
TwoImpulseOpt opt;
TwoImpulseResuls res;
VehicleDataBlock sv_A, sv_P;

sv_A = StateVectorCalcDataBlock(calcParams.src);
sv_P = StateVectorCalcDataBlock(calcParams.tgt);

if (fcn == 20)
{
preliminary = true;
}
else
{
preliminary = false;
}

opt.mode = 5;
opt.T1 = -1.0;
opt.T2 = -1.0;
opt.sv_C = StateVectorCalcDataBlock(calcParams.src);
opt.sv_T = StateVectorCalcDataBlock(calcParams.tgt);
opt.sv_C = sv_A;
opt.sv_T = sv_P;
opt.DH = opt.PhaseAngle = 0.0;
opt.Elev = 27.0 * RAD;
opt.WT = 130.0 * RAD;
Expand All @@ -394,20 +448,15 @@ bool RTCC::CalculationMTP_SL(int fcn, LPVOID& pad, char* upString, char* upDesc,

calcParams.TPI = res.T1; //Update TPI time

manopt.TIG = res.T1;
manopt.dV_LVLH = res.dV_LVLH;
manopt.enginetype = RTCC_ENGINETYPE_CSMSPS;
manopt.HeadsUp = true;
manopt.REFSMMAT = GetREFSMMATfromAGC(&mcc->cm->agc.vagc, true);
manopt.navcheckGET = 0.0;
manopt.sxtstardtime = 0.0;
manopt.UllageDT = 15.0;
manopt.UllageThrusterOpt = true;
manopt.sv0 = opt.sv_C.sv;
manopt.WeightsTable = GetWeightsTable(calcParams.src, true, false);
manopt.TIG = res.T1;
manopt.sv_A = sv_A.sv;
manopt.sv_P = sv_P.sv;
manopt.mass = calcParams.src->GetMass();

SLTPIPAD(manopt, *form);

AP7ManeuverPAD(manopt, *form);
sprintf(form->purpose, "TPI");
form->prelim = preliminary;
}
break;
case 22: //Docking Attitude PAD
Expand Down
Loading