KaiKikuchi

SafeReactor for OpenComputers WorkInProgress

Apr 6th, 2015
4,093
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.51 KB | None | 0 0
  1. ----------------------
  2. -- SafeReactor - a Big Reactors control program [OpenComputers version]
  3. -- by Kai Kikuchi
  4. -- version: 0.1.1 - (ALPHA- STILL IN DEVELOP)
  5. --
  6. -- Source code: http://pastebin.com/k40ktpxK
  7. -- Sample screenshot: https://imgur.com/higRKAX
  8. -- ComputerCraft: http://pastebin.com/7M3hziBV
  9. --
  10. -- This program manages a Big Reactors reactor (both passive and active)
  11. -- and turbines, making it very fuel efficient
  12. --
  13. -- ** How to install ** --
  14. -- > In order to use pastebin, your computer needs an Internet Card
  15. -- - pastebin get k40ktpxK autorun.lua
  16. -- - reboot
  17. ----------------------
  18. -- settings
  19. local minTemp=750
  20. local maxTemp=800
  21.  
  22. ----------------------
  23. local event = require "event"
  24. local comp=require("component")
  25. local term=require("term")
  26. local r=comp.getPrimary("br_reactor")
  27.  
  28. -- global variables
  29. energyStored=0
  30. energyProduced=0
  31. energyProducedMax=0
  32. totalEnergyStored=0
  33.  
  34. running=true
  35.  
  36. -- functions
  37. local function round(num, idp)
  38.   local mult = 10^(idp or 0)
  39.   return math.floor(num * mult + 0.5) / mult
  40. end
  41.  
  42. local function rfkrf(rf)
  43.     if rf >= 1000 then
  44.             return round(rf/1000, 2).." kRF"
  45.     else
  46.             return round(rf, 0).." RF"
  47.     end
  48. end
  49.  
  50. function unknownEvent()
  51. end
  52.  
  53. local events = setmetatable({}, { __index = function() return unknownEvent end })
  54.  
  55.  
  56. function events.key_up(adress, char, code, playerName)
  57.   if (char == 3) then
  58.     running = false
  59.   end
  60. end
  61.  
  62. function handleEvent(eventID, ...)
  63.   if (eventID) then
  64.     events[eventID](...)
  65.   end
  66. end
  67.  
  68. -- main
  69. term.clear()
  70. term.write("Initialization...")
  71.  
  72. local intTick=18;
  73. event.listen("key_up", handleEvent)
  74.  
  75. --r.setAllControlRodLevels(0)
  76. casingTemp=round(r.getCasingTemperature(), 0)
  77.  
  78. while running do
  79.   if (r.getConnected() and r.getActive()) then
  80.     coreTemp=round(r.getFuelTemperature(), 0)
  81.     lastCasingTemp=casingTemp
  82.     casingTemp=round(r.getCasingTemperature(), 0)
  83.  
  84.     fuelAmount=(r.getFuelAmountMax()/r.getFuelAmount())
  85.     fuelConsumed=r.getFuelConsumedLastTick()
  86.  
  87.     if r.isActivelyCooled() then
  88.       energyProduced=0
  89.       lastTotalEnergyStored=totalEnergyStored
  90.       totalEnergyStored=0
  91.       count=0
  92.  
  93.       for addr,tmp in comp.list("br_turbine") do
  94.         t=comp.proxy(addr)
  95.         if t.getActive() then
  96.           energyStored=t.getEnergyStored()
  97.  
  98.           if (energyStored<800000) then
  99.             t.setInductorEngaged(true)
  100.           elseif (energyStored>900000) then
  101.             t.setInductorEngaged(false)
  102.           end
  103.           if (t.getRotorSpeed()<1800) then
  104.             t.setFluidFlowRateMax(2000)
  105.           else
  106.             t.setFluidFlowRateMax(0)
  107.           end
  108.  
  109.           energyProduced=energyProduced+t.getEnergyProducedLastTick()
  110.           totalEnergyStored=totalEnergyStored+energyStored
  111.           count=count+1
  112.         end
  113.       end
  114.  
  115.       bufferPercent=round(totalEnergyStored/(10000*count),2)
  116.       energyOutput=(lastTotalEnergyStored-totalEnergyStored+energyProduced)
  117.        
  118.       if (energyOutput<0) then
  119.         energyOutput=0
  120.       end
  121.        
  122.       if (casingTemp<minTemp) then
  123.         if (lastCasingTemp>=casingTemp) then
  124.           r.setAllControlRodLevels(r.getControlRodLevel(0)-1)
  125.         end
  126.       elseif (casingTemp>maxTemp) then
  127.         if (lastCasingTemp<=casingTemp) then
  128.           r.setAllControlRodLevels(r.getControlRodLevel(0)+1)
  129.         end
  130.       end
  131.     else
  132.       lastEnergyStored=energyStored
  133.       energyStored=r.getEnergyStored()
  134.  
  135.       bufferPercent=round(energyStored/100000, 2)
  136.  
  137.       energyProduced=r.getEnergyProducedLastTick()
  138.       energyOutput=(lastEnergyStored-energyStored+energyProduced)
  139.        
  140.       if bufferPercent < 80 then
  141.         r.setAllControlRodLevels(0)
  142.       else
  143.         r.setAllControlRodLevels(bufferPercent)
  144.       end
  145.     end
  146.  
  147.     if energyProduced > energyProducedMax then
  148.       energyProducedMax = energyProduced
  149.     end
  150.  
  151.     if intTick>=40 then
  152.       comp.getPrimary("gpu").setResolution(30, 10)
  153.       term.clear()
  154.       term.write("Heat (int|ext):\t"..coreTemp.."C|"..casingTemp.."C\n")
  155.       term.write("Buffer:\t\t"..bufferPercent.." %\n")
  156.       term.write("Output:\t\t"..rfkrf(energyOutput).."/t\n")
  157.       term.write("Capacity:\t"..rfkrf(energyProducedMax).."/t\n")
  158.       term.write("Fuel burnup:\t"..round(fuelConsumed, 3).." mB/t")
  159.       intTick=0
  160.     end
  161.   else
  162.     if intTick==40 then
  163.       term.clear()
  164.       term.write("not connected")
  165.     end
  166.   end
  167.  
  168.   intTick=intTick+2;
  169.   os.sleep(0.1)
  170. end
  171. term.clear()
  172. print("SafeReactor closed")
Advertisement
Add Comment
Please, Sign In to add comment