diff --git a/pocket/iocontrol.lua b/pocket/iocontrol.lua index c3ecc35..f46532c 100644 --- a/pocket/iocontrol.lua +++ b/pocket/iocontrol.lua @@ -693,24 +693,38 @@ function iocontrol.record_unit_data(data) local control_status = 1 local reactor_status = 1 + local reactor_state = 1 local rps_status = 1 if unit.connected then -- update RPS status if unit.reactor_data.rps_tripped then control_status = 2 - rps_status = util.trinary(unit.reactor_data.rps_trip_cause == "manual", 3, 2) + + if unit.reactor_data.rps_trip_cause == "manual" then + reactor_state = 4 -- disabled + rps_status = 3 + else + reactor_state = 6 -- SCRAM + rps_status = 2 + end else rps_status = 4 end -- update reactor/control status if unit.reactor_data.mek_status.status then reactor_status = 4 + reactor_state = 5 -- running control_status = util.trinary(unit.annunciator.AutoControl, 4, 3) else if unit.reactor_data.no_reactor then reactor_status = 2 - elseif not unit.reactor_data.formed or unit.reactor_data.rps_status.force_dis then + reactor_state = 3 -- faulted + elseif not unit.reactor_data.formed then reactor_status = 3 + reactor_state = 2 -- not formed + elseif unit.reactor_data.rps_status.force_dis then + reactor_status = 3 + reactor_state = 7 -- force disabled else reactor_status = 4 end @@ -737,6 +751,7 @@ function iocontrol.record_unit_data(data) unit.unit_ps.publish("U_ControlStatus", control_status) unit.unit_ps.publish("U_ReactorStatus", reactor_status) + unit.unit_ps.publish("U_ReactorStateStatus", reactor_state) unit.unit_ps.publish("U_RPS", rps_status) --#endregion diff --git a/pocket/ui/pages/unit_reactor.lua b/pocket/ui/pages/unit_reactor.lua index a6fa011..6990e92 100644 --- a/pocket/ui/pages/unit_reactor.lua +++ b/pocket/ui/pages/unit_reactor.lua @@ -1,20 +1,21 @@ -local types = require("scada-common.types") -local util = require("scada-common.util") +local types = require("scada-common.types") +local util = require("scada-common.util") -local iocontrol = require("pocket.iocontrol") +local iocontrol = require("pocket.iocontrol") -local style = require("pocket.ui.style") +local style = require("pocket.ui.style") -local core = require("graphics.core") +local core = require("graphics.core") -local Div = require("graphics.elements.div") -local TextBox = require("graphics.elements.textbox") +local Div = require("graphics.elements.div") +local TextBox = require("graphics.elements.textbox") -local DataIndicator = require("graphics.elements.indicators.data") -local IconIndicator = require("graphics.elements.indicators.icon") -local VerticalBar = require("graphics.elements.indicators.vbar") +local DataIndicator = require("graphics.elements.indicators.data") +local StateIndicator = require("graphics.elements.indicators.state") +local IconIndicator = require("graphics.elements.indicators.icon") +local VerticalBar = require("graphics.elements.indicators.vbar") -local PushButton = require("graphics.elements.controls.push_button") +local PushButton = require("graphics.elements.controls.push_button") local ALIGN = core.ALIGN local cpair = core.cpair @@ -43,7 +44,9 @@ return function (app, u_page, panes, page_div, u_ps, update) local rct_page = app.new_page(u_page, #panes) rct_page.tasks = { update } - TextBox{parent=rct_div,y=1,text="Fission Reactor",height=1,alignment=ALIGN.CENTER} + TextBox{parent=rct_div,y=1,text="Reactor",width=8,height=1} + local status = StateIndicator{parent=rct_div,x=10,y=1,states=style.reactor.states,value=1,min_width=12} + status.register(u_ps, "U_ReactorStateStatus", status.update) local fuel = VerticalBar{parent=rct_div,x=1,y=4,fg_bg=cpair(colors.lightGray,colors.gray),height=5,width=1} local ccool = VerticalBar{parent=rct_div,x=3,y=4,fg_bg=cpair(colors.blue,colors.gray),height=5,width=1} @@ -76,17 +79,14 @@ return function (app, u_page, panes, page_div, u_ps, update) end end) - TextBox{parent=rct_div,text="Burn Rate",x=5,y=5,width=13,height=1,fg_bg=label} - local burn_rate = DataIndicator{parent=rct_div,x=5,y=6,lu_colors=lu_col,label="",unit="mB/t",format="%8.2f",value=0,commas=true,width=13,fg_bg=text_fg} - TextBox{parent=rct_div,text="Temperature",x=5,y=7,width=13,height=1,fg_bg=label} + TextBox{parent=rct_div,text="Burn Rate",x=5,y=4,width=13,height=1,fg_bg=label} + local burn_rate = DataIndicator{parent=rct_div,x=5,y=5,lu_colors=lu_col,label="",unit="mB/t",format="%8.2f",value=0,commas=true,width=13,fg_bg=text_fg} + TextBox{parent=rct_div,text="Temperature",x=5,y=6,width=13,height=1,fg_bg=label} local t_prec = util.trinary(db.temp_label == types.TEMP_SCALE_UNITS[types.TEMP_SCALE.KELVIN], 11, 10) - local core_temp = DataIndicator{parent=rct_div,x=5,y=8,lu_colors=lu_col,label="",unit=db.temp_label,format="%"..t_prec..".2f",value=0,commas=true,width=13,fg_bg=text_fg} - - local state = IconIndicator{parent=rct_div,x=7,y=3,label="State",states=mode_states} + local core_temp = DataIndicator{parent=rct_div,x=5,y=7,lu_colors=lu_col,label="",unit=db.temp_label,format="%"..t_prec..".2f",value=0,commas=true,width=13,fg_bg=text_fg} burn_rate.register(u_ps, "act_burn_rate", burn_rate.update) core_temp.register(u_ps, "temp", function (t) core_temp.update(db.temp_convert(t)) end) - state.register(u_ps, "U_ControlStatus", state.update) local r_temp = IconIndicator{parent=rct_div,y=10,label="Reactor Temp. Hi",states=red_ind_s} local r_rhdt = IconIndicator{parent=rct_div,label="Hi Delta Temp.",states=yel_ind_s} diff --git a/pocket/ui/style.lua b/pocket/ui/style.lua index ad4a231..dc26755 100644 --- a/pocket/ui/style.lua +++ b/pocket/ui/style.lua @@ -82,7 +82,7 @@ style.reactor = { states = { { color = cpair(colors.black, colors.yellow), - text = "PLC OFF-LINE" + text = "OFF-LINE" }, { color = cpair(colors.black, colors.orange), @@ -106,7 +106,7 @@ style.reactor = { }, { color = cpair(colors.black, colors.red), - text = "FORCE DISABLED" + text = "FORCE DSBL" } } }