serafim7

reactor IC2 1.7.10 mfsu control [OpenComputers]

Jan 19th, 2020 (edited)
240
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[opencomputers reactor IC2 mfsu control by serafim
  2.     pastebin.com/Cd8yFFSw             update 10.04.21
  3.  
  4. управление реактором IC2(1.7.10) поддерживая
  5. заряд в энергохранилище на уровне 97-100 %
  6.  
  7. требования:
  8. компьютер 1-го уровня,
  9. адаптер, контроллер красного камня,
  10. реактор IC2, любая батарея IC2.
  11.  
  12. пример сборки:
  13. https://i.imgur.com/xc8hrvH.png
  14. ]]--
  15.  
  16. local heat = 130 --температура перегрева реактора до отключения
  17.  
  18. local batlist = {
  19.   "batbox",
  20.   "cesu",
  21.   "mfe",
  22.   "mfsu",
  23.   "chargepad_batbox",
  24.   "chargepad_cesu",
  25.   "chargepad_mfe",
  26.   "chargepad_mfsu"
  27. }
  28.  
  29. local com = require("component")
  30. local computer = require("computer")
  31. local event = require("event")
  32. local gpu = com.gpu
  33. local w, h = gpu.getResolution()
  34. local noFuel,sideRed,run,bat = 0,nil,true
  35.  
  36. if not com.isAvailable("redstone") then
  37.   print("нет контроллера красного камня")
  38.   os.exit()
  39. end
  40. local red = com.redstone
  41.  
  42. if com.isAvailable("reactor") then
  43.   reactor = com.reactor
  44. elseif com.isAvailable("reactor_chamber") then
  45.   reactor = com.reactor_chamber
  46. else
  47.   print("реактор не найден")
  48.   os.exit()
  49. end
  50.  
  51. if reactor.getHeat() > heat then
  52.   print("перегрев реактора")
  53.   os.exit()
  54. end
  55.  
  56. if reactor.producesEnergy() then
  57.   print("остановите реактор !")
  58.   for i = 0,5 do
  59.     if red.getOutput(i) > 0 then
  60.       red.setOutput(i, 0)
  61.     end
  62.   end
  63.   os.exit()
  64. end
  65.  
  66. if reactor.getHeat() > heat then
  67.   print("перегрев реактора")
  68.   os.exit()
  69. end
  70.  
  71. for j, name in pairs(batlist) do
  72.   local adress = com.list(name)()
  73.   if adress then
  74.     bat = com.proxy(adress)
  75.     print("подключен "..name:gsub('%g+:',''))
  76.     break
  77.   end
  78.   if j == #batlist then
  79.     print("батарея не найдена")
  80.     os.exit()
  81.   end
  82. end
  83. local capacity = math.floor(bat.getCapacity())
  84.  
  85. print("пробный запуск")
  86. for i, n in pairs({3,2,4,5,0,1}) do
  87.   red.setOutput(n, 15)
  88.   if reactor.producesEnergy() then
  89.     sideRed = n
  90.     red.setOutput(sideRed, 0)
  91.     print("реактор в стороне "..sideRed)
  92.     os.sleep(1)
  93.     break
  94.   else
  95.     red.setOutput(n, 0)
  96.   end
  97.   if i == 6 then
  98.     print("\n".."реактор не запускается")
  99.     os.exit()
  100.   end
  101. end
  102.  
  103. gpu.setResolution(18,6)
  104. gpu.setBackground(0x000000)
  105. gpu.fill(1,1,18,6," ")
  106. gpu.set(1,1,"всего   "..capacity)
  107. gpu.set(1,2,"энергии")
  108. gpu.set(1,3,"хранит")
  109. gpu.set(1,4,"eu/t")
  110. gpu.set(1,5,"нагрев")
  111. gpu.set(1,6,"реактор остановлен")
  112.  
  113. local function stop(wait)
  114.   if event.pull(wait,"key_down") then
  115.     red.setOutput(sideRed, 0)
  116.     gpu.setResolution(w,h)
  117.     gpu.fill(1,1,w,h," ")
  118.     print("программа завершена")
  119.     os.sleep(1)
  120.     if reactor.producesEnergy() then
  121.       print("ВНИМАНИЕ реактор по прежнему активен !!!")
  122.       computer.beep(500, 1)
  123.     else
  124.       print("реактор остановлен")
  125.     end
  126.     run = false
  127.   end
  128. end
  129.  
  130. local function ReactorControl()
  131.   local energy = math.floor(bat.getStored())
  132.   local percent = math.floor(energy/capacity*100)
  133.   local reactorHeat = math.floor(reactor.getHeat())
  134.   gpu.set(9,2,energy.."  ")
  135.   gpu.set(9,3,percent.." % ")
  136.   gpu.set(9,4,math.floor(reactor.getReactorEUOutput()).."  ")
  137.   if reactorHeat > heat then
  138.     red.setOutput(sideRed, 0)
  139.     gpu.set(1,6,"перегрев реактора")
  140.     computer.beep(500, 1)
  141.     stop(3)
  142.   else
  143.     gpu.set(9,5,reactorHeat.."  ")
  144.     if percent < 98 then
  145.       red.setOutput(sideRed, 15)
  146.       if not reactor.producesEnergy() then
  147.         gpu.set(1,6,"нет запуска реактора")
  148.       elseif reactor.getReactorEUOutput() == 0 then
  149.         noFuel = noFuel + 1
  150.       else
  151.         noFuel = 0
  152.       end
  153.       if noFuel >= 3 then
  154.         gpu.set(1,6,"нет топлива !     ")
  155.         computer.beep(500, 1)
  156.         stop(3)
  157.       else
  158.         gpu.set(1,6,"реактор активен   ")
  159.       end
  160.     elseif percent >= 100 then
  161.       red.setOutput(sideRed, 0)
  162.       gpu.set(1,6,"реактор остановлен")
  163.     end
  164.   end
  165. end
  166.  
  167. while run do
  168.   local ok,err = pcall(ReactorControl)
  169.   if not ok then
  170.     red.setOutput(sideRed, 0)
  171.     gpu.setResolution(w, h)
  172.     gpu.setBackground(0x000000)
  173.     gpu.setForeground(0xFFFFFF)
  174.     os.execute("cls")
  175.     print("программа аварийно завершена")
  176.     io.stderr:write(err)
  177.     run = false
  178.   end
  179.   stop(1)
  180. end
RAW Paste Data