Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------
- -- SafeReactor - a Big Reactors control program [OpenComputers version]
- -- by Kai Kikuchi
- -- version: 0.1.1 - (ALPHA- STILL IN DEVELOP)
- --
- -- Source code: http://pastebin.com/k40ktpxK
- -- Sample screenshot: https://imgur.com/higRKAX
- -- ComputerCraft: http://pastebin.com/7M3hziBV
- --
- -- This program manages a Big Reactors reactor (both passive and active)
- -- and turbines, making it very fuel efficient
- --
- -- ** How to install ** --
- -- > In order to use pastebin, your computer needs an Internet Card
- -- - pastebin get k40ktpxK autorun.lua
- -- - reboot
- ----------------------
- -- settings
- local minTemp=750
- local maxTemp=800
- ----------------------
- local event = require "event"
- local comp=require("component")
- local term=require("term")
- local r=comp.getPrimary("br_reactor")
- -- global variables
- energyStored=0
- energyProduced=0
- energyProducedMax=0
- totalEnergyStored=0
- running=true
- -- functions
- local function round(num, idp)
- local mult = 10^(idp or 0)
- return math.floor(num * mult + 0.5) / mult
- end
- local function rfkrf(rf)
- if rf >= 1000 then
- return round(rf/1000, 2).." kRF"
- else
- return round(rf, 0).." RF"
- end
- end
- function unknownEvent()
- end
- local events = setmetatable({}, { __index = function() return unknownEvent end })
- function events.key_up(adress, char, code, playerName)
- if (char == 3) then
- running = false
- end
- end
- function handleEvent(eventID, ...)
- if (eventID) then
- events[eventID](...)
- end
- end
- -- main
- term.clear()
- term.write("Initialization...")
- local intTick=18;
- event.listen("key_up", handleEvent)
- --r.setAllControlRodLevels(0)
- casingTemp=round(r.getCasingTemperature(), 0)
- while running do
- if (r.getConnected() and r.getActive()) then
- coreTemp=round(r.getFuelTemperature(), 0)
- lastCasingTemp=casingTemp
- casingTemp=round(r.getCasingTemperature(), 0)
- fuelAmount=(r.getFuelAmountMax()/r.getFuelAmount())
- fuelConsumed=r.getFuelConsumedLastTick()
- if r.isActivelyCooled() then
- energyProduced=0
- lastTotalEnergyStored=totalEnergyStored
- totalEnergyStored=0
- count=0
- for addr,tmp in comp.list("br_turbine") do
- t=comp.proxy(addr)
- if t.getActive() then
- energyStored=t.getEnergyStored()
- if (energyStored<800000) then
- t.setInductorEngaged(true)
- elseif (energyStored>900000) then
- t.setInductorEngaged(false)
- end
- if (t.getRotorSpeed()<1800) then
- t.setFluidFlowRateMax(2000)
- else
- t.setFluidFlowRateMax(0)
- end
- energyProduced=energyProduced+t.getEnergyProducedLastTick()
- totalEnergyStored=totalEnergyStored+energyStored
- count=count+1
- end
- end
- bufferPercent=round(totalEnergyStored/(10000*count),2)
- energyOutput=(lastTotalEnergyStored-totalEnergyStored+energyProduced)
- if (energyOutput<0) then
- energyOutput=0
- end
- if (casingTemp<minTemp) then
- if (lastCasingTemp>=casingTemp) then
- r.setAllControlRodLevels(r.getControlRodLevel(0)-1)
- end
- elseif (casingTemp>maxTemp) then
- if (lastCasingTemp<=casingTemp) then
- r.setAllControlRodLevels(r.getControlRodLevel(0)+1)
- end
- end
- else
- lastEnergyStored=energyStored
- energyStored=r.getEnergyStored()
- bufferPercent=round(energyStored/100000, 2)
- energyProduced=r.getEnergyProducedLastTick()
- energyOutput=(lastEnergyStored-energyStored+energyProduced)
- if bufferPercent < 80 then
- r.setAllControlRodLevels(0)
- else
- r.setAllControlRodLevels(bufferPercent)
- end
- end
- if energyProduced > energyProducedMax then
- energyProducedMax = energyProduced
- end
- if intTick>=40 then
- comp.getPrimary("gpu").setResolution(30, 10)
- term.clear()
- term.write("Heat (int|ext):\t"..coreTemp.."C|"..casingTemp.."C\n")
- term.write("Buffer:\t\t"..bufferPercent.." %\n")
- term.write("Output:\t\t"..rfkrf(energyOutput).."/t\n")
- term.write("Capacity:\t"..rfkrf(energyProducedMax).."/t\n")
- term.write("Fuel burnup:\t"..round(fuelConsumed, 3).." mB/t")
- intTick=0
- end
- else
- if intTick==40 then
- term.clear()
- term.write("not connected")
- end
- end
- intTick=intTick+2;
- os.sleep(0.1)
- end
- term.clear()
- print("SafeReactor closed")
Advertisement
Add Comment
Please, Sign In to add comment