Advertisement
rhn

Big Reactor steam reactor 2

rhn
Dec 1st, 2014
701
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.50 KB | None | 0 0
  1. --"Regulator" for BigReactor actively cooled reactors.
  2.  
  3. --Scanning interval in seconds:
  4. local AdjustInterval = 600
  5.  
  6.  
  7. --Detect directly adjacent devices function
  8. function detectDevice(DeviceName)
  9. DeviceSide="none"
  10. for k,v in pairs(redstone.getSides()) do
  11.  if peripheral.getType(v)==DeviceName then
  12.    DeviceSide = v
  13.    break
  14.  end
  15. end
  16.   return(DeviceSide)
  17. end
  18. --list all connected peripherals:
  19. local peripheralList = peripheral.getNames()
  20. --locate reactor
  21. reactorside=detectDevice("Reactor")
  22. if reactorside~="none" then
  23.     reactor=peripheral.wrap(reactorside)
  24. else
  25.     for Index = 1, #peripheralList do
  26.         if string.find(peripheralList[Index], "Reactor") then
  27.                                         reactor=peripheral.wrap(peripheralList[Index])
  28.                                         print ("Reactor wired modem: "..peripheralList[Index].." connected.")
  29.         end
  30.     end
  31. end
  32. --locate monitor
  33. MonitorSide=detectDevice("monitor")
  34.  
  35. if MonitorSide~="none" then
  36.       monitor=peripheral.wrap(MonitorSide)
  37.    print ("Monitor on the " .. MonitorSide .. " connected.")
  38.    else
  39.         for Index = 1, #peripheralList do
  40.                 if string.find(peripheralList[Index], "monitor") then
  41.                         monitor=peripheral.wrap(peripheralList[Index])
  42.                         print ("Monitor on wired modem: "..peripheralList[Index].." connected.")
  43.                 end
  44.         end --for
  45.         if monitor == "none" then
  46.                 print ("Warning - No Monitor attached, continuing without.")
  47.         end
  48. end
  49.  
  50. w,h=monitor.getSize()
  51. print(w)
  52. print(h)
  53.  
  54. if monitor ~= "none" then
  55.         monitor.clear()
  56.         monitor.setTextColor(colors.blue)
  57.         monitor.setCursorPos(1,1)
  58.         monitor.write("BR Automatic Steam Regulator")
  59.     monitor.setTextColor(colors.white)
  60.     monitor.setCursorPos(1,2)
  61.     monitor.write("-----------------------------")
  62.     monitor.setCursorPos(1,6)
  63.     monitor.write("-------------------")
  64.     monitor.setCursorPos(1,10)
  65.     monitor.write("-------------------")
  66.         for i=3, 12 do
  67.                 monitor.setCursorPos(20, i)
  68.                 monitor.write("|")
  69.         end
  70.     monitor.setCursorPos(2,3)
  71.     monitor.write("Temp:")
  72.     monitor.setCursorPos(2,4)
  73.     monitor.write("Steam:")
  74.     monitor.setCursorPos(2,5)
  75.     monitor.write("Reactiv:")
  76.     monitor.setCursorPos(2,7)
  77.     monitor.write("Fuel:")
  78.     monitor.setCursorPos(2,8)
  79.     monitor.write("Waste:")
  80.     monitor.setCursorPos(2,9)
  81.     monitor.write("Rate:")
  82.     monitor.setCursorPos(22,3)
  83.     monitor.write("Control")
  84.     monitor.setCursorPos(22,4)
  85.     monitor.write("Rod:")
  86.  
  87.     monitor.setCursorPos(22,10)
  88.     monitor.write("Next:")
  89.  
  90.     monitor.setCursorPos(2,11)
  91.     monitor.write("Cooling:")
  92.     monitor.setCursorPos(13,11)
  93.     monitor.write("Reactor")
  94.  
  95.     monitor.setCursorPos(16,3)
  96.     monitor.write("C")
  97.     monitor.setCursorPos(16,4)
  98.     monitor.write("mB/t")
  99.     monitor.setCursorPos(16,5)
  100.     monitor.write("%")
  101.     monitor.setCursorPos(14,7)
  102.     monitor.write("mB")
  103.     --monitor.setCursorPos(19,7)
  104.     --monitor.write("%")
  105.     monitor.setCursorPos(14,8)
  106.     monitor.write("mB")
  107.     monitor.setCursorPos(14,9)
  108.     monitor.write("mB/t")
  109.  
  110.     monitor.setCursorPos(27,5)
  111.     monitor.write("%")
  112.  
  113.     monitor.setCursorPos(22,12)
  114.     monitor.write("-  O  +")
  115.  
  116.     monitor.setBackgroundColour((colours.grey))
  117.     monitor.setCursorPos(22,7)
  118.     monitor.write("Control")
  119.     monitor.setCursorPos(22,8)
  120.     monitor.write("  Rod  ")
  121.     monitor.setCursorPos(22,9)
  122.     monitor.write("Adjust ")
  123.     monitor.setBackgroundColour((colours.black))
  124.    
  125.    
  126. end
  127.  
  128.  
  129.  
  130. function snooze(time)
  131.   for i = time,0,-1 do
  132.     if monitor ~= "none" then
  133.         monitor.setCursorPos(11,3)
  134.         local fueltemp = math.ceil(reactor.getFuelTemperature())
  135.         if fueltemp > 1000 then
  136.             monitor.setTextColor(colors.red)
  137.         end
  138.         monitor.write(fueltemp.." ")
  139.         monitor.setTextColor(colors.white)
  140.         monitor.setCursorPos(11,4)
  141.         monitor.write(math.ceil(reactor.getHotFluidProducedLastTick()).." ")
  142.         monitor.setCursorPos(11,5)
  143.         monitor.write(math.ceil(reactor.getFuelReactivity()).." ") 
  144.         monitor.setCursorPos(8,7)
  145.         monitor.write(reactor.getFuelAmount().." ")
  146.         --monitor.setCursorPos(16,7)
  147.         --monitor.write(math.ceil(100*((reactor.getFuelAmount())/(reactor.getFuelAmountMax()))).." ")
  148.         monitor.setCursorPos(9,8)
  149.         monitor.write(reactor.getWasteAmount().." ")
  150.         local fuelrate = (math.ceil(1000*(reactor.getFuelConsumedLastTick())))/1000
  151.         monitor.setCursorPos(8,9)
  152.         monitor.write(fuelrate)
  153.  
  154.         monitor.setCursorPos(23,5)
  155.         monitor.write(reactor.getControlRodLevel(0).." ")
  156.     end
  157.    
  158.     --test for on/off state and cooling
  159.     if monitor ~= "none" then
  160.         if reactor.getActive() then
  161.             monitor.setBackgroundColour((colours.green))
  162.             monitor.setCursorPos(13,12)
  163.             monitor.write("ON")
  164.             monitor.setBackgroundColour((colours.grey))
  165.             monitor.setCursorPos(16,12)
  166.             monitor.write("OFF")
  167.             monitor.setBackgroundColour((colours.black))       
  168.         else
  169.             monitor.setBackgroundColour((colours.grey))
  170.             monitor.setCursorPos(13,12)
  171.             monitor.write("ON")
  172.             monitor.setBackgroundColour((colours.red))
  173.             monitor.setCursorPos(16,12)
  174.             monitor.write("OFF")
  175.             monitor.setBackgroundColour((colours.black))
  176.         end
  177.  
  178.         if reactor.getCoolantAmount() > reactor.getCoolantAmountMax()*0.3 then
  179.             monitor.setBackgroundColour((colours.green))
  180.             monitor.setCursorPos(2,12)
  181.             monitor.write("Supply: OK")
  182.             monitor.setBackgroundColour((colours.black))
  183.         else
  184.             monitor.setBackgroundColour((colours.red))
  185.             monitor.setCursorPos(2,12)
  186.             monitor.write("No Cooling")
  187.             monitor.setBackgroundColour((colours.black))
  188.         end
  189.    
  190.             monitor.setCursorPos(23,11)
  191.             monitor.write(i)
  192.     end
  193.  
  194.     sleep(1)
  195.   end
  196. end
  197.  
  198. --boost up steam production initially
  199.     if monitor ~= "none" then
  200.             monitor.setBackgroundColour((colours.green))
  201.             monitor.setCursorPos(22,7)
  202.             monitor.write("Control")
  203.             monitor.setCursorPos(22,8)
  204.             monitor.write("  Rod  ")
  205.             monitor.setCursorPos(22,9)
  206.             monitor.write("Adjust ")
  207.             monitor.setBackgroundColour((colours.black))
  208.     end
  209. steamOld = reactor.getHotFluidProducedLastTick()
  210. reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)-1)
  211.     if monitor ~= "none" then
  212.         monitor.setCursorPos(24,12)
  213.         monitor.write("<")
  214.     end
  215.     snooze(10)
  216. steamNew = reactor.getHotFluidProducedLastTick()
  217. while steamNew > steamOld do
  218.     print("boosting production initially")
  219.     steamOld = reactor.getHotFluidProducedLastTick()
  220.     reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)-5)
  221.     snooze(5)
  222.     steamNew = reactor.getHotFluidProducedLastTick()
  223. end
  224.  
  225. snooze(20)
  226.     if monitor ~= "none" then
  227.         monitor.setCursorPos(24,12)
  228.         monitor.write(" ")
  229.     end
  230.  
  231. while true do
  232.     if monitor ~= "none" then
  233.             monitor.setBackgroundColour((colours.green))
  234.             monitor.setCursorPos(22,7)
  235.             monitor.write("Control")
  236.             monitor.setCursorPos(22,8)
  237.             monitor.write("  Rod  ")
  238.             monitor.setCursorPos(22,9)
  239.             monitor.write("Adjust ")
  240.             monitor.setBackgroundColour((colours.black))
  241.     end
  242. --Raise control rods until steam production lowers:
  243. steamOld = reactor.getHotFluidProducedLastTick()
  244. reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)+1)
  245.     if monitor ~= "none" then
  246.         monitor.setCursorPos(26,12)
  247.         monitor.write(">")
  248.     end
  249. snooze(20)
  250. steamNew = reactor.getHotFluidProducedLastTick()
  251. while steamNew == steamOld do
  252.     steamOld1 = reactor.getHotFluidProducedLastTick()
  253.     print("steamOld1:"..steamOld1)
  254.     sleep(0.5)
  255.     steamOld2 = reactor.getHotFluidProducedLastTick()
  256.     print("steamOld2:"..steamOld2)
  257.     if steamOld1 < steamOld2 and steamOld1 ~= 0 then
  258.         steamOld = steamOld1
  259.     else
  260.         steamOld = steamOld2
  261.     end
  262.    
  263.     reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)+1)
  264.    
  265.     snooze(20)
  266.  
  267.     steamNew = reactor.getHotFluidProducedLastTick()
  268. end
  269.     if monitor ~= "none" then
  270.         monitor.setCursorPos(26,12)
  271.         monitor.write(" ")
  272.     end
  273.  
  274. --raise steam production again to the found limit
  275. while reactor.getHotFluidProducedLastTick() < (steamOld-2) do
  276. print("raise steam production to found limit:"..steamOld)
  277.     reactor.setAllControlRodLevels(reactor.getControlRodLevel(1)-1)
  278.     if monitor ~= "none" then
  279.         monitor.setCursorPos(24,12)
  280.         monitor.write("<")
  281.     end
  282.     snooze(10)
  283. end
  284.     if monitor ~= "none" then
  285.         monitor.setCursorPos(24,12)
  286.         monitor.write(" ")
  287.             monitor.setBackgroundColour((colours.grey))
  288.             monitor.setCursorPos(22,7)
  289.             monitor.write("Control")
  290.             monitor.setCursorPos(22,8)
  291.             monitor.write("  Rod  ")
  292.             monitor.setCursorPos(22,9)
  293.             monitor.write("Adjust ")
  294.             monitor.setBackgroundColour((colours.black))
  295.     end
  296. snooze(AdjustInterval)
  297. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement