Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sleep(1)
- -- Regler
- soll = 0.75
- ist = 1
- Kp = 1.5
- Ki = 0
- Kd = 0.5
- Ta = 0.1
- esum = 0
- ealt = 0
- local reactor = peripheral.wrap("back")
- function PID()
- e = soll - ist
- esum = ((esum + e) > 1 and 1 or (esum + e))
- y = Kp * e + Ki * Ta * esum + Kd * (e-ealt)/Ta
- ealt = e
- if y < 0 then
- y = 0
- elseif y > 1 then
- x = 1
- else
- y = y
- end
- return y
- end
- function calcRodLevel()
- return (reactor.battery().stored()/reactor.battery().capacity())
- end
- function setControlRodLevels(level)
- rodLevel = level
- reactor.setAllControlRodLevels(math.floor(rodLevel))
- for i = 0, math.floor(reactor.controlRodCount()*(rodLevel%1))-1, 1 do
- reactor.getControlRod(i).setLevel(math.floor(rodLevel)+1)
- end
- end
- function printRodLevels(level)
- print("Level to set:")
- print(string.format("%.3f", level))
- print("Level to be set:")
- print(math.floor(level*reactor.controlRodCount())/reactor.controlRodCount())
- local x,y = term.getCursorPos()
- print("Rod:")
- term.setCursorPos(7,y)
- print("Level:")
- local rodAverage = 0
- for i = 0, reactor.controlRodCount()-1 , 1 do
- print(i)
- term.setCursorPos(7,y+1+i)
- rodAverage = rodAverage + reactor.getControlRod(i).level()
- print(reactor.getControlRod(i).level())
- end
- rodAverage = rodAverage / reactor.controlRodCount()
- print("Value set:")
- print(rodAverage)
- end
- function printStats()
- print(string.format("%.2f".." KiRF/Ingot", (reactor.battery().producedLastTick()/reactor.fuelTank().burnedLastTick())))
- end
- while true do
- term.clear()
- term.setCursorPos(1,1)
- ist = calcRodLevel()
- level = (1-PID())*100
- setControlRodLevels(level)
- -- setControlRodLevels(75.5)
- printRodLevels(level)
- printStats()
- sleep(Ta)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement