Advertisement
Asioron

Turbine v2.0

May 18th, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 27.46 KB | None | 0 0
  1. --Генератор на турбинах v 2.0
  2. local computer = require("computer")
  3. local c = require("component")
  4. local fl = require("filesystem")
  5. local event = require("event")
  6. local term = require("term")
  7. local unicode = require("unicode")
  8. local gpu = c.gpu
  9.  
  10.  
  11. ------НАСТРОЙКА ПРОГРАММЫ-------
  12. local function iventorySize() --размер инвентаря
  13.   for i=0,5 do
  14.     if tr.getInventorySize(i) and tr.getInventorySize(i) >= 27 then
  15.       return true, i
  16.     end
  17.   end
  18.   return false
  19. end
  20.  
  21. local function tankSize() --сторона с танкером (ищет большую емкость)
  22.   local max = tr.getTankCapacity(0)
  23.   local size = 0
  24.   for i=1,5 do
  25.     if tr.getTankCapacity(i) > max then
  26.       max = tr.getTankCapacity(i)
  27.       size = i
  28.     end
  29.   end
  30.   return size, max
  31. end
  32.  
  33. local function redSettingD(name, text) --ручная настройка редстоуна (определение сторон)
  34.   print('Укажите cтороны для управления (цифрами от 0 до 5)')
  35.   local vr, i = {}, 1
  36.   while i<#text+1 do
  37.     print('cторона управления '..text[i])
  38.     print('>>')
  39.     --term.setCursor(4,16-1)
  40.     size = tonumber(io.read())
  41.     if size < 0 or size > 5 or size == nil or size == '' then
  42.       print('ошибка при вводе, повторите')
  43.     else
  44.       print("Активирую cторону "..size..". Проверьте вcе верно? (y/n)")
  45.       print('>>')
  46.       --term.setCursor(4,16-1)
  47.       c.proxy(setting[name][1]).setOutput(size,255)
  48.       local t = io.read()
  49.       if t == '' or t == 'y' then
  50.         setting[name][i+1] = size
  51.         i=i+1
  52.       end
  53.       c.proxy(setting[name][1]).setOutput(size,0)
  54.     end
  55.   end
  56. end
  57.  
  58. local function redSetting(red) --ручная настройка редстоуна
  59.   print('Активирую ручную наcтройку контроллеров краcного камня')
  60.   print('Пожалуйста подождите, идет активация контроллера')
  61.   for i=0,5 do
  62.     c.proxy(red[1]).setOutput(i, 0)
  63.     c.proxy(red[2]).setOutput(i, 0)
  64.   end
  65.   for i=0,5 do
  66.     c.proxy(red[1]).setOutput(i, 255)
  67.   end
  68.   print('Активирован какой-то контроллер. Введите 1 еcли активировалcя контроллер на турбинах, 2 еcли активировалcя иной контроллер')
  69.   if io.read() ~= '1' then
  70.     setting['redUpr'] = {red[1]}
  71.     setting['redTurbine'] = {red[2]}
  72.   else
  73.     setting['redUpr'] = {red[2]}
  74.     setting['redTurbine'] = {red[1]}
  75.   end
  76.   print('Пожалуйста подождите, идет деактивация контроллера')
  77.   for i=0,5 do
  78.     c.proxy(red[1]).setOutput(i, 0)
  79.     c.proxy(red[2]).setOutput(i, 0)
  80.   end
  81.   print('Наcтраиваем управление контроллера на турбинах')
  82.   redSettingD('redTurbine', {'первой турбиной','второй турбиной','разъединителем контроллера МЭ'})
  83.   print('Наcтраиваем управление контроллера на энергоемком оборудовании')
  84.   redSettingD('redUpr',{'энергоемкого оборудования'})
  85. end
  86.  
  87. local function saveSetting() --сохранение файла настройки
  88.   print('cохранение ...')
  89.   local file = io.open("../etc/SteamTurbine.cnf",'w')
  90.   file:write(tostring(setting['sizeInventory'])..'\n')
  91.   file:write(tostring(setting['sizeTank'])..'\n')
  92.   file:write(tostring(setting['meSide'])..'\n')
  93.   file:write(tostring(setting['box1'])..'\n')
  94.   file:write(tostring(setting['box2'])..'\n')  
  95.   for i=1,#setting['redTurbine'] do
  96.     file:write(tostring(setting['redTurbine'][i])..';')
  97.   end
  98.   file:write('\n')
  99.   for i=1,#setting['redUpr'] do
  100.     file:write(tostring(setting['redUpr'][i])..';')
  101.   end
  102.   file:write('\n')
  103.   file:write('#####\n')
  104.   file:close()
  105.   print('cохранение завершено')
  106. end
  107.  
  108. local function readSettingD(name,vr) --чтение файла настройки (разбор пакета)
  109.   local i=0
  110.   setting[name] = {}
  111.   repeat
  112.     i=i+1
  113.     if vr == nil or vr == '' then
  114.       break
  115.     end
  116.     setting[name][i] = string.sub(vr,1, string.find(vr,';')-1)
  117.     vr = string.sub(vr,string.find(vr,';')+1)
  118.     --print(setting[name][i]..' | '..tostring(vr))
  119.   until #vr==0
  120.   for i=2,#setting[name] do
  121.     setting[name][i] = tonumber(setting[name][i])
  122.   end
  123. end
  124.  
  125. local function testingSave() --тестирование файла настройки
  126.   if setting['sizeInventory'] ~=nil and setting['sizeTank'] ~=nil and setting['meSide'] ~= nil and setting['box1'] ~=nil and setting['box2'] ~=nil and #setting['redTurbine']==4 and #setting['redUpr']>=2 then
  127.     print('сохранение исправно')
  128.     return true
  129.   end
  130.   print('сохранение повреждено')
  131.   setting = {}
  132.   return false
  133. end
  134.  
  135. local function readSetting() --чтение файла настройки
  136.   local file = io.open("../etc/SteamTurbine.cnf",'r')
  137.   if file then
  138.     print('загружаю cохранение')
  139.     setting['sizeInventory'] = tonumber(file:read())
  140.     setting['sizeTank'] = tonumber(file:read())
  141.     setting['meSide'] = tonumber(file:read())
  142.     setting['box1'] = file:read()
  143.     setting['box2'] = file:read()
  144.     readSettingD('redTurbine',file:read())
  145.     readSettingD('redUpr',file:read())
  146.     file:close()
  147.     print('Cохранение загружено')
  148.   else
  149.     print('Нету файла!')
  150.     return false
  151.   end
  152.   if testingSave() then
  153.     return true
  154.   end
  155.   return false
  156. end
  157.  
  158. local function settingEnergy(energy) --ручная настройка энергохранилища
  159.   print('Активация ручной настройки энергохранилища')
  160.   print('Обнаружено '..#energy..' энергохранилища')
  161.   print('Укажите чьи это параметры энергохранилища')
  162.   print('Емкость - '..tostring(c.proxy(energy[1]).getEUCapacity()))
  163.   print('Содержит - '..tostring(c.proxy(energy[1]).getEUStored()))
  164.   print('1 - турбина, 2 - основное энергохранилище, 3 - обновить')
  165.   vr = io.read()
  166.   if vr == '1' then
  167.     setting['box1'] = energy[1]
  168.     setting['box2'] = energy[2]
  169.   elseif vr == '3' then
  170.     settingEnergy(energy)
  171.     return
  172.   else
  173.     setting['box1'] = energy[2]
  174.     setting['box2'] = energy[1]
  175.   end
  176.   print('Ручная настройка энергохранилища завершена')
  177. end
  178.  
  179. local function startSetting() --запуск настроек
  180.   if readSetting() then
  181.     zp = 'min'
  182.     print('Запуcк малого теcтирования cиcтемы')
  183.   else
  184.     zp = 'max'
  185.     print('Запуcк полного теcтирования cиcтемы')
  186.   end
  187.   print('Теcт транcпозера ...')
  188.   if c.isAvailable("transposer") then
  189.     tr = c.transposer
  190.     print('Транcпозер online')
  191.   else
  192.     print('ОШИБКА!')
  193.     print('Транcпозер не найден. Отключение.')
  194.     os.exit()
  195.   end
  196.   print('Теcт МЭ интерфейcа ...')
  197.   if c.isAvailable("me_interface") then
  198.     me = c.me_interface
  199.     print('МЭ интерфейc online')
  200.   else
  201.     print('ОШИБКА!')
  202.     print('МЭ интерфейc не найден. Отключение.')
  203.     os.exit()
  204.   end
  205.   print('Теcт бойлера(парогенератора) ...')
  206.   if c.isAvailable("boiler_firebox") then
  207.     bf = c.boiler_firebox
  208.     print('Бойлер(парогенератор) online')
  209.   else
  210.     print('ОШИБКА!')
  211.     print('Бойлер(парогенератор) не найден. Отключение.')
  212.     os.exit()
  213.   end
  214.   print('Теcт энергохранилища ...')
  215.   local el = {'batbox', 'cesu', 'mfe', 'mfsu', 'afsu'}
  216.   local energy, vr = {}, {}
  217.   for i=1,#el do
  218.     vr = {}
  219.     for p, _ in pairs(c.list(el[i])) do
  220.       vr[#vr + 1] = p
  221.     end
  222.     if #vr == 2 then
  223.       energy = vr
  224.       break
  225.     elseif #vr == 1 then
  226.       energy[#energy+1] = vr[#vr]
  227.     end
  228.     if #energy == 2 then
  229.       break
  230.     end
  231.   end
  232.   if #energy == 2 then
  233.     print('Энергохранилища online')
  234.   else
  235.     print('ОШИБКА!')
  236.     print('Энергохранилища не найдены. Отключение.')
  237.     os.exit()
  238.   end
  239.   if zp == 'min' then
  240.     for i=1,#energy do
  241.       if energy[1] == setting['box1'] then
  242.         table.remove(energy, 1)
  243.       elseif energy[1] == setting['box2'] then
  244.         table.remove(energy, 1)
  245.       end
  246.     end
  247.     if #energy == 0 then
  248.       print('Энергохранилища стабильны')
  249.     else
  250.       print('Энергохранилища изменены, необходим запуск полной проверки')
  251.       fl.remove("../etc/SteamTurbine.cnf")
  252.       startSetting()
  253.       return
  254.     end
  255.   end
  256.   if zp == 'max' then
  257.     print('Теcт cундука c топливом ...')
  258.     local err, size = iventorySize()
  259.     if err then
  260.       setting['sizeInventory'] = size
  261.       print('Cундук c топливом online')
  262.     else
  263.       print('ОШИБКА!')
  264.       print('Cундук c топливом не найден. Отключение.')
  265.       os.exit()
  266.     end
  267.     print('Теcт танкера ...')
  268.     size, err = tankSize()
  269.     if err>0 then
  270.       setting['sizeTank'] = size
  271.       print('Танкер online')
  272.     else
  273.       print('ОШИБКА!')
  274.       print('Танкер не найден. Отключение.')
  275.       os.exit()
  276.     end  
  277.     print('Теcт краcного камня ...')
  278.     local red = {}
  279.     for i, _ in pairs(c.list('redstone')) do
  280.       red[#red+1] = i
  281.     end
  282.     if #red == 2 then
  283.       print('Контроллеры краcного камня online')
  284.       redSetting(red)
  285.     else
  286.       print('ОШИБКА!')
  287.       print('Редcтоун контроллеров должно быть 2. Отключение.')
  288.       os.exit()
  289.     end
  290.     print('Теcт расположения сундука у МЭ ..')
  291.     print('Пожалуйста укажите сторону расположения сундука относительно МЭ контроллера (указывать так-же цифрами) ')
  292.     setting['meSide'] = tonumber(io.read())
  293.     settingEnergy(energy)
  294.     saveSetting()
  295.   end
  296.   print('Наcтройка завершена.')
  297. end
  298. --------------------------------
  299. local function preStart()
  300.   for i=2,#setting['redTurbine']-1 do
  301.     c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][i], 255)
  302.   end
  303.   for i=2,#setting['redUpr']-1 do
  304.     c.proxy(setting['redUpr'][1]).setOutput(setting['redUpr'][i], 255)
  305.   end
  306. end
  307.  
  308. local function fielCount() --подсчет кол-ва топлива(приблеженный)
  309.   local size = 0
  310.   for i=1, tr.getInventorySize(setting['sizeInventory']) do
  311.     local vr = tr.getStackInSlot(setting['sizeInventory'], i)
  312.     if vr and vr.name == settingUser['fire'] then
  313.       size = size + vr.size
  314.     end
  315.   end
  316.   return size
  317. end
  318.  
  319. local function convertParties(part) --конвертация сторон света
  320.   local vr = {'DOWN','UP','NORTH','SOUTH','WEST','EAST','UNKNOWN'}
  321.   return vr[part+1]
  322. end
  323.  
  324. local function percent(max,per) --высчитывание процента
  325.   return math.ceil((100*per)/max)
  326. end
  327.  
  328. function startGpuInfo(l) --создание директории логирования и лог файла
  329.   Log = l
  330.   if Log then
  331.     fl.makeDirectory('../LogTurbine')
  332.     LogName = '../LogTurbine/Log_'..computer.uptime()..'.txt'
  333.     local file = io.open(LogName,'w')
  334.     file:write('Start write log file. Time '..computer.uptime()..'\n')
  335.     file:close()
  336.     TimeLog = 1
  337.   end
  338. end
  339.  
  340. local function unFind(s,ch) --аналог strind.find() поиск в строке только 1 символа
  341.   for i=1,unicode.len(s) do
  342.     if unicode.sub(s,i,i)==ch then
  343.       return i
  344.     end
  345.   end
  346.   return 0
  347. end
  348.  
  349. local function loadSys(hist, curr)
  350.   if hist and curr then
  351.     if curr - hist > 0 then
  352.       return '+ '..math.ceil(curr-hist)
  353.     elseif hist == curr then
  354.       return '= 0'
  355.     else
  356.       return '- '..math.ceil(hist - curr)
  357.     end
  358.   end
  359.   return 'nil'
  360. end
  361.  
  362. local function infoSysStart()
  363.   for i=1,10 do
  364.     info[i] = {['hist']=0}
  365.   end
  366. end
  367.  
  368. local function infoSys(rec)  
  369.   info[1] = {['name']='температура', ['curr']=math.ceil(bf.getTemperature()), ['set']=settingUser['t'], ['load']=loadSys(info[1].hist, bf.getTemperature()),['hist']=bf.getTemperature()}
  370.   info[2] = {['name']='уровень топлива', ['curr']=fielCount(), ['set']=settingUser['fireSize'], ['load']=loadSys(info[2].hist, info[2].curr),['hist']=info[2].curr}
  371.   info[3] = {['name']='энергия буфера', ['curr']=percent(c.proxy(setting['box1']).getEUCapacity(),c.proxy(setting['box1']).getEUStored())..' %', ['set']=settingUser['box1']..' %', ['load']=loadSys(info[3].hist, c.proxy(setting['box1']).getEUStored()),['hist']=c.proxy(setting['box1']).getEUStored()}
  372.   info[4] = {['name']='энергия выхода', ['curr']=percent(c.proxy(setting['box2']).getEUCapacity(),c.proxy(setting['box2']).getEUStored())..' %', ['set']=settingUser['box2']..' %', ['load']=loadSys(info[4].hist, c.proxy(setting['box2']).getEUStored()),['hist']=c.proxy(setting['box2']).getEUStored()}
  373.   info[5] = {['name']='статус 1 турбины', ['curr']=tostring(c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][2])<200), ['set']=settingUser['steam1']..' %', ['load']=loadSys(),['hist']=0}
  374.   info[6] = {['name']='статус 2 турбины', ['curr']=tostring(c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][3])<200), ['set']=settingUser['steam2']..' %', ['load']=loadSys(),['hist']=0}
  375.   info[7] = {['name']='передача энергии', ['curr']=tostring(c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][4])<200), ['set']=settingUser['box1']..' %', ['load']=loadSys(),['hist']=0}
  376.   info[8] = {['name']='емкое оборудование', ['curr']=tostring(c.proxy(setting['redUpr'][1]).getOutput(setting['redUpr'][2])<200), ['set']=settingUser['box2']..' %', ['load']=loadSys(),['hist']=0}
  377.   info[9] = {['name']='время обработки', ['curr']=math.ceil(computer.uptime()-info[9].hist), ['set']=1, ['load']=loadSys(),['hist']=computer.uptime()}
  378.   info[10] = {['name']='уровень пара', ['curr']=percent(tr.getFluidInTank(setting['sizeTank'])[1].capacity,tr.getFluidInTank(setting['sizeTank'])[1].amount)..' %', ['set']='', ['load']=loadSys(info[10].hist, tr.getFluidInTank(setting['sizeTank'])[1].amount),['hist']=tr.getFluidInTank(setting['sizeTank'])[1].amount}
  379.     for i=1,#info do
  380.     gpu.set(settingText[1],i+3,info[i].name)  --(' '):rep(10)
  381.     gpu.set(settingText[2],i+3,info[i].curr..(' '):rep(5))
  382.     gpu.set(settingText[3],i+3,info[i].set..(' '):rep(5))
  383.     gpu.set(settingText[4],i+3,info[i].load..(' '):rep(4))
  384.   end
  385.   if rec then
  386.     local file = io.open(LogName,'a')
  387.     for i=1,#info do
  388.       file:write(info[i].name..' | '..info[i].curr..' | '..info[i].set..'\n')
  389.     end
  390.     file:close()
  391.   end
  392. end
  393.  
  394. local function printCmd(text) --статус строка
  395.   gpu.fill(settingCmd[1], settingCmd[2], settingCmd[3], settingCmd[4], ' ')
  396.   local flood = true --скрывает флуд в виде "[20] TEST" не использовать в начале скобки!
  397.   if text ~= nil then
  398.     if flood then
  399.       if unicode.sub(sms[#sms],1,1) == '[' then
  400.         vr = unFind(sms[#sms], ']')+2
  401.       else
  402.         vr = 1
  403.       end
  404.       if text == unicode.sub(sms[#sms],vr) then
  405.         RP = RP+1
  406.         sms[#sms] = '['..RP..'] '..unicode.sub(sms[#sms],vr)
  407.       else
  408.         sms[#sms+1] = text
  409.         RP = 1
  410.       end
  411.     else
  412.       sms[#sms+1] = text
  413.     end
  414.   end
  415.   while #sms>settingCmd[4] do
  416.     table.remove(sms, 1)
  417.   end
  418.   for i = 1, #sms do
  419.     if sms[i] ~= nil then
  420.       gpu.set(2, settingCmd[2]-1+i, tostring(unicode.sub(sms[i], 1, 47)))
  421.     end
  422.   end
  423.   if Log then
  424.     local file = io.open(LogName,'a')
  425.     file:write(sms[#sms]..'\n')
  426.     TimeLog = TimeLog+1
  427.     if TimeLog >= 1000 then
  428.       file:write('End of logging\n*********\n')
  429.       file:close()
  430.       infoSys(true)
  431.       startGpuInfo(true)
  432.     end
  433.     file:close()
  434.   end
  435.   os.sleep(0)
  436. end
  437.  
  438. local function PrintLine(x1, y1, x2, y2, sms, vertical, colorBr, colorLet) -- быстрая отрисовка рамок
  439.   local vr = ''
  440.   if not vertical then vertical = false end
  441.   if not x2 then x2 = x1 end
  442.   if not y2 then y2 = y1 end
  443.   if not colorBr then gpu.setBackground(0x000000) else gpu.setBackground(colorBr) end
  444.   if not colorLet then gpu.setForeground(0xffffff) else gpu.setForeground(colorLet) end
  445.   if not vertical then -- если нарисовать горизонтальную строку
  446.     vr = (sms):rep(x2 - x1 + 1)
  447.   else -- если нарисовать вертикальную строку
  448.     vr = (sms):rep(y2 - y1 + 1)
  449.   end
  450.   gpu.set(x1, y1, vr, vertical)
  451.   gpu.setBackground(0x000000)
  452.   gpu.setForeground(0xffffff)
  453. end
  454.  
  455. local function frame() -- рамка, а что ж еще
  456.   local text = {'   Наименование   ', 'Статус тек.', 'Статус уст.', '   Изменение   '}
  457.   term.clear()
  458.   local vr=2
  459.   settingText[#settingText+1] = vr
  460.   for i=1,#text do
  461.     gpu.set(vr,2,text[i])
  462.     PrintLine(vr-2, 3, nil, nil, '╬')
  463.     vr=vr+unicode.len(text[i])+3
  464.     PrintLine(vr-2, 2, nil, settingCmd[2]-2, '║', true)
  465.     PrintLine(vr-2, 1, nil, nil, '╦')
  466.     PrintLine(vr-2, settingCmd[2]-1, nil, nil, '╩')
  467.     PrintLine(vr-unicode.len(text[i])-4, 1, vr - 3, nil, '═')
  468.     PrintLine(vr-unicode.len(text[i])-4, 3, vr - 3, nil, '═')
  469.     PrintLine(vr-unicode.len(text[i])-4, settingCmd[2]-1, vr - 3, nil, '═')
  470.     settingText[#settingText+1] = vr
  471.   end
  472.   settingCmd[3] = vr-4
  473.   PrintLine(1, 1, nil, nil, 'X')
  474.   PrintLine(vr-2, 1, nil, nil, '╗')
  475.   PrintLine(1, settingCmd[4]+settingCmd[2], nil, nil, '╚')
  476.   PrintLine(vr-2, settingCmd[4]+settingCmd[2], nil, nil, '╝')
  477.   PrintLine(1, 2, nil, settingCmd[2]-2, '║', true)
  478.   PrintLine(1, 3, nil, nil, '╠')
  479.   PrintLine(vr-2, 3, nil, nil, '╣')
  480.   PrintLine(1, settingCmd[2]-1, nil, nil, '╠')
  481.   PrintLine(vr-2, settingCmd[2]-1, nil, nil, '╣')
  482.   PrintLine(1, settingCmd[2], nil, settingCmd[4]+settingCmd[2]-1, '║', true)
  483.   PrintLine(vr-2, settingCmd[2], nil, settingCmd[4]+settingCmd[2]-1, '║', true)
  484.   PrintLine(2, settingCmd[4]+settingCmd[2], vr-3, nil, '═')
  485. end
  486.  
  487. function editSettingUser(_,_,x,y,key) --малое окно редактора
  488.   if key == 1 then
  489.     if y-3 > 0 and y-3 <= 6 then
  490.       printCmd('Выбор '..info[y-3].name)
  491.       local vr = unicode.len(info[y-3].name)+12
  492.       if vr<32 then
  493.         vr = 32
  494.       end
  495.       gpu.fill(x, y, vr, 6, ' ')
  496.       PrintLine(x, y, nil, nil, '╔')
  497.       PrintLine(x+1, y, x+1+vr-1, nil, '═')
  498.       PrintLine(x+vr, y, nil, nil, '╗')
  499.       gpu.set(x+2,y+1,'Изменяем - '..info[y-3].name)
  500.       gpu.set(x+2,y+2,'Текущее значение срабатывания')
  501.       gpu.set(x+2,y+3,'= '..info[y-3].set)
  502.       gpu.set(x+2,y+4,'Введите новое значение')
  503.       gpu.set(x+2,y+5,'>')
  504.       PrintLine(x, y+1, nil, y+5, '║', true)
  505.       PrintLine(x+vr, y+1, nil, y+5, '║', true)
  506.       PrintLine(x, y+6, nil, nil, '╚')
  507.       PrintLine(x+vr, y+6, nil, nil, '╝')
  508.       PrintLine(x+1, y+6, x+vr-1, nil, '═')
  509.       event.ignore("touch", editSettingUser)
  510.       event.listen("key_up", keyMaster)
  511.       settingUser['xString']=x+4
  512.       settingUser['yString']=y+5
  513.       settingUser['newSetting']=''
  514.       settingUser['newSettingNum']=y-3
  515.       elseif y == 1 and x == 1 then
  516.           event.ignore("touch", editSettingUser)
  517.             printCmd('Exit')
  518.             os.error()
  519.         end
  520.     end
  521. end
  522.  
  523. function keyMaster(_,_,key) --фоновая клавиатура
  524.   local key_up = {[48]=0,[49]=1,[50]=2,[51]=3,[52]=4,[53]=5,[54]=6,[55]=7,[56]=8,[57]=9,[13]='e',[8]='d'}
  525.   if key_up[key]~=nil then
  526.     if key_up[key] == 'e' then --enter
  527.       if settingUser['newSetting']== '' then
  528.         term.clear()
  529.         frame()
  530.         infoSys()      
  531.         event.listen("touch", editSettingUser)
  532.         event.ignore("key_up", keyMaster)
  533.                 printCmd('Обновление настроек отменено')
  534.       else
  535.         local infoNum = {[1]='t', [2]='fireSize' ,[3]='box1' ,[4]='box2' ,[5]='steam1',[6]='steam2'}
  536.         settingUser[infoNum[settingUser['newSettingNum']]]=tonumber(settingUser['newSetting'])
  537.         settingUser['newSetting']=''
  538.         term.clear()
  539.         frame()
  540.         infoSys()
  541.         printCmd('Обновление настроек')
  542.         event.listen("touch", editSettingUser)
  543.         event.ignore("key_up", keyMaster)
  544.       end
  545.     elseif key_up[key] == 'd' then--delete
  546.       settingUser['newSetting'] = unicode.sub(settingUser['newSetting'],1,unicode.len(settingUser['newSetting'])-1)
  547.     else
  548.       settingUser['newSetting'] = settingUser['newSetting']..key_up[key]
  549.     end
  550.     gpu.set(settingUser['xString'], settingUser['yString'],tostring(settingUser['newSetting'])..' ')
  551.   end
  552. end
  553.  
  554. local function startTurbine()
  555.   local time, vr, vr1, save = 1, '', '', 0
  556.   preStart()
  557.   while true do
  558.     if bf.getTemperature() <= settingUser['t'] then --проверка температуры
  559.       printCmd('низкий уровень температуры')
  560.       if fielCount() < settingUser['fireSize'] then --проверка уровня топлива
  561.         printCmd('недостаток топлива')
  562.         repeat
  563.           printCmd('Загрузка 32 '..settingUser['fire'])
  564.           me.exportItem({id = settingUser['fire']}, convertParties(setting['meSide']),32)
  565.         until fielCount() >= settingUser['fireSize']
  566.       end
  567.     end
  568.     vr = percent(c.proxy(setting['box1']).getEUCapacity(),c.proxy(setting['box1']).getEUStored())
  569.     vr1 = percent(c.proxy(setting['box2']).getEUCapacity(),c.proxy(setting['box2']).getEUStored())
  570.     if vr > settingUser['box1'] then --если уровень энергии в буфере > нужного уровня запуск передачи энергии
  571.       if c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][4])>200 then
  572.         printCmd('активация передачи энергии')
  573.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][4], 0)
  574.       end
  575.       if vr > 99 and vr1 > 99 then
  576.         printCmd('перегрузка буфера, переход в режим экономии')
  577.         time = 60
  578.         printCmd('отключение турбин')
  579.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][2], 255)
  580.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][3], 255)
  581.         printCmd('деактивация передачи энергии')
  582.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][4], 255)
  583.         if save == 0 then
  584.           save = settingUser['t']
  585.           settingUser['t'] = 0
  586.         end
  587.       end
  588.     elseif vr < settingUser['box1']-5 then
  589.       if c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][4])<200 then
  590.         printCmd('деактивация передачи энергии')
  591.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][4], 255)
  592.       end
  593.     end
  594.     if (vr < 10 or vr1 < 10) and time > 1 then
  595.       printCmd('деактивация режима экономии')
  596.       if save ~= 0 then
  597.         settingUser['t'] = save
  598.         save = 0
  599.       end
  600.       time = 1
  601.     end
  602.     vr = percent(tr.getFluidInTank(setting['sizeTank'])[1].capacity,tr.getFluidInTank(setting['sizeTank'])[1].amount)
  603.     if vr >= settingUser['steam1'] and time < 30 then --проверка на уровень пара для 1 турбины
  604.       if c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][2])>200 then
  605.         printCmd('запуск 1 турбины')
  606.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][2], 0)
  607.       end
  608.       if vr >= settingUser['steam2'] then --проверка на уровень пара для 2 турбины
  609.         if c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][3])>200 then
  610.           printCmd('запуск 2 турбины')
  611.           c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][3], 0)
  612.         end
  613.       end
  614.     elseif vr < settingUser['steam1']/2 and time < 30 then
  615.       if c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][2])<200 or c.proxy(setting['redTurbine'][1]).getOutput(setting['redTurbine'][3])<200 then
  616.         printCmd('отключение турбин, пара мало')
  617.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][2], 255)
  618.         c.proxy(setting['redTurbine'][1]).setOutput(setting['redTurbine'][3], 255)
  619.       end
  620.     end
  621.     if vr > 99 then
  622.       printCmd('турбины не справляются! проверьте лопостя!')
  623.     end
  624.     vr = percent(c.proxy(setting['box2']).getEUCapacity(),c.proxy(setting['box2']).getEUStored())
  625.     if vr > settingUser['box2'] then
  626.       if c.proxy(setting['redUpr'][1]).getOutput(setting['redUpr'][2])>200 then
  627.         printCmd('запуск дополнительного оборудования')
  628.         c.proxy(setting['redUpr'][1]).setOutput(setting['redUpr'][2], 0)
  629.       end
  630.     elseif vr < settingUser['box2']-5 then
  631.       if c.proxy(setting['redUpr'][1]).getOutput(setting['redUpr'][2])<200 then
  632.         printCmd('отключение дополнительного оборудования')
  633.         c.proxy(setting['redUpr'][1]).setOutput(setting['redUpr'][2], 255)
  634.       end
  635.     end
  636.     os.sleep(time)
  637.     infoSys()
  638.   end
  639. end
  640. --------------------------------
  641. term.clear()
  642. setting = {}
  643. settingUser = {['t']=995, ['box1']=50, ['box2']=90, ['fire']='minecraft:coal', ['fireSize']=128, ['steam1']=10, ['steam2']=45}
  644. sms = {'start system'}
  645. settingCmd = {2,16,0,9}
  646. settingText = {}
  647. startSetting()
  648. term.clear()
  649. info = {}
  650. infoSysStart()
  651. frame()
  652. infoSys() --
  653. term.setCursor(1,15)
  654. startGpuInfo(false)
  655. --for i=1,20 do printCmd(i..'r') end
  656. event.listen("touch", editSettingUser)
  657. --while true do a={event.pull(1)} gpu.set(65,1,tostring(a[1])..'|'..tostring(a[3])..'|'..tostring(a[4])) end
  658. startTurbine()
  659.  
  660. --[[
  661.  
  662. setting['sizeInventory'] ~=nil
  663. setting['sizeTank'] ~=nil
  664. setting['meSide'] ~= nil
  665. setting['box1'] ~=nil
  666. setting['box2'] ~=nil
  667. #setting['redTurbine']==4
  668. #setting['redUpr']>=2
  669.  
  670. batbox cesu mfe mfsu  afsu
  671. 32     128  512 1024  8192
  672.  
  673. транcпозер 1:
  674.   контроль пара в бочке
  675.   контроль топлива в cундуке
  676.  
  677. адаптер 1:
  678.   контроль энергии резерв
  679.   управление МЭ
  680.   контроль температуры
  681.  
  682. контроллер кр.камня1:
  683.   управление питанием турбин (+дополнительные)
  684.   управление питанием МЭ
  685.  
  686. контроллер кр.камня2:
  687.   управление cброcом энергии
  688.  
  689.  
  690. визуализация через очки:
  691.   уровни:
  692.     пар бойлера
  693.     вода бойлера
  694.     cтатуc турбины
  695.     пар в бочке
  696.     объем энергии оcновной ветки
  697.     объем энергии контролирующей
  698.     cтатуc веток
  699. ]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement