Advertisement
purplemonday

Turbine.lua

Feb 22nd, 2016
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.73 KB | None | 0 0
  1. dofile("/disk/common.inc")
  2.  
  3. modem = peripheral.wrap(getsidefor("modem"))
  4. turbine = peripheral.wrap(getsidefor("BigReactors-Turbine"))
  5.  
  6. config = {}
  7. config[1] = 0.2 -- controletimer
  8. config[2] = 60 -- alivetimer
  9. config[3] = 1 -- displaytimer
  10. config[4] = 800 --prefspeed1
  11. config[5] = 1830 -- prefspeed2
  12. config[6] = 500 --speedup1
  13. config[7] = 1500 --speedup2
  14. config[8] = 6969 -- modem channel
  15. writeup_array(config,"turbine.cfg")
  16. local speed = nil
  17. modem.open(config[8])
  18. controltimer = os.startTimer(0.2)
  19. alivetimer = os.startTimer(1)
  20. displaytimer = os.startTimer(1)
  21. specs = {}
  22. while true do
  23.     event,parm1,parm2,parm3,parm4,parm5,parm6 = os.pullEvent()
  24.     --print(event)
  25.     if event == "modem_message" then
  26.         --event, side, frequency, replyFrequency, message, distanceevent, side, frequency, replyFrequency, message, distance
  27.         --print (param3)
  28.         org = parm3
  29.         message = parm4  
  30.         mdata = textutils.unserialise(parm4)
  31.         print(parm4)
  32.         if mdata[1] == "STAT" and mdata[2] == tostring(os.getComputerID()) then
  33.             print ("sendback")
  34.             mstr = textutils.serialise({"STAT_TURBINE",specs})
  35.             modem.transmit(config[8],os.computerID(),mstr)
  36.         end  
  37.     elseif event == "timer" then
  38.         if parm1 == controltimer then
  39.         speed = turbine.getRotorSpeed()
  40.         specs[1] = speed
  41.         specs[2] = turbine.getEnergyProducedLastTick ()
  42.         specs[3] = tostring(turbine.getInductorEngaged())
  43.         specs[4] = tostring(turbine.getActive())
  44.         energybuffer = turbine.getEnergyStored()
  45.         specs[5] = energybuffer
  46.         specs[6] = turbine.getFluidFlowRate()
  47.         specs[7] = turbine.getInputAmount()
  48.         specs[8] = turbine.getOutputAmount()
  49.         -- so what mode where in
  50.         overspeed = speed - config[5]
  51.         specs[9] = overspeed
  52.         if energybuffer > 500000 or speed < config[7] then
  53.             turbine.setInductorEngaged(false)
  54.             valve = 2000
  55.             if speed > config[5] then
  56.                 -- disengaged_limiter
  57.                 valve = 2000 - math.pow(overspeed,overspeed)
  58.                 valve = valve - overspeed
  59.             end
  60.             turbine.setFluidFlowRateMax(valve)
  61.             elseif speed > config[5] then
  62.                 --need to use throthle
  63.                 -- engaged_limiter
  64.                 valve = 2000 - math.pow(overspeed,overspeed)
  65.                 turbine.setFluidFlowRateMax(valve)
  66.                 turbine.setInductorEngaged(true)
  67.             else
  68.                 --we need to produce energy and not have full speed
  69.                 turbine.setFluidFlowRateMax(2000)
  70.                 turbine.setInductorEngaged(true)
  71.             end
  72.         controltimer = os.startTimer(0.1)
  73.     elseif parm1 == displaytimer then
  74.         term.clear()
  75.         term.setCursorPos(1,1)    
  76.         print (textutils.serialise(specs))
  77.         print (textutils.serialise(config))
  78.         displaytimer = os.startTimer(config[3])        
  79.         elseif parm1 == alivetimer then
  80.             alivetimer = os.startTimer()
  81.             inp = {"ALIVE"}
  82.             modem.transmit(config[8],os.getComputerID(),textutils.serialise(inp))
  83.         end
  84.     end
  85. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement