Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local keyboard = require("keyboard")
- local turbine = component.br_turbine
- local term = require("term")
- local gpu1 = component.gpu
- local trig = 0
- local tarRPM = 0
- local ki = 10
- local errSum = 0
- local dErr = 0
- local lastError = 0
- term.clear()
- function round(num, idp)
- local mult = 10^(idp or 0)
- return math.floor(num * mult + 0.5) / mult
- end
- print("-----------------REACTOR CONTROLLER ALPHA---------------------")
- os.sleep(0.1)
- print("-Setup-")
- os.sleep(0.1)
- print("Please enter maximum turbine output in kRF/t:")
- maxOut = io.read()
- os.sleep(0.1)
- print("Please enter desired turbine output in kRF/t:")
- tarOut = io.read()
- os.sleep(0.1)
- print("Please enter desired turbine RPM (recommended 900 (LO) or 1800 (HI):")
- tarRPM = io.read()
- os.sleep(0.5)
- print("Setup complete")
- os.sleep(1)
- print("Starting turbine")
- os.sleep(1)
- turbine.setActive(true)
- turbine.setInductorEngaged(false)
- turbine.setFluidFlowRateMax(2000)
- while true do
- curOut = turbine.getEnergyProducedLastTick()
- curRPM = turbine.getRotorSpeed()
- curSetFlow = turbine.getFluidFlowRateMax()
- curError = tarRPM-curRPM
- proErr = ki*curError
- errSum = errSum + curError
- dErr = (curError - lastError)
- if errSum > 400 then errSum=400 end
- if errSum < -400 then errSum=-400 end
- curFlowDev = proErr + errSum + dErr
- lastError = curError
- if curFlowDev<0 then curFlowDev=0 end
- if curFlowDev>2000 then curFlowDev=2000 end
- if curRPM<tarRPM-50 and trig==0 then
- turbine.setInductorEngaged(false)
- elseif curRPM>tarRPM-1 then
- turbine.setInductorEngaged(true)
- trig = 1
- turbine.setInductorEngaged(true)
- end
- turbine.setFluidFlowRateMax(curFlowDev)
- gpu1.fill(1,1,999,999," ")
- gpu1.set(1,1, "Current turbine output: " .. math.floor(curOut) .. " RF/t")
- gpu1.set(1,2, "Current rotor speed: " .. math.round(curRPM,1) .. " RPM")
- gpu1.set(1,3, "Target rotor speed: " .. math.round(tarRPM,1) .. " RPM")
- gpu1.set(1,5, "P: " .. math.round(proErr,3))
- gpu1.set(1,6, "I: " .. math.round(errSum,3))
- gpu1.set(1,7, "D: " .. math.round(dErr,3))
- gpu1.set(1,9, "Current flow rate: " .. math.round(curSetFlow,3))
- os.sleep(0.5)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement