Posted 20 June 2014 - 07:14 AM
I just finished the program I am going to use to automate my Reactor and it runs great until I get the error "window:52:to long with out yielding"
I would like to know if there is a way I can get around this.
This the is function that I need to infinite loop.
Full Program
I would like to know if there is a way I can get around this.
This the is function that I need to infinite loop.
function startAutomation()
local continue = 1
reactor.setAllControlRodLevels(conRodLvl)
while continue==1 do
connected = tostring(reactor.getConnected())
numOfContRod = reactor.getNumberOfControlRods()
active = tostring(reactor.getActive())
powerStore = reactor.getEnergyStored()
fuelTemp = reactor.getFuelTemperature()
caseTemp = reactor.getCasingTemperature()
currentFuel = reactor.getFuelAmount()
amountWaste = reactor.getWasteAmount()
maxFuel = reactor.getFuelAmountMax()
energyProd = reactor.getEnergyProducedLastTick()
fuelReact = reactor.getFuelReactivity()
fuelUsed = reactor.getFuelConsumedLastTick()
rodLevel = reactor.getControlRodLevel(0)
print("The reactor is now managing itself")
print("---------------------------------------------------")
print("Connected? "..verCon.."|-----------------------|Active? "..verAct)
print("Number of Control rods in reactor? "..numOfContRod)
print("Fuel in reactor: "..currentFuel.."/"..maxFuel)
print("Fuel Temp: "..fuelTemp.."|---|Casing Temp: "..caseTemp)
print("Fuel use per Tick: "..fuelUsed)
print("Energy p/tic: "..energyProd.."|-|Power Stored: "..powerStore)
print("Fuel reactivity: "..fuelReact.."|-|Control Rod Level: "..rodLevel)
if caseTemp>maxCaseTemp then
continue = 2
redstone.setOutput("left", true)
else
if fuelTemp>maxFuelTemp then
continue = 2
redstone.setOutput("back", true)
else
if powerStore<minPower then
rodLevel = rodLevel - 1
reactor.setAllControlRodLevels(rodLevel)
sleep(5)
elseif powerStore>maxPower then
rodLevel = rodLevel + 1
reactor.setAllControlRodLevels(rodLevel)
else
sleep(1)
end
end
end
os.eventQueue("char","p")
end
end
Full Program
reactor = peripheral.wrap("right")
-- Standard Reactor Vars
connected = reactor.getConnected()
numOfContRod = reactor.getNumberOfControlRods()
active = reactor.getActive()
powerStore = reactor.getEnergyStored()
fuelTemp = reactor.getFuelTemperature()
caseTemp = reactor.getCasingTemperature()
currentFuel = reactor.getFuelAmount()
amountWaste = reactor.getWasteAmount()
maxFuel = reactor.getFuelAmountMax()
energyProd = reactor.getEnergyProducedLastTick()
fuelReact = reactor.getFuelReactivity()
fuelUsed = reactor.getFuelConsumedLastTick()
rodLevel = reactor.getControlRodLevel(0)
--Vars used in automation
conRodLvl = 100
maxPower = 7500000
minPower = 5000000
maxCaseTemp = 700
maxFuelTemp = 2500
-- Coolant Vars
--reactor.getHotFluidProducedLastTick
--reactor.getCoolantType
--reactor.getCoolantAmount
--reactor.getHotFluidType
--reactor.getHotFluidAmount
--reactor.isActivelyCooled
function basicInfo() -- reports the basic information for the reactor
local selectValue = 0 -- local var for while test
while selectValue==0 do
connected = tostring(reactor.getConnected())
numOfContRod = reactor.getNumberOfControlRods()
active = tostring(reactor.getActive())
powerStore = reactor.getEnergyStored()
fuelTemp = reactor.getFuelTemperature()
caseTemp = reactor.getCasingTemperature()
currentFuel = reactor.getFuelAmount()
amountWaste = reactor.getWasteAmount()
maxFuel = reactor.getFuelAmountMax()
energyProd = reactor.getEnergyProducedLastTick()
fuelReact = reactor.getFuelReactivity()
fuelUsed = reactor.getFuelConsumedLastTick()
rodLevel = reactor.getControlRodLevel(0)
term.clear()
print("You have selected to view the basic information.")
print("Please wait...")
print("OK!!")
print("----------------------------------------------")
if connected=="false" then -- check if reactor is connected for menu
verCon = "are not"
else
verCon = "are"
end
print("You "..verCon.." connected to the reactor.")
if active==nil then -- check if reactor is active for menu
verAct = "is not"
else
verAct = "is"
end
print("The reactor "..verAct.." running")
print("Number of control rods: "..numOfContRod)
print("Amount of power stored: "..powerStore)
print("Current temp of fuel in the reactor: "..fuelTemp)
print("Current casing temp: "..caseTemp)
print("Current amount of fuel(Current/Max): "..currentFuel.."/"..maxFuel)
print("type 'return' to be brought back to the main menu")
print("type 'refresh' to update the values above")
local input = read()
if input == "return" then -- check if to refresh values or to go back to main menu
selectValue = selectValue + 1
elseif input == "refresh" then
basicInfo()
else
print("Please enter the a valid option!")
end
end
end
function manualAdjust()
print("you have reached Manual Adjustments.")
print("There is currently no function for this option.")
print("You will be returned to the main menu")
sleep(5)
end
function advInfo()
print("you have reached Advanced Information.")
print("There is currently no function for this option.")
print("You will be returned to the main menu")
sleep(5)
end
function setAutoValue()
local selectValue = 1
term.clear()
print("You have selected to configure the limits for reactor automation.")
print("Please wait while we pull the current config.")
print("Loading config...")
sleep(3)
print("Ready!!")
while selectValue==1 do
print("Below you will see the current values:")
print("To change value enter the number at the start of the selection.")
print("1: Starting control rod level is: "..conRodLvl)
print("2: Maximum power stored: "..maxPower)
print("3: Minimum power stored: "..minPower)
print("4: Maximum casing temp: "..maxCaseTemp)
print("5: Maximum fuel temp: "..maxFuelTemp)
print("6: Return to main menu.")
local input = tonumber(read())
if input==1 then
term.clear()
print("Starting level is currently: "..conRodLvl)
print("What is the new level? ")
local newCLvl = tonumber(read())
conRodLvl = newCLvl
print("New starting level set to: "..conRodLvl)
print("Saving..")
sleep(1)
term.clear()
elseif input==2 then
term.clear()
print("The current maximum reserve power is set to: "..maxPower)
print("What is the new maximum? ("..minPower.."-10000000)")
local newPLvl = tonumber(read())
maxPower = newPLvl
print("New maximum power reserve: "..maxPower)
print("Saving..")
sleep(1)
term.clear()
elseif input==3 then
term.clear()
print("The current minimum reserve power is set to: "..minPower)
print("What is the new minimum? (0-"..maxPower..")")
local newPLvl = tonumber(read())
minPower = newPLvl
print("New minimum power reserve: "..minPower)
print("Saving..")
sleep(1)
term.clear()
elseif input==4 then
term.clear()
print("The current maximum temp the casing can")
print("reach before the reactor stops: "..maxCaseTemp)
print("what is the new maximum casing temp?")
local newCTemp = tonumber(read())
maxCaseTemp = newCTemp
print("New maximum casing temp is: "..maxCaseTemp)
print("Saving..")
sleep(1)
term.clear()
elseif input==5 then
term.clear()
print("The current maximum temp the fuel can")
print("reach before the reactor stops: "..maxFuelTemp)
print("what is the new maximum casing temp?")
local newCTemp = tonumber(read())
maxFuelTemp = newCTemp
print("New maximum fuel temp is: "..maxFuelTemp)
print("Saving..")
sleep(1)
term.clear()
elseif input==6 then
print("returning..")
sleep(1)
term.clear()
selectValue = 2
else
term.clear()
print("Please enter the a valid option!")
end
end
end
function startAutomation()
local continue = 1
reactor.setAllControlRodLevels(conRodLvl)
while continue==1 do
connected = tostring(reactor.getConnected())
numOfContRod = reactor.getNumberOfControlRods()
active = tostring(reactor.getActive())
powerStore = reactor.getEnergyStored()
fuelTemp = reactor.getFuelTemperature()
caseTemp = reactor.getCasingTemperature()
currentFuel = reactor.getFuelAmount()
amountWaste = reactor.getWasteAmount()
maxFuel = reactor.getFuelAmountMax()
energyProd = reactor.getEnergyProducedLastTick()
fuelReact = reactor.getFuelReactivity()
fuelUsed = reactor.getFuelConsumedLastTick()
rodLevel = reactor.getControlRodLevel(0)
print("The reactor is now managing itself")
print("---------------------------------------------------")
print("Connected? "..verCon.."|-----------------------|Active? "..verAct)
print("Number of Control rods in reactor? "..numOfContRod)
print("Fuel in reactor: "..currentFuel.."/"..maxFuel)
print("Fuel Temp: "..fuelTemp.."|---|Casing Temp: "..caseTemp)
print("Fuel use per Tick: "..fuelUsed)
print("Energy p/tic: "..energyProd.."|-|Power Stored: "..powerStore)
print("Fuel reactivity: "..fuelReact.."|-|Control Rod Level: "..rodLevel)
if caseTemp>maxCaseTemp then
continue = 2
redstone.setOutput("left", true)
else
if fuelTemp>maxFuelTemp then
continue = 2
redstone.setOutput("back", true)
else
if powerStore<minPower then
rodLevel = rodLevel - 1
reactor.setAllControlRodLevels(rodLevel)
sleep(5)
elseif powerStore>maxPower then
rodLevel = rodLevel + 1
reactor.setAllControlRodLevels(rodLevel)
else
sleep(1)
end
end
end
os.eventQueue("char","p")
end
end
function mainReactor() -- core function for the program
local selectValue = 0 -- local var for while test
while selectValue==0 do -- While to make sure proper selection is made
print("Reactor Automation and Control")
print("By SimAssassin")
print("v1.0.1")
print("Welcome to my reactor automation and control software!")
print("Please select one of the below options by entering the number")
print("---------------------------------------------------")
print("1: Basic Information - Temp/Fuel/Stored Power/Produced Power")
print("-: Manual Adjustment")
print("-: Advanced Information - Coolant Level/Type/Used")
print("4: Set Automation values")
print("5: Start Automation")
print("6: Exit program")
local input = tonumber(read())
if input==1 then -- Selection Menu if statement
basicInfo()
term.clear()
elseif input==2 then
manualAdjust()
term.clear()
elseif input==3 then
advInfo()
term.clear()
elseif input==4 then
setAutoValue()
term.clear()
elseif input==5 then
startAutomation()
term.clear()
elseif input==6 then
print("Goodbye and thank you for using my software")
selectValue = selectValue + 1
else
term.clear()
print("Please enter the a valid option!")
end
end
end
mainReactor()