Advertisement
Guest User

donode.txt

a guest
Sep 24th, 2014
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. // Known issue: Sometimes fails to do any burn if engine is very powerful and maneuver is very tiny.
  2. // Workaround: Use thrust-limiters on powerful engines for small fine-tuned maneuvers.
  3. // Sources: http://forum.kerbalspaceprogram.com/threads/40053-Estimate-the-duration-of-a-burn
  4.  
  5. clearscreen.
  6. print "- - - - - - - - - - - - - - - - - - - -". // line 1
  7. print "Script: DoNode.txt". // line 2
  8.  
  9.  
  10. // Get average ISP of all engines.
  11. // http://wiki.kerbalspaceprogram.com/wiki/Tutorial:Advanced_Rocket_Design
  12. // This is not yet designed for thrust-limited engines, or atmospheric ISP (?)
  13. set ispsum to 0.
  14. set maxthrustlimited to 0.
  15. LIST ENGINES in MyEngines.
  16. for engine in MyEngines {
  17. if engine:ISP > 0 {
  18. set ispsum to ispsum + (engine:MAXTHRUST / engine:ISP).
  19. set maxthrustlimited to maxthrustlimited + (engine:MAXTHRUST * (engine:THRUSTLIMIT / 100) ).
  20. }
  21. }
  22. set ispavg to ( maxthrustlimited / ispsum ).
  23. set g0 to 9.82.
  24. set ve to ispavg * g0.
  25. set dv to NEXTNODE:DELTAV:MAG.
  26. set m0 to SHIP:MASS.
  27. set Th to maxthrustlimited.
  28. set e to CONSTANT():E.
  29. set burntime to (m0 * ve / Th) * (1 - e^(-dv/ve)).
  30. set tminus to burntime / 2.
  31.  
  32. print "Total burn time for maneuver: " + ROUND(burntime,2) + " s". // line 3
  33. print "Steering". // line 4
  34. SAS off.
  35. lock steering to NEXTNODE.
  36.  
  37. print "Waiting for node". // line 5
  38. set rt to NEXTNODE:ETA - tminus. // remaining time
  39. until rt <= 0 {
  40. set rt to NEXTNODE:ETA - tminus. // remaining time
  41. //set maxwarp to 0.
  42. if rt < 100000 { set maxwarp to 7. }
  43. if rt < 10000 { set maxwarp to 6. }
  44. if rt < 1000 { set maxwarp to 5. }
  45. if rt < 100 { set maxwarp to 4. }
  46. if rt < 60 { set maxwarp to 3. }
  47. if rt < 50 { set maxwarp to 2. }
  48. if rt < 25 { set maxwarp to 1. }
  49. if rt < 8 { set maxwarp to 0. }
  50. print " Remaining time: " + rt at (0,5). // line 6
  51. print " Warp factor: " + WARP at (0,6). // line 7
  52. if WARP > maxwarp {
  53. set WARP to maxwarp.
  54. }
  55. }
  56. print " ".
  57. print " ".
  58. set WARP to 0.
  59.  
  60.  
  61. set tvar to 0.
  62. lock throttle to tvar.
  63. print "Fast burn".
  64. set olddv to NEXTNODE:DELTAV:MAG + 1.
  65. until (NEXTNODE:DELTAV:MAG < 1 and STAGE:LIQUIDFUEL > 0) or (NEXTNODE:DELTAV:MAG > olddv) {
  66. //print "Burning".
  67. set da to maxthrustlimited * THROTTLE / SHIP:MASS.
  68. set tset to NEXTNODE:DELTAV:MAG * SHIP:MASS / maxthrustlimited.
  69. if NEXTNODE:DELTAV:MAG < 2*da and tset > 0.1 {
  70. set tvar to tset.
  71. }
  72. if NEXTNODE:DELTAV:MAG > 2*da {
  73. set tvar to 1.
  74. }
  75. set olddv to NEXTNODE:DELTAV:MAG.
  76. }
  77. // caveman debugging
  78. if (NEXTNODE:DELTAV:MAG > olddv) {
  79. print "Warning: Delta-V target exceeded during fast-burn!".
  80. }
  81. // compensate 1m/s due to "until" stopping short; nd:deltav:mag never gets to 0!
  82. print "Slow burn".
  83. if STAGE:LIQUIDFUEL > 0 and da <> 0{
  84. wait 1/da.
  85. }
  86. lock THROTTLE to 0.
  87.  
  88.  
  89. unlock all.
  90. print "Stabilizing".
  91. SAS on.
  92.  
  93. print " ".
  94. print "Orbit:".
  95. print " Ap: " + round(SHIP:OBT:APOAPSIS).
  96. print " Pe: " + round(SHIP:OBT:PERIAPSIS).
  97. print "- - - - - - - - - - - - - - - - - - - -".
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement