Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -----------------------------------------------------
- -- --
- -- Pyramidalist --
- -- --
- -- https://www.youtube.com/watch?v=BhOBAZqCI1g --
- -- --
- -----------------------------------------------------
- local reactor
- reactor = peripheral.wrap("back")
- MIN = 244 -- SOLL-Temperatur
- BandBreite = 1 -- TemperaturToleranz
- Grundstellung = 56 -- Rod-Anfangseinstellung
- -- HINWEIS: 78 ist ein guter Startwert bei 5 Rods und 2 Maximal-Turbinen Ziel: 198 Grad
- -- HINWEIS: 68 ist ein guter Startwert bei 5 Rods und 3 Maximal-Turbinen Ziel: Grad
- -- HINWEIS: 56 ist ein guter Startwert bei 5 Rods und 4 Maximal-Turbinen Ziel: 244 Grad
- Gain = 7 -- AnpassungsGeschwindigkeit
- Pulsschwelle = 5 -- maximale Abweichung in der der Puls gelten soll
- PulseGain = 5 -- Puls für Tempanpassung in Kleinstschritten Kurz Pulsen und dann zurück
- PulseDauer = 2 -- Sekunden Pulsdauer
- MAXKorrektur = 2 * Gain -- Grenze Schub zum Hochfahren
- MINKorrektur = -1 * Gain -- Grenze Schub zum Abkuehlen
- ExtremCounterMAX = 0
- ExtremCounterMIN = 0
- boost = 1 -- Verschiebt ALLE Rods wenn der FeinStellRod zu oft extreme Werte hat
- Speed = 3 -- allgemeiner Warte-Zeitraum wegen Systemträgheit
- rednet.open("top")
- MinOLD = MIN
- rednetA, MIN, rednetC = rednet.receive(Speed)
- if MIN == nil then
- MIN = MinOLD
- else
- -- MIN ist neu gesetzt
- end
- rednet.close("top")
- -- Grundeinstellung zum Programmstart
- reactor.setControlRodLevel(0, Grundstellung) -- 1
- Rod0 = reactor.getControlRodName(0)
- reactor.setControlRodLevel(1, Grundstellung) -- 2
- Rod1 = reactor.getControlRodName(1)
- reactor.setControlRodLevel(2, Grundstellung) -- 3
- Rod2 = reactor.getControlRodName(2)
- reactor.setControlRodLevel(3, Grundstellung) -- 4
- Rod3 = reactor.getControlRodName(3)
- reactor.setControlRodLevel(4, Grundstellung) -- 5
- Rod4 = reactor.getControlRodName(4)
- -- LaufzeitScheife
- while true do
- term.clear()
- term.setCursorPos(0, 0)
- print("")
- if Mitte ~= 0 then
- reactor.setControlRodLevel(0, Grundstellung) -- 1
- Rod0 = reactor.getControlRodName(0)
- -- print(Rod0,"0 in Grundstellung")
- end
- if Mitte ~= 1 then
- reactor.setControlRodLevel(1, Grundstellung) -- 2
- Rod1 = reactor.getControlRodName(1)
- -- print(Rod0, "1 in Grundstellung")
- end
- if Mitte ~= 2 then
- reactor.setControlRodLevel(2, Grundstellung) -- 3
- Rod2 = reactor.getControlRodName(2)
- -- print(Rod2, "2 in Grundstellung")
- end
- if Mitte ~= 3 then
- reactor.setControlRodLevel(3, Grundstellung) -- 4
- Rod3 = reactor.getControlRodName(3)
- -- print(Rod3, "3 in Grundstellung")
- end
- if Mitte ~= 4 then
- reactor.setControlRodLevel(4, Grundstellung) -- 5
- Rod4 = reactor.getControlRodName(4)
- -- print(Rod4, "4 in Grundstellung")
- end
- -- print("-----------------")
- -- print(reactor.getControlRodLevel(0))
- -- print(reactor.getControlRodLevel(1))
- -- print(reactor.getControlRodLevel(2))
- -- print(reactor.getControlRodLevel(3))
- -- print(reactor.getControlRodLevel(4))
- if Rod0 == "Pyra3Mitte" then print("Rod 0 ist Mitte", " Grundstellung = ", Grundstellung) Mitte = 0 sleep(1) end
- if Rod1 == "Pyra3Mitte" then print("Rod 1 ist Mitte", " Grundstellung = ", Grundstellung) Mitte = 1 sleep(1) end
- if Rod2 == "Pyra3Mitte" then print("Rod 2 ist Mitte", " Grundstellung = ", Grundstellung) Mitte = 2 sleep(1) end
- if Rod3 == "Pyra3Mitte" then print("Rod 3 ist Mitte", " Grundstellung = ", Grundstellung) Mitte = 3 sleep(1) end
- if Rod4 == "Pyra3Mitte" then print("Rod 4 ist Mitte", " Grundstellung = ", Grundstellung) Mitte = 4 sleep(1) end
- print("ExtremC.MAX= ", ExtremCounterMAX, " ExtremC.MIN= ", ExtremCounterMIN)
- print(" ")
- Temperatur = reactor.getFuelTemperature()
- print("Rel. 03 Temperatur= ", Temperatur, " SOll= ", MIN)
- Korrektur = MIN - Temperatur
- if Korrektur > 1 then
- Korrektur = (Gain - (Gain/Korrektur))
- end
- if Korrektur < -1 then
- Korrektur = (Gain -(Gain/Korrektur))*-1
- end
- print("Korrektur ist ", Korrektur)
- if Korrektur > MAXKorrektur then
- Korrektur = MAXKorrektur
- end
- if Korrektur < MINKorrektur then
- Korrektur = MINKorrektur
- end
- print("Angepasste Korrektur ", Korrektur)
- print(" ")
- -- WarteDauer zwischen RegelKreisDurchlaeufen
- sleep(3)
- -- ### Hier beginnt das eigentliche Programm
- print("")
- if Temperatur < MIN then
- print("Zu niedrige Temperatur")
- if MIN - Temperatur > 10 then
- ExtremCounterMIN = ExtremCounterMIN + 1
- if ExtremCounterMIN > 3 then
- Grundstellung = Grundstellung - 1
- ExtremCounterMIN = 0
- ExtremCounterMax = 0
- end
- reactor.setControlRodLevel(0, Grundstellung - boost) -- 1
- reactor.setControlRodLevel(1, Grundstellung - boost) -- 2
- reactor.setControlRodLevel(2, Grundstellung - boost) -- 3
- reactor.setControlRodLevel(3, Grundstellung - boost) -- 4
- reactor.setControlRodLevel(4, Grundstellung - boost) -- 5
- sleep(Speed)
- end
- if MIN - Temperatur < Pulsschwelle then
- RodPosition = reactor.getControlRodLevel(Mitte)
- RodOld = RodPosition
- print(RodPosition)
- print("Pulsing auf:")
- RodPosition = RodPosition - PulseGain
- if RodPosition < 0.1 then RodPosition = 0.1 end
- if RodPosition > 99.9 then RodPosition = 99,9 end
- print(RodPosition)
- reactor.setControlRodLevel(Mitte, RodPosition)
- sleep(PulseDauer)
- RodPosition = RodOld
- reactor.setControlRodLevel(Mitte, RodPosition) -- zurück in Stellung vor Pulsing
- Korrektur = 0 -- Verhindern einer Über-Re-Korrektur
- else
- RodPosition = reactor.getControlRodLevel(Mitte)
- print(RodPosition)
- print("Geaendert auf:")
- RodPosition = RodPosition - Korrektur
- if RodPosition < 0.1 then RodPosition = 0.1 end
- if RodPosition > 99.9 then RodPosition = 99,9 end
- print(RodPosition)
- reactor.setControlRodLevel(Mitte, RodPosition)
- end
- -- sleep(Speed)
- rednet.open("top")
- MinOLD = MIN
- rednetA, MIN, rednetC = rednet.receive(Speed)
- if MIN == nil then
- MIN = MinOLD
- else
- -- MIN ist neu gesetzt
- end
- rednet.close("top")
- Temperature = reactor.getFuelTemperature()
- if Temperature > MIN then
- RodPosition = RodPosition + Korrektur
- print("Anstieg gebremst")
- print(RodPosition)
- reactor.setControlRodLevel(Mitte, RodPosition)
- Speed = Speed / 3
- end
- -- sleep(Speed)
- rednet.open("top")
- MinOLD = MIN
- rednetA, MIN, rednetC = rednet.receive(Speed)
- if MIN == nil then
- MIN = MinOLD
- else
- -- MIN ist neu gesetzt
- end
- rednet.close("top")
- else
- if Temperatur > MIN+BandBreite then
- print("Temperatur zu hoch")
- if Temperatur - (MIN+BandBreite) > 10 then
- ExtremCounterMAX = ExtremCounterMAX + 1
- if ExtremCounterMAX > 3 then
- Grundstellung = Grundstellung + 1
- ExtremCounterMAX = 0
- ExtremCounterMin = 0
- end
- reactor.setControlRodLevel(0, Grundstellung + boost) -- 1
- reactor.setControlRodLevel(1, Grundstellung + boost) -- 2
- reactor.setControlRodLevel(2, Grundstellung + boost) -- 3
- reactor.setControlRodLevel(3, Grundstellung + boost) -- 4
- reactor.setControlRodLevel(4, Grundstellung + boost) -- 5
- sleep(Speed)
- end
- RodPosition = reactor.getControlRodLevel(Mitte)
- print(RodPosition)
- print("Geaendert auf:")
- RodPosition = RodPosition - Korrektur
- if RodPosition < 0.1 then RodPosition = 0.1 end
- if RodPosition > 99.9 then RodPosition = 99,9 end
- print(RodPosition)
- reactor.setControlRodLevel(Mitte, RodPosition)
- -- sleep(Speed)
- rednet.open("top")
- MinOLD = MIN
- rednetA, MIN, rednetC = rednet.receive(Speed)
- if MIN == nil then
- MIN = MinOLD
- else
- -- MIN ist neu gesetzt
- end
- rednet.close("top")
- Temperature = reactor.getFuelTemperature()
- if Temperature < MIN+BandBreite then
- RodPosition = RodPosition + Korrektur
- print("Abfall gebremst")
- print(RodPosition)
- reactor.setControlRodLevel(Mitte, RodPosition)
- Speed = Speed / 3
- end
- -- sleep(Speed)
- rednet.open("top")
- MinOLD = MIN
- rednetA, MIN, rednetC = rednet.receive(Speed)
- if MIN == nil then
- MIN = MinOLD
- else
- -- MIN ist neu gesetzt
- end
- rednet.close("top")
- else
- print("Temperatur OK")
- end
- end
- -- ### Hier ENDET das eigentliche Programm
- -- sleep(Speed)
- rednet.open("top")
- MinOLD = MIN
- rednetA, MIN, rednetC = rednet.receive(Speed)
- if MIN == nil then
- MIN = MinOLD
- else
- -- MIN ist neu gesetzt
- end
- rednet.close("top")
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement