diff --git a/.vscode/settings.json b/.vscode/settings.json index 1a28f3c..46b3a86 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,6 +12,7 @@ "settings", "window", "read", - "periphemu" + "periphemu", + "mekanismEnergyHelper" ] } diff --git a/coordinator/startup.lua b/coordinator/startup.lua index 3590a39..47c1dc8 100644 --- a/coordinator/startup.lua +++ b/coordinator/startup.lua @@ -16,7 +16,7 @@ local config = require("coordinator.config") local coordinator = require("coordinator.coordinator") local renderer = require("coordinator.renderer") -local COORDINATOR_VERSION = "alpha-v0.4.14" +local COORDINATOR_VERSION = "alpha-v0.4.15" local print = util.print local println = util.println diff --git a/coordinator/ui/components/turbine.lua b/coordinator/ui/components/turbine.lua index b885966..119caf2 100644 --- a/coordinator/ui/components/turbine.lua +++ b/coordinator/ui/components/turbine.lua @@ -1,4 +1,5 @@ local core = require("graphics.core") +local util = require("scada-common.util") local style = require("coordinator.ui.style") @@ -22,11 +23,11 @@ local function new_view(root, x, y, ps) local lu_col = cpair(colors.gray, colors.gray) local status = StateIndicator{parent=turbine,x=8,y=1,states=style.turbine.states,value=1,min_width=10} - local prod_rate = DataIndicator{parent=turbine,x=5,y=3,lu_colors=lu_col,label="",unit="MFE",format="%10.2f",value=0,width=16,fg_bg=text_fg_bg} + local prod_rate = DataIndicator{parent=turbine,x=5,y=3,lu_colors=lu_col,label="",unit="FE",format="%10.2f",value=0,width=16,fg_bg=text_fg_bg} local flow_rate = DataIndicator{parent=turbine,x=5,y=4,lu_colors=lu_col,label="",unit="mB/t",format="%10.0f",value=0,commas=true,width=16,fg_bg=text_fg_bg} ps.subscribe("computed_status", status.update) - ps.subscribe("prod_rate", prod_rate.update) + ps.subscribe("prod_rate", function (val) prod_rate.update(util.joules_to_fe(val)) end) ps.subscribe("flow_rate", flow_rate.update) local steam = VerticalBar{parent=turbine,x=2,y=1,fg_bg=cpair(colors.white,colors.gray),height=5,width=2} diff --git a/reactor-plc/startup.lua b/reactor-plc/startup.lua index 4cc2658..5d0b6e5 100644 --- a/reactor-plc/startup.lua +++ b/reactor-plc/startup.lua @@ -13,7 +13,7 @@ local config = require("reactor-plc.config") local plc = require("reactor-plc.plc") local threads = require("reactor-plc.threads") -local R_PLC_VERSION = "beta-v0.8.4" +local R_PLC_VERSION = "beta-v0.8.5" local print = util.print local println = util.println diff --git a/rtu/startup.lua b/rtu/startup.lua index 422ee5e..7e6978d 100644 --- a/rtu/startup.lua +++ b/rtu/startup.lua @@ -24,7 +24,7 @@ local sna_rtu = require("rtu.dev.sna_rtu") local sps_rtu = require("rtu.dev.sps_rtu") local turbinev_rtu = require("rtu.dev.turbinev_rtu") -local RTU_VERSION = "beta-v0.8.1" +local RTU_VERSION = "beta-v0.8.2" local rtu_t = types.rtu_t diff --git a/scada-common/comms.lua b/scada-common/comms.lua index bb5d3cb..352e77f 100644 --- a/scada-common/comms.lua +++ b/scada-common/comms.lua @@ -143,8 +143,12 @@ function comms.scada_packet() if #self.raw >= 3 then self.seq_num = self.raw[1] self.protocol = self.raw[2] - self.length = #self.raw[3] - self.payload = self.raw[3] + + -- element 3 must be a table + if type(self.raw[3]) == "table" then + self.length = #self.raw[3] + self.payload = self.raw[3] + end end self.valid = type(self.seq_num) == "number" and diff --git a/scada-common/util.lua b/scada-common/util.lua index 68957f9..aa1e385 100644 --- a/scada-common/util.lua +++ b/scada-common/util.lua @@ -273,34 +273,37 @@ end -- MEKANISM POWER -- --- function util.kFE(fe) return fe / 1000.0 end --- function util.MFE(fe) return fe / 1000000.0 end --- function util.GFE(fe) return fe / 1000000000.0 end --- function util.TFE(fe) return fe / 1000000000000.0 end +-- convert Joules to FE +---@param J number Joules +---@return number FE Forge Energy +function util.joules_to_fe(J) return mekanismEnergyHelper.joulesToFE(J) end --- -- FLOATING POINT PRINTS -- +-- convert FE to Joules +---@param FE number Forge Energy +---@return number J Joules +function util.fe_to_joules(FE) return mekanismEnergyHelper.feToJoules(FE) end --- local function fractional_1s(number) --- return number == math.round(number) --- end +local function kFE(fe) return fe / 1000.0 end +local function MFE(fe) return fe / 1000000.0 end +local function GFE(fe) return fe / 1000000000.0 end +local function TFE(fe) return fe / 1000000000000.0 end --- local function fractional_10ths(number) --- number = number * 10 --- return number == math.round(number) --- end - --- local function fractional_100ths(number) --- number = number * 100 --- return number == math.round(number) --- end - --- function util.power_format(fe) --- if fe < 1000 then --- return string.format("%.2f FE", fe) --- elseif fe < 1000000 then --- return string.format("%.3f kFE", kFE(fe)) --- end --- end +-- format a power value into XXX.XX UNIT format (FE, kFE, MFE, GFE, TFE) +---@param fe number forge energy value +---@return string str formatted string +function util.power_format(fe) + if fe < 1000 then + return string.format("%.2f FE", fe) + elseif fe < 1000000 then + return string.format("%.2f kFE", kFE(fe)) + elseif fe < 1000000000 then + return string.format("%.2f MFE", MFE(fe)) + elseif fe < 1000000000000 then + return string.format("%.2f GFE", GFE(fe)) + else + return string.format("%.2f TFE", TFE(fe)) + end +end -- WATCHDOG -- diff --git a/supervisor/startup.lua b/supervisor/startup.lua index 0acef53..398266e 100644 --- a/supervisor/startup.lua +++ b/supervisor/startup.lua @@ -13,7 +13,7 @@ local svsessions = require("supervisor.session.svsessions") local config = require("supervisor.config") local supervisor = require("supervisor.supervisor") -local SUPERVISOR_VERSION = "beta-v0.5.13" +local SUPERVISOR_VERSION = "beta-v0.5.14" local print = util.print local println = util.println