Advertisement
Guest User

rcontrol

a guest
Dec 8th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.90 KB | None | 0 0
  1. reactor = peripheral.wrap("BigReactors-Reactor_6")
  2. monitor = peripheral.wrap("monitor_47")
  3.  
  4. -- Control Vars
  5. setpoint = 21000
  6. tolerance = 500
  7. rod_level = 84
  8. step = 0.5     -- loop time
  9. i = 0          -- control iterator
  10. rate = 20      -- how many steps between control rod updates
  11.  
  12. -- Reactor init
  13. reactor.setActive(true)
  14. reactor.setAllControlRodLevels(rod_level)
  15.  
  16. -- Monitor init
  17. monitor.setTextScale(1)
  18. monitor.setTextColor(colors.white)
  19. monitor.setBackgroundColor(colors.black)
  20. size_x, size_y = monitor.getSize()
  21.  
  22. -- main loop
  23. while true do
  24.  
  25.   -- Reactor vars
  26.   active = reactor.getActive()
  27.   raw_power = reactor.getEnergyProducedLastTick()
  28.   power = math.floor(raw_power/10)/100
  29.   fuel = math.floor(reactor.getFuelAmount()/reactor.getFuelAmountMax()*10000)/100
  30.   f_rate = math.floor(reactor.getFuelConsumedLastTick()*1000)/1000
  31.  
  32.   -- Reactor control loop
  33.   if i >= rate - 1 then
  34.     reactor.setAllControlRodLevels(rod_level)
  35.     if raw_power < setpoint - tolerance then
  36.       rod_level = rod_level - 1
  37.     elseif raw_power > setpoint + tolerance then
  38.       rod_level = rod_level + 1
  39.     end
  40.     i = 0
  41.   else
  42.     i = i + 1
  43.   end
  44.  
  45.   if rod_level < 0 then rod_level = 0 end
  46.   if rod_level > 100 then rod_level = 100 end
  47.  
  48.   -- Reactor status
  49.   if active then
  50.     monitor.setCursorPos(math.floor(size_x/2)-6,1)
  51.     monitor.write("Reactor: ")
  52.     monitor.setTextColor(colors.green)
  53.     monitor.write("Active")
  54.   else
  55.     monitor.setCursorPos(math.floor(size_x/2)-7,1)
  56.     monitor.write("Reactor: ")
  57.     monitor.setTextColor(colors.red)
  58.     monitor.write("Inactive")
  59.   end
  60.   monitor.setTextColor(colors.white)
  61.  
  62.   -- Reactor power output
  63.   monitor.setCursorPos(2,2)
  64.   monitor.write("Power Output: " .. tostring(power) .. "K RF/t")
  65.  
  66.   -- Reactor fuel Level
  67.   monitor.setCursorPos(2,3)
  68.   monitor.write("Fuel: ")
  69.   if fuel < 20 then
  70.     monitor.setTextColor(colors.red)
  71.   elseif fuel < 40 then
  72.     monitor.setTextColor(colors.orange)
  73.   elseif fuel < 70 then
  74.     monitor.setTextColor(colors.yellow)
  75.   else
  76.     monitor.setTextColor(colors.green)
  77.   end
  78.   monitor.write(tostring(fuel) .. "%")
  79.   monitor.setTextColor(colors.white)
  80.  
  81.   -- Fuel Burnup Rate
  82.   monitor.setCursorPos(2,4)
  83.   monitor.write("Fuel Rate: " .. tostring(f_rate) .. "mB/t      ")
  84.  
  85.   -- Control Rod Level Display
  86.   if rod_level < 10 then
  87.     monitor.setCursorPos(size_x-2,2)
  88.   else
  89.     monitor.setCursorPos(size_x-3,2)
  90.   end
  91.   monitor.write(tostring(rod_level) .. "%")
  92.  
  93.   for j = 1,size_y-3 do
  94.     monitor.setCursorPos(size_x-3,2+j)
  95.     monitor.setBackgroundColor(colors.yellow)    
  96.     monitor.write(" ")    
  97.     if j < 16/100*rod_level then
  98.       monitor.setBackgroundColor(colors.gray)
  99.       monitor.write(" ")
  100.       monitor.setBackgroundColor(colors.yellow)
  101.       monitor.write(" ")
  102.     else
  103.       monitor.write("  ")
  104.     end
  105.   end
  106.   monitor.setBackgroundColor(colors.black)
  107.  
  108.   os.sleep(step)
  109. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement