Advertisement
Guest User

donode.txt

a guest
Sep 15th, 2014
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Known issue: Fails to do any burn if engine is very powerful and maneuver is very tiny.
  2. // Known issue: Does not account for thrust-limiters.
  3. // Sources: http://forum.kerbalspaceprogram.com/threads/40053-Estimate-the-duration-of-a-burn
  4.  
  5.  
  6. clearscreen.
  7. print "- - - - - - - - - - - - - - - - - - - -". // line 1
  8. print "Script: DoNode.txt". // line 2
  9.  
  10.  
  11. // Get average ISP of all engines.
  12. // http://wiki.kerbalspaceprogram.com/wiki/Tutorial:Advanced_Rocket_Design
  13. // This is not yet designed for thrust-limited engines, or atmospheric ISP (?)
  14. set sum to 0.
  15. LIST ENGINES in MyEngines.
  16. for engine in MyEngines {
  17. if engine:ISP > 0 {
  18. set sum to sum + (engine:MAXTHRUST / engine:ISP).
  19. }
  20. }
  21. set ispavg to ( SHIP:MAXTHRUST / sum ).
  22. set g0 to 9.82.
  23. set ve to ispavg * g0.
  24. set dv to NEXTNODE:DELTAV:MAG.
  25. set m0 to SHIP:MASS.
  26. set Th to SHIP:MAXTHRUST.
  27. set e to CONSTANT():E.
  28. set burntime to (m0 * ve / Th) * (1 - e^(-dv/ve)).
  29. //set burntime to NEXTNODE:DELTAV:MAG * SHIP:MASS / SHIP:MAXTHRUST.
  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 (warp allowed until T-minus 15)". // line 5
  38. set rt to NEXTNODE:ETA - tminus. // remaining time
  39. until rt <= 10 {
  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 < 20 { set maxwarp to 1. }
  49. if rt < 15 { set maxwarp to 0. }
  50. print " Remaining time: " + rt at (0,5). // line 6
  51. if WARP > maxwarp {
  52. set WARP to maxwarp.
  53. print " Warp factor: " + WARP at (0,6). // line 7
  54. }
  55. }
  56. //set WARP to 0.
  57.  
  58. print " ".
  59. print " ".
  60. print "Waiting for node (10 s)".
  61. wait until NEXTNODE:ETA - tminus < 1.
  62.  
  63.  
  64. set tvar to 0.
  65. lock throttle to tvar.
  66. print "Fast burn".
  67. set olddv to NEXTNODE:DELTAV:MAG + 1.
  68. until (NEXTNODE:DELTAV:MAG < 1 and STAGE:LIQUIDFUEL > 0) or (NEXTNODE:DELTAV:MAG > olddv) {
  69. //print "Burning".
  70. set da to SHIP:MAXTHRUST * THROTTLE / SHIP:MASS.
  71. set tset to NEXTNODE:DELTAV:MAG * SHIP:MASS / SHIP:MAXTHRUST.
  72. if NEXTNODE:DELTAV:MAG < 2*da and tset > 0.1 {
  73. set tvar to tset.
  74. }
  75. if NEXTNODE:DELTAV:MAG > 2*da {
  76. set tvar to 1.
  77. }
  78. set olddv to NEXTNODE:DELTAV:MAG.
  79. }
  80. // compensate 1m/s due to "until" stopping short; nd:deltav:mag never gets to 0!
  81. print "Slow burn".
  82. if STAGE:LIQUIDFUEL > 0 and da <> 0{
  83. wait 1/da.
  84. }
  85. lock THROTTLE to 0.
  86.  
  87.  
  88. unlock all.
  89. print "Stabilizing".
  90. SAS on.
  91. print "- - - - - - - - - - - - - - - - - - - -".
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement