#45 burn rate ramping is optional now
This commit is contained in:
parent
89be79192f
commit
83fa41bbd0
@ -614,22 +614,27 @@ plc.comms = function (id, modem, local_port, server_port, reactor, rps)
|
|||||||
log.debug("sent out structure again, did supervisor miss it?")
|
log.debug("sent out structure again, did supervisor miss it?")
|
||||||
elseif packet.type == RPLC_TYPES.MEK_BURN_RATE then
|
elseif packet.type == RPLC_TYPES.MEK_BURN_RATE then
|
||||||
-- set the burn rate
|
-- set the burn rate
|
||||||
if packet.length == 1 then
|
if packet.length == 2 then
|
||||||
local success = false
|
local success = false
|
||||||
local burn_rate = packet.data[1]
|
local burn_rate = packet.data[1]
|
||||||
local max_burn_rate = self.max_burn_rate
|
local ramp = packet.data[2]
|
||||||
|
|
||||||
-- if no known max burn rate, check again
|
-- if no known max burn rate, check again
|
||||||
if max_burn_rate == nil then
|
if self.max_burn_rate == nil then
|
||||||
max_burn_rate = self.reactor.getMaxBurnRate()
|
self.max_burn_rate = self.reactor.getMaxBurnRate()
|
||||||
self.max_burn_rate = max_burn_rate
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- if we know our max burn rate, update current burn rate setpoint if in range
|
-- if we know our max burn rate, update current burn rate setpoint if in range
|
||||||
if max_burn_rate ~= ppm.ACCESS_FAULT then
|
if self.max_burn_rate ~= ppm.ACCESS_FAULT then
|
||||||
if burn_rate > 0 and burn_rate <= max_burn_rate then
|
if burn_rate > 0 and burn_rate <= self.max_burn_rate then
|
||||||
setpoints.burn_rate = burn_rate
|
if ramp then
|
||||||
success = true
|
setpoints.burn_rate_en = true
|
||||||
|
setpoints.burn_rate = burn_rate
|
||||||
|
success = true
|
||||||
|
else
|
||||||
|
self.reactor.setBurnRate(burn_rate)
|
||||||
|
success = not self.reactor.__p_is_faulted()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ local config = require("config")
|
|||||||
local plc = require("plc")
|
local plc = require("plc")
|
||||||
local threads = require("threads")
|
local threads = require("threads")
|
||||||
|
|
||||||
local R_PLC_VERSION = "alpha-v0.6.2"
|
local R_PLC_VERSION = "alpha-v0.6.3"
|
||||||
|
|
||||||
local print = util.print
|
local print = util.print
|
||||||
local println = util.println
|
local println = util.println
|
||||||
@ -43,6 +43,7 @@ local __shared_memory = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
setpoints = {
|
setpoints = {
|
||||||
|
burn_rate_en = false,
|
||||||
burn_rate = 0.0
|
burn_rate = 0.0
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@ -422,7 +422,7 @@ threads.thread__setpoint_control = function (smem)
|
|||||||
local reactor = plc_dev.reactor
|
local reactor = plc_dev.reactor
|
||||||
|
|
||||||
-- check if we should start ramping
|
-- check if we should start ramping
|
||||||
if setpoints.burn_rate ~= last_sp_burn then
|
if setpoints.burn_rate_en and setpoints.burn_rate ~= last_sp_burn then
|
||||||
if rps.is_active() then
|
if rps.is_active() then
|
||||||
if math.abs(setpoints.burn_rate - last_sp_burn) <= 5 then
|
if math.abs(setpoints.burn_rate - last_sp_burn) <= 5 then
|
||||||
-- update without ramp if <= 5 mB/t change
|
-- update without ramp if <= 5 mB/t change
|
||||||
@ -449,33 +449,37 @@ threads.thread__setpoint_control = function (smem)
|
|||||||
running = false
|
running = false
|
||||||
|
|
||||||
-- adjust burn rate (setpoints.burn_rate)
|
-- adjust burn rate (setpoints.burn_rate)
|
||||||
if rps.is_active() then
|
if setpoints.burn_rate_en then
|
||||||
local current_burn_rate = reactor.getBurnRate()
|
if rps.is_active() then
|
||||||
if (current_burn_rate ~= ppm.ACCESS_FAULT) and (current_burn_rate ~= setpoints.burn_rate) then
|
local current_burn_rate = reactor.getBurnRate()
|
||||||
-- calculate new burn rate
|
|
||||||
local new_burn_rate = current_burn_rate
|
|
||||||
|
|
||||||
if setpoints.burn_rate > current_burn_rate then
|
-- we yielded, check enable again
|
||||||
-- need to ramp up
|
if setpoints.burn_rate_en and (current_burn_rate ~= ppm.ACCESS_FAULT) and (current_burn_rate ~= setpoints.burn_rate) then
|
||||||
local new_burn_rate = current_burn_rate + (BURN_RATE_RAMP_mB_s * min_elapsed_s)
|
-- calculate new burn rate
|
||||||
if new_burn_rate > setpoints.burn_rate then
|
local new_burn_rate = current_burn_rate
|
||||||
new_burn_rate = setpoints.burn_rate
|
|
||||||
end
|
if setpoints.burn_rate > current_burn_rate then
|
||||||
else
|
-- need to ramp up
|
||||||
-- need to ramp down
|
local new_burn_rate = current_burn_rate + (BURN_RATE_RAMP_mB_s * min_elapsed_s)
|
||||||
local new_burn_rate = current_burn_rate - (BURN_RATE_RAMP_mB_s * min_elapsed_s)
|
if new_burn_rate > setpoints.burn_rate then
|
||||||
if new_burn_rate < setpoints.burn_rate then
|
new_burn_rate = setpoints.burn_rate
|
||||||
new_burn_rate = setpoints.burn_rate
|
end
|
||||||
|
else
|
||||||
|
-- need to ramp down
|
||||||
|
local new_burn_rate = current_burn_rate - (BURN_RATE_RAMP_mB_s * min_elapsed_s)
|
||||||
|
if new_burn_rate < setpoints.burn_rate then
|
||||||
|
new_burn_rate = setpoints.burn_rate
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- set the burn rate
|
||||||
|
reactor.setBurnRate(new_burn_rate)
|
||||||
|
|
||||||
|
running = running or (new_burn_rate ~= setpoints.burn_rate)
|
||||||
end
|
end
|
||||||
|
else
|
||||||
-- set the burn rate
|
last_sp_burn = 0
|
||||||
reactor.setBurnRate(new_burn_rate)
|
|
||||||
|
|
||||||
running = running or (new_burn_rate ~= setpoints.burn_rate)
|
|
||||||
end
|
end
|
||||||
else
|
|
||||||
last_sp_burn = 0
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -21,11 +21,16 @@ local RETRY_PERIOD = 1000
|
|||||||
local PLC_S_CMDS = {
|
local PLC_S_CMDS = {
|
||||||
SCRAM = 0,
|
SCRAM = 0,
|
||||||
ENABLE = 1,
|
ENABLE = 1,
|
||||||
BURN_RATE = 2,
|
RPS_RESET = 2
|
||||||
RPS_RESET = 3
|
}
|
||||||
|
|
||||||
|
local PLC_S_DATA = {
|
||||||
|
BURN_RATE = 1,
|
||||||
|
RAMP_BURN_RATE = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
plc.PLC_S_CMDS = PLC_S_CMDS
|
plc.PLC_S_CMDS = PLC_S_CMDS
|
||||||
|
plc.PLC_S_DATA = PLC_S_DATA
|
||||||
|
|
||||||
local PERIODICS = {
|
local PERIODICS = {
|
||||||
KEEP_ALIVE = 2.0
|
KEEP_ALIVE = 2.0
|
||||||
@ -42,6 +47,7 @@ plc.new_session = function (id, for_reactor, in_queue, out_queue)
|
|||||||
out_q = out_queue,
|
out_q = out_queue,
|
||||||
commanded_state = false,
|
commanded_state = false,
|
||||||
commanded_burn_rate = 0.0,
|
commanded_burn_rate = 0.0,
|
||||||
|
ramping_rate = false,
|
||||||
-- connection properties
|
-- connection properties
|
||||||
seq_num = 0,
|
seq_num = 0,
|
||||||
r_seq_num = nil,
|
r_seq_num = nil,
|
||||||
@ -447,12 +453,20 @@ plc.new_session = function (id, for_reactor, in_queue, out_queue)
|
|||||||
elseif message.qtype == mqueue.TYPE.DATA then
|
elseif message.qtype == mqueue.TYPE.DATA then
|
||||||
-- instruction with body
|
-- instruction with body
|
||||||
local cmd = message.message
|
local cmd = message.message
|
||||||
if cmd.key == PLC_S_CMDS.BURN_RATE then
|
if cmd.key == PLC_S_DATA.BURN_RATE then
|
||||||
-- update burn rate
|
-- update burn rate
|
||||||
self.commanded_burn_rate = cmd.val
|
self.commanded_burn_rate = cmd.val
|
||||||
|
self.ramping_rate = false
|
||||||
self.acks.burn_rate = false
|
self.acks.burn_rate = false
|
||||||
self.retry_times.burn_rate_req = util.time() + INITIAL_WAIT
|
self.retry_times.burn_rate_req = util.time() + INITIAL_WAIT
|
||||||
_send(RPLC_TYPES.MEK_BURN_RATE, { self.commanded_burn_rate })
|
_send(RPLC_TYPES.MEK_BURN_RATE, { self.commanded_burn_rate, self.ramping_rate })
|
||||||
|
elseif cmd.key == PLC_S_DATA.RAMP_BURN_RATE then
|
||||||
|
-- ramp to burn rate
|
||||||
|
self.commanded_burn_rate = cmd.val
|
||||||
|
self.ramping_rate = true
|
||||||
|
self.acks.burn_rate = false
|
||||||
|
self.retry_times.burn_rate_req = util.time() + INITIAL_WAIT
|
||||||
|
_send(RPLC_TYPES.MEK_BURN_RATE, { self.commanded_burn_rate, self.ramping_rate })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -535,7 +549,7 @@ plc.new_session = function (id, for_reactor, in_queue, out_queue)
|
|||||||
|
|
||||||
if not self.acks.burn_rate then
|
if not self.acks.burn_rate then
|
||||||
if rtimes.burn_rate_req - util.time() <= 0 then
|
if rtimes.burn_rate_req - util.time() <= 0 then
|
||||||
_send(RPLC_TYPES.MEK_BURN_RATE, { self.commanded_burn_rate })
|
_send(RPLC_TYPES.MEK_BURN_RATE, { self.commanded_burn_rate, self.ramping_rate })
|
||||||
rtimes.burn_rate_req = util.time() + RETRY_PERIOD
|
rtimes.burn_rate_req = util.time() + RETRY_PERIOD
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -14,7 +14,7 @@ local svsessions = require("session.svsessions")
|
|||||||
local config = require("config")
|
local config = require("config")
|
||||||
local supervisor = require("supervisor")
|
local supervisor = require("supervisor")
|
||||||
|
|
||||||
local SUPERVISOR_VERSION = "alpha-v0.3.2"
|
local SUPERVISOR_VERSION = "alpha-v0.3.3"
|
||||||
|
|
||||||
local print = util.print
|
local print = util.print
|
||||||
local println = util.println
|
local println = util.println
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user