Advertisement
Guest User

Untitled

a guest
May 4th, 2015
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.24 KB | None | 0 0
  1. local component = require("component")
  2. local keyboard = require("keyboard")
  3. local turbine = component.br_turbine
  4. local term = require("term")
  5. local gpu1 = component.gpu
  6.  
  7. local trig = 0
  8. local tarRPM = 0
  9. local ki = 10
  10. local errSum = 0
  11. local dErr = 0
  12. local lastError = 0
  13.  
  14. term.clear()
  15.  
  16. function round(num, idp)
  17.   local mult = 10^(idp or 0)
  18.   return math.floor(num * mult + 0.5) / mult
  19. end
  20.  
  21. print("-----------------REACTOR CONTROLLER ALPHA---------------------")
  22. os.sleep(0.1)
  23. print("-Setup-")
  24. os.sleep(0.1)
  25. print("Please enter maximum turbine output in kRF/t:")
  26.  
  27. maxOut = io.read()
  28. os.sleep(0.1)
  29.  
  30. print("Please enter desired turbine output in kRF/t:")
  31.  
  32. tarOut = io.read()
  33. os.sleep(0.1)
  34.  
  35. print("Please enter desired turbine RPM (recommended 900 (LO) or 1800 (HI):")
  36.  
  37. tarRPM = io.read()
  38. os.sleep(0.5)
  39.  
  40. print("Setup complete")
  41. os.sleep(1)
  42. print("Starting turbine")
  43. os.sleep(1)
  44.  
  45. turbine.setActive(true)
  46. turbine.setInductorEngaged(false)
  47. turbine.setFluidFlowRateMax(2000)
  48.  
  49.  
  50. while true do
  51.  
  52.     curOut = turbine.getEnergyProducedLastTick()
  53.     curRPM = turbine.getRotorSpeed()
  54.     curSetFlow = turbine.getFluidFlowRateMax()
  55.     curError = tarRPM-curRPM
  56.     proErr = ki*curError
  57.     errSum = errSum + curError
  58.     dErr = (curError - lastError)
  59.  
  60.         if errSum > 400 then errSum=400 end
  61.         if errSum < -400 then errSum=-400 end
  62.  
  63.    
  64.  
  65.     curFlowDev = proErr + errSum + dErr
  66.  
  67.     lastError = curError
  68.  
  69.         if curFlowDev<0 then curFlowDev=0 end
  70.         if curFlowDev>2000 then curFlowDev=2000 end
  71.  
  72.         if curRPM<tarRPM-50 and trig==0 then
  73.  
  74.  
  75.             turbine.setInductorEngaged(false)
  76.  
  77.         elseif curRPM>tarRPM-1 then
  78.  
  79.  
  80.             turbine.setInductorEngaged(true)
  81.  
  82.             trig = 1
  83.  
  84.             turbine.setInductorEngaged(true)
  85.  
  86.         end
  87.  
  88. turbine.setFluidFlowRateMax(curFlowDev)
  89.  
  90. gpu1.fill(1,1,999,999," ")
  91.  
  92. gpu1.set(1,1, "Current turbine output: " .. math.floor(curOut) .. " RF/t")
  93. gpu1.set(1,2, "Current rotor speed: " .. math.round(curRPM,1) .. " RPM")
  94. gpu1.set(1,3, "Target rotor speed: " .. math.round(tarRPM,1) .. " RPM")
  95.  
  96. gpu1.set(1,5, "P: " .. math.round(proErr,3))
  97. gpu1.set(1,6, "I: " .. math.round(errSum,3))
  98. gpu1.set(1,7, "D: " .. math.round(dErr,3))
  99.  
  100. gpu1.set(1,9, "Current flow rate: " .. math.round(curSetFlow,3))
  101.  
  102.  
  103. os.sleep(0.5)
  104.  
  105. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement