Advertisement
Santi872

Untitled

May 29th, 2015
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.12 KB | None | 0 0
  1. local component = require("component")
  2. local term = require("term")
  3. local event = require("event")
  4. local computer = require("computer")
  5.  
  6. local comp = {}
  7.  
  8. local tempBool1 = false
  9. local tempBool2 = false
  10.  
  11. --component.modem.open(123)
  12. --tarRPM = 895.3
  13.  
  14. function round(num, idp)
  15.   local mult = 10^(idp or 0)
  16.   return math.floor(num * mult + 0.5) / mult
  17. end
  18.  
  19. function tableLength(h)
  20.   local a = 0
  21.   for _ in pairs(h) do a = a+1 end
  22.   return a
  23. end
  24.  
  25. b = {}
  26. slot = 1
  27.  
  28. function comp.round(num, idp)
  29.   local mult = 10^(idp or 0)
  30.   return math.floor(num * mult + 0.5) / mult
  31. end
  32.  
  33. function comp.getComponent(s)
  34.   local f = component.list(tostring(s))
  35.   local b = {}
  36.   local slotB = 1
  37.   for k in f do table.insert(b, slotB, tostring(k)) slotB = slotB + 1 end
  38.   return b
  39. end
  40.  
  41. function comp.getTurbines()
  42.  
  43.         t = component.list("br_turbine")
  44.         local b = { }
  45.         local slot = 1
  46.         for k in t do table.insert(b, slot, tostring(k)) slot = slot + 1 end
  47.         return b
  48.  
  49. end
  50.  
  51. local lastEnergy = 0
  52. local currentEnergies = {}
  53. local outputEnergies = {}
  54. local lastEnergies = {}
  55. local finalEnergies = {}
  56. local cellNumber = 0
  57. local lastTimes = {}
  58. local deltaTimes = {}
  59.  
  60. function comp.getEnergyGains()
  61.   local ACCURACY = 0
  62.  
  63.   if tempBool1==false then
  64.  
  65.     out2 = {}
  66.     cells = comp.getComponent("tile_thermalexpansion_cell_resonant_name")
  67.     cellsLength = tableLength(cells)
  68.  
  69.     for i=1, cellsLength do
  70.       lastTimes[i] = computer.uptime()
  71.       deltaTimes[i] = 0
  72.       currentEnergies[i] = 0
  73.       outputEnergies[i] = 0
  74.       lastEnergies[i] = component.proxy(cells[i]).getEnergyStored()
  75.       finalEnergies[i] = 0
  76.       out2[i] = 0
  77.     end
  78.  
  79.     tempBool1 = true
  80.  
  81.   end
  82.  
  83.     for i=1, cellsLength do
  84.       deltaTimes[i] = computer.uptime() - lastTimes[i]
  85.       lastTimes[i] = computer.uptime()
  86.  
  87.         currentEnergies[i] = component.proxy(cells[i]).getEnergyStored()
  88.         outputEnergies[i] = (currentEnergies[i] - lastEnergies[i])/(20*deltaTimes[i])
  89.  
  90.         lastEnergies[i] = currentEnergies[i]
  91.         finalEnergies[i] = comp.round(outputEnergies[i],ACCURACY)
  92.         out2[i] = finalEnergies[i]
  93.  
  94.     end
  95. return out2
  96. end
  97.  
  98. function comp.toTurbine(t,n)
  99.  
  100.   return component.proxy(t[n])
  101.  
  102. end
  103.  
  104. function  comp.disableAllTurbines(t)
  105.  
  106.   local c = tableLength(t)
  107.  
  108.    for i=1,c do
  109.  
  110.     component.proxy(t[i]).setActive(false)
  111.  
  112.    end
  113.  
  114. end
  115.  
  116. function comp.enableAllTurbines(t)
  117.  
  118.   local c = tableLength(t)
  119.  
  120.     for i=1,c do
  121.  
  122.       component.proxy(t[i]).setActive(true)
  123.  
  124.     end
  125.  
  126. end
  127.  
  128. --[[
  129. function setTarRPM(_, _, _, _, _, v)
  130.     tarRPM = v
  131. end
  132.  
  133. event.listen("modem_message", setTarRPM)
  134. ]]
  135.  
  136.  
  137. curErrors = {}
  138. dErrs = {}
  139. errors = {}
  140. errSums = {}
  141. proErrors = {}
  142. out = {}
  143. curFlowDev = {}
  144. local lastTimes2 = {}
  145. local deltaTimes2 = {}
  146.  
  147. function comp.turbinePID(tarRPM)
  148.  
  149.   if tempBool2==false then
  150.  
  151.     turbines = comp.getTurbines()
  152.     c = tableLength(turbines)
  153.  
  154.     for i=1, c do
  155.       lastTimes2[i] = computer.uptime()
  156.       deltaTimes2[i] = 0
  157.         curErrors[i] = 0
  158.         out[i] = 0
  159.         dErrs[i] = 0
  160.         errors[i] = 0
  161.         errSums[i] = 0
  162.         proErrors[i] = 0
  163.         curFlowDev[i] = 0
  164.     end
  165.  
  166.     tempBool2 = true
  167.  
  168.   end
  169.  
  170.  
  171.     for i=1, c do
  172.  
  173.       deltaTimes2[i] = computer.uptime() - lastTimes2[i]
  174.       lastTimes2[i] = computer.uptime()
  175.  
  176.             curOut = component.proxy(turbines[i]).getEnergyProducedLastTick()
  177.             curRPM = component.proxy(turbines[i]).getRotorSpeed()
  178.             curErrors[i] = tarRPM-curRPM
  179.             proErrors[i] = 10*curErrors[i]
  180.             errSums[i] = (errSums[i] + curErrors[i])
  181.             dErrs[i] = (curErrors[i] - errors[i])/deltaTimes2[i]
  182.  
  183.       if curErrors[i]<0 then component.proxy(turbines[i]).setInductorEngaged(true) end
  184.       if curErrors[i]>50 then component.proxy(turbines[i]).setInductorEngaged(false) end
  185.  
  186.             if errSums[i] > 2000 then errSums[i]=2000 end
  187.             if errSums[i] < -2000 then errSums[i]=-2000 end
  188.  
  189.  
  190.             curFlowDev[i] = proErrors[i] + errSums[i] + dErrs[i]
  191.  
  192.             out[i] = curFlowDev[i]
  193.  
  194.             errors[i] = curErrors[i]
  195.  
  196.         end
  197.  
  198.     return out
  199.  
  200. end
  201.  
  202. function comp.cleanUp()
  203.   tempBool1 = false
  204.   tempBool2 = false
  205. end
  206.  
  207. return comp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement