New Features in FreeFlyer 6.5
Integrated Debugger
•Breakpoints
•Step in/out/over
•Inspector
•Debugger Log |
Extensions
•Provides the ability to call into compiled code from FreeFlyer script
•Call into existing code / libraries
•Define custom objects
•Define custom forces
•For more information, see FreeFlyer Extensions |
Help File Enhancements
•New Guides on fundamental FreeFlyer topics
•In-depth discussion of the Spacecraft object
•Completely rewritten help for each FreeFlyer command
•Color-coded syntax examples throughout |
Visualization Enhancements
•Night Lights texture
•Specular Reflection
•Optional display of Sun terminator on 2D map
•Optional enforcement of 2:1 aspect ratio in 2D map
•Ability to display a 2D Map for any CelestialObject
•Ability to generate bitmap-based movies (WMV & AVI)
•Screen capture of Mission View windows
•Improved 3ds support |
Workspace Management
•Create workspaces on demand
•Move windows between workspaces
•Use the same workspace for multiple runs (ie. legacy FreeFlyer 5.6 style) |
Object Lists
•Support for Lists of any object type
List<Spacecraft> leoAssets;
List<GroundStation> dsnNetwork;
|
•Indexing into / iteration over elements of a list of objects
For i = 0 to leoAssets.Count - 1 step 1;
Step leoAssests[i];
End;
|
•Dynamic resizing of objects lists
leoAssets.Count = GetNumberOfNoradState("myTLE.tle");
|
•Formation object as a special case of List<Spacecraft>
•Additional properties / methods for initializing and displaying a Formation |
New Script Parsing Engine
•Generalized string/numeric/object expression evaluation.
oAnywhere a numeric value is used, any valid numeric expression can be used.
For i = 0 to myArray.Dimension - 1 step 1;
|
oAnywhere a string value is used, any valid string expression can be used.
Watch "The Spacecraft's Epoch is: " + mySpacecraft.Epoch.ToString();
|
oAnywhere an object is used, any valid object expression can be used.
Step mySpacecraftList[i] to ( mySpacecraftList[i].Epoch == 21434 );
mySpacecraft.Propagator.StepSize = 60;
|
•Object Constructor syntax
ReportInterface myReportInterface("myReportFilename.txt");
|
•'Create' optional when defining object types
Variable myVariable;
Array myArray[5];
|
•Shorter Spacecraft creation syntax option - creates default ForceModel and Propagator automatically
•Improved syntax error messages
•Object and Object Array properties
•Access to child objects through the parent object
mySpacecraft.Propagator.StepSize = 60;
mySpacecraft.Tanks[2].TankMass = 2000;
|
•String concatenation using the plus operator
myString = myOtherString + "blah" + sc1.Name + " " + variable.ToString();
|
•ToString available on properties / numeric expressions
myString = sc1.A.ToString();
myString = array1[0].ToString();
myString = (sc1.TotalMass - 100).ToString();
|
•Stricter handling of potentially invalid syntax |
Exposed Object Hierarchy
•Object type inheritance is accessible from FreeFlyer script
•The ability to pass any generic Propagator type to a procedure.
Define Procedure SetStepSize(Propagator prop, Variable val);
prop.StepSize = val;
EndProcedure;
|
•IsType operator to check an object type
•AsType operator for casting to higher object types.
If (prop IsType RK89) then;
(prop AsType RK89).Tolerance = 1e-9;
End;
|
|
Miscellaneous Enhancements
•MatlabInterface Enhancements
oAbility to pass Variables
oAbility to pass Strings
oAbility to pass the same expression as input and output
•Ability to model Solid Earth Tides in Force Model
•Ability to read DE418 and DE421
•Improved interpolation when stepping between vectors of an Ephemeris
•TrackingDataEditor
oAbility to view and manually filter Tracking Data prior to processing it in the Orbit Determination process
•A command line option for passing data into an executing MissionPlan
•Probability of Collision (Pc) method
•Ability to load canned Objects Presets from existing object files |
Migrating to FreeFlyer 6.5
While we always strive to maintain 100% backwards compatibility in our new releases, our efforts to make FreeFlyer scripting more flexible and consistent in FreeFlyer 6.5 and higher have necessitated a few changes which may require user intervention when migrating your existing Mission Plans. These changes are outlined below.
Variable to String assignments are no longer supported
In FreeFlyer 6.0 and earlier, the following syntax was allowed:
Create Variable myVariable;
Create String myString;
myVariable = 5;
myString = myVariable;
|
The behavior would result in myString containing the value "5". In 6.5 and higher, this script would result in a syntax error. The way to accomplish the same result in 6.5 is to use the ToString method:
Create Variable myVariable;
Create String myString;
myVariable = 5;
myString = myVariable.ToString();
|
The use of parentheses to index array properties is deprecated
In FreeFlyer 6.0 and earlier, the following syntax was standard:
Create Array myArray[5];
myArray.Element(0) = 1;
|
While this parenthetical syntax still works, it is deprecated and will generate a warning. The preferred syntax in 6.5 and higher is as follows:
Create Array myArray[5];
myArray.Element[0] = 1;
|
Object declarations inside of block statements are no longer valid
In FreeFlyer 6.0 and earlier, the following script was valid:
Create Variable v1;
If(v1 == 0);
Create Variable v2;
v2 = 5;
End;
|
In 6.5 and higher this will generate an error. You can fix the error by changing the script to the following:
Create Variable v1;
Create Variable v2;
If(v1 == 0);
v2 = 5;
End;
|
Boolean expressions now follow standard order of operations
Consider the following script:
Create Variable v = 0;
If(v == 0 or v == 0 and v == 1) then;
Watch v;
End;
|
In FreeFlyer 6.0 and earlier, Boolean expressions evaluated left to right. In the script above, this leads to a grouping like:
(v == 0 or v == 0) and v == 1
|
In 6.5 and higher, the and operator takes precedence over the or operator leading to a grouping like:
v == 0 or (v == 0 and v == 1)
|
In the example given, the expression evaluates to true in 6.5, but false in previous versions. In 6.5 and higher, you can also use parentheses to group expressions and explicitly specify the order of evaluation you desire.
The TrackDataMonitor declaration syntax has changed
Assuming the existence of a Spacecraft named sc1, the previous syntax was:
Create GroundStation g;
Create TrackDataMonitor tdm using sc1 from g("track1.data");
|
The new syntax is:
Create GroundStation g;
Create TrackDataMonitor tdm using sc1 from g<"track1.data">;
|
In other words, when specifying the tracking data files associated with a GroundStation object, use angle brackets instead of parentheses.
Some forms of the Close command are no longer available
The following permutations of the Close command are no longer valid:
Close myString;
Close "aFile.txt";
Close aFile.txt;
|
Instead of closing the file name, close the object with which the file is associated (for example, a ReportInterface object).
The Report command now requires quotes around literal file names
In FreeFlyer 6.0 and earlier, the following syntax was valid:
Create Variable v;
Report v to abc.txt;
|
Now, quotes around the file name are required:
Create Variable v;
Report v to "abc.txt";
|
The Report command "as XML" option has been removed
The following syntax for the Report command is no longer valid:
Report as XML Spacecraft1.A to "report.txt";
|
ThreeDModel Group names must be accessed with their fully qualified name
In FreeFlyer 6.0 and earlier, the following was valid:
Create ThreeDModel myModel;
myModel.CreateGroup("KuAntenna");
myModel.CreateGroup("KuAntenna", "KuBoom");
myModel.CreateGroup("KuBoom", "KuDish");
myModel.SetGroupOrientation("KuDish", quatArray);
|
In 6.5 and higher, Node/Group/Object hierarchy contained in the file is preserved, so the above form may be ambiguous. Therefore, the Group paths must be fully qualified as:
Create ThreeDModel myModel;
myModel.CreateGroup("KuAntenna");
myModel.CreateGroup("KuAntenna", "KuBoom");
myModel.CreateGroup("KuAntenna/KuBoom", "KuDish");
myModel.SetGroupOrientation("/KuAntenna/KuBoom/KuDish", quatArray);
|
The syntax for accessing properties of the NoradSGP4 propagator has changed
Note: In all previous and current versions of FreeFlyer, the NoradSGP4 DLLs must be installed in order to gain access to the NoradSGP4 propagator.
Assuming the existence of a Spacecraft named mySpacecraft, in FreeFlyer 6.0 and earlier, you accessed properties of the NoradSGP4 propagator in the following way:
mySpacecraft.NoradSGP4_MeanMotion = 1;
|
Where MeanMotion is the name of the property you are trying to access. In 6.5 and higher, the syntax is as follows:
mySpacecraft.NoradSGP4State.MeanMotion = 1;
|
See Also
•Release History
|