Evenly distribute charge across multiple batteries

This commit is contained in:
Kevin Zheng 2013-11-28 14:20:38 -06:00
parent ab567e21ca
commit 7cfb3874a3

@ -1,7 +1,10 @@
-- SWITCHING STATION -- SWITCHING STATION
-- The switching station is the center of all power distribution on an electric network. -- The switching station is the center of all power distribution on an electric network.
-- The station will collect all produced power from producers (PR) and batteries (BA) --
-- and distribute it to receivers (RE) and depleted batteries (BA). -- The station collects power from sources (PR), distributes it to sinks (RE),
-- and uses the excess/shortfall to charge and discharge batteries (BA).
--
-- For now, all supply and demand values are expressed in kW.
-- --
-- It works like this: -- It works like this:
-- All PR,BA,RE nodes are indexed and tagged with the switching station. -- All PR,BA,RE nodes are indexed and tagged with the switching station.
@ -237,6 +240,30 @@ minetest.register_abm({
local eu_input_str = tier.."_EU_input" local eu_input_str = tier.."_EU_input"
local eu_supply_str = tier.."_EU_supply" local eu_supply_str = tier.."_EU_supply"
-- Distribute charge equally across multiple batteries.
local charge_total = 0
local battery_count = 0
for n, pos1 in pairs(BA_nodes) do
meta1 = minetest.get_meta(pos1)
local charge = meta1:get_int("internal_EU_charge")
if (meta1:get_int(eu_demand_str) ~= 0) then
charge_total = charge_total + charge
battery_count = battery_count + 1
end
end
local charge_distributed = math.floor(charge_total / battery_count)
for n, pos1 in pairs(BA_nodes) do
meta1 = minetest.get_meta(pos1)
if (meta1:get_int(eu_demand_str) ~= 0) then
meta1:set_int("internal_EU_charge", charge_distributed)
end
end
-- Get all the power from the PR nodes -- Get all the power from the PR nodes
local PR_eu_supply = 0 -- Total power local PR_eu_supply = 0 -- Total power
for _, pos1 in pairs(PR_nodes) do for _, pos1 in pairs(PR_nodes) do