mirror of
https://github.com/MikaylaFischler/cc-mek-scada.git
synced 2025-07-26 23:57:07 +00:00
669 lines
16 KiB
Lua
669 lines
16 KiB
Lua
--
|
|
-- Global Types
|
|
--
|
|
|
|
---@class types
|
|
local types = {}
|
|
|
|
--#region CC: TWEAKED CLASSES https://tweaked.cc
|
|
|
|
---@class Redirect
|
|
---@field write fun(text: string) Write text at the current cursor position, moving the cursor to the end of the text.
|
|
---@field scroll fun(y: integer) Move all positions up (or down) by y pixels.
|
|
---@field getCursorPos fun() : x: integer, y: integer Get the position of the cursor.
|
|
---@field setCursorPos fun(x: integer, y: integer) Set the position of the cursor.
|
|
---@field getCursorBlink fun() : boolean Checks if the cursor is currently blinking.
|
|
---@field setCursorBlink fun(blink: boolean) Sets whether the cursor should be visible (and blinking) at the current cursor position.
|
|
---@field getSize fun() : width: integer, height: integer Get the size of the terminal.
|
|
---@field clear fun() Clears the terminal, filling it with the current background color.
|
|
---@field clearLine fun() Clears the line the cursor is currently on, filling it with the current background color.
|
|
---@field getTextColor fun() : color Return the color that new text will be written as.
|
|
---@field setTextColor fun(color: color) Set the colour that new text will be written as.
|
|
---@field getBackgroundColor fun() : color Return the current background color.
|
|
---@field setBackgroundColor fun(color: color) set the current background color.
|
|
---@field isColor fun() Determine if this terminal supports color.
|
|
---@field blit fun(text: string, textColor: string, backgroundColor: string) Writes text to the terminal with the specific foreground and background colors.
|
|
---@diagnostic disable-next-line: duplicate-doc-field
|
|
---@field setPaletteColor fun(index: color, color: integer) Set the palette for a specific color.
|
|
---@diagnostic disable-next-line: duplicate-doc-field
|
|
---@field setPaletteColor fun(index: color, r: number, g: number, b:number) Set the palette for a specific color. R/G/B are 0 to 1.
|
|
---@field getPaletteColor fun(color: color) : r: number, g: number, b:number Get the current palette for a specific color.
|
|
|
|
---@class Window:Redirect
|
|
---@field getLine fun(y: integer) : content: string, fg: string, bg: string Get the buffered contents of a line in this window.
|
|
---@field setVisible fun(visible: boolean) Set whether this window is visible. Invisible windows will not be drawn to the screen until they are made visible again.
|
|
---@field isVisible fun() : visible: boolean Get whether this window is visible. Invisible windows will not be drawn to the screen until they are made visible again.
|
|
---@field redraw fun() Draw this window. This does nothing if the window is not visible.
|
|
---@field restoreCursor fun() Set the current terminal's cursor to where this window's cursor is. This does nothing if the window is not visible.
|
|
---@field getPosition fun() : x: integer, y: integer Get the position of the top left corner of this window.
|
|
---@field reposition fun(new_x: integer, new_y: integer, new_width?: integer, new_height?: integer, new_parent?: Redirect) Reposition or resize the given window.
|
|
|
|
---@class Monitor:Redirect
|
|
---@field setTextScale fun(scale: number) Set the scale of this monitor.
|
|
---@field getTextScale fun() : number Get the monitor's current text scale.
|
|
|
|
---@class Modem
|
|
---@field open fun(channel: integer) Open a channel on a modem.
|
|
---@field isOpen fun(channel: integer) : boolean Check if a channel is open.
|
|
---@field close fun(channel: integer) Close an open channel, meaning it will no longer receive messages.
|
|
---@field closeAll fun() Close all open channels.
|
|
---@field transmit fun(channel: integer, replyChannel: integer, payload: any) Sends a modem message on a certain channel.
|
|
---@field isWireless fun() : boolean Determine if this is a wired or wireless modem.
|
|
---@field getNamesRemote fun() : string[] List all remote peripherals on the wired network.
|
|
---@field isPresentRemote fun(name: string) : boolean Determine if a peripheral is available on this wired network.
|
|
---@field getTypeRemote fun(name: string) : string|nil Get the type of a peripheral is available on this wired network.
|
|
---@field hasTypeRemote fun(name: string, type: string) : boolean|nil Check a peripheral is of a particular .
|
|
---@field getMethodsRemote fun(name: string) : string[] Get all available methods for the remote peripheral with the given name.
|
|
---@field callRemote fun(remoteName: string, method: string, ...) : table Call a method on a peripheral on this wired network.
|
|
---@field getNameLocal fun() : string|nil Returns the network name of the current computer, if the modem is on.
|
|
|
|
---@class Speaker
|
|
---@field playNote fun(instrument: string, volume?: number, pitch?: number) : success: boolean Plays a note block note through the speaker.
|
|
---@field playSound fun(name: string, volume?: number, pitch?: number) : success: boolean Plays a Minecraft sound through the speaker.
|
|
---@field playAudio fun(audio: number[], volume?: number) : success: boolean Attempt to stream some audio data to the speaker.
|
|
---@field stop fun() Stop all audio being played by this speaker.
|
|
|
|
--#endregion
|
|
|
|
--#region CLASSES
|
|
|
|
---@class tank_fluid
|
|
---@field name fluid
|
|
---@field amount integer
|
|
|
|
-- create a new tank fluid
|
|
---@nodiscard
|
|
---@param n string name
|
|
---@param a integer amount
|
|
---@return radiation_reading
|
|
function types.new_tank_fluid(n, a) return { name = n, amount = a } end
|
|
|
|
-- create a new empty tank fluid
|
|
---@nodiscard
|
|
---@return tank_fluid
|
|
function types.new_empty_gas() return { type = "mekanism:empty_gas", amount = 0 } end
|
|
|
|
---@class radiation_reading
|
|
---@field radiation number
|
|
---@field unit string
|
|
|
|
-- create a new radiation reading
|
|
---@nodiscard
|
|
---@param r number radiaiton level
|
|
---@param u string radiation unit
|
|
---@return radiation_reading
|
|
function types.new_radiation_reading(r, u) return { radiation = r, unit = u } end
|
|
|
|
-- create a new zeroed radiation reading
|
|
---@nodiscard
|
|
---@return radiation_reading
|
|
function types.new_zero_radiation_reading() return { radiation = 0, unit = "nSv" } end
|
|
|
|
---@class coordinate_2d
|
|
---@field x integer
|
|
---@field y integer
|
|
|
|
---@class coordinate
|
|
---@field x integer
|
|
---@field y integer
|
|
---@field z integer
|
|
|
|
-- create a new coordinate
|
|
---@nodiscard
|
|
---@param x integer
|
|
---@param y integer
|
|
---@param z integer
|
|
---@return coordinate
|
|
function types.new_coordinate(x, y, z) return { x = x, y = y, z = z } end
|
|
|
|
-- create a new zero coordinate
|
|
---@nodiscard
|
|
---@return coordinate
|
|
function types.new_zero_coordinate() return { x = 0, y = 0, z = 0 } end
|
|
|
|
---@class rtu_advertisement
|
|
---@field type RTU_UNIT_TYPE
|
|
---@field index integer|false
|
|
---@field reactor integer
|
|
---@field rsio IO_PORT[]|nil
|
|
|
|
-- create a new reactor database
|
|
---@nodiscard
|
|
function types.new_reactor_db()
|
|
---@class reactor_db
|
|
local db = {
|
|
auto_ack_token = 0,
|
|
last_status_update = 0,
|
|
control_state = false,
|
|
no_reactor = false,
|
|
formed = false,
|
|
rps_tripped = false,
|
|
rps_trip_cause = "ok", ---@type rps_trip_cause
|
|
max_op_temp_H2O = 1200,
|
|
max_op_temp_Na = 1200,
|
|
---@class rps_status
|
|
rps_status = {
|
|
high_dmg = false,
|
|
high_temp = false,
|
|
low_cool = false,
|
|
ex_waste = false,
|
|
ex_hcool = false,
|
|
no_fuel = false,
|
|
fault = false,
|
|
timeout = false,
|
|
manual = false,
|
|
automatic = false,
|
|
sys_fail = false,
|
|
force_dis = false
|
|
},
|
|
---@class mek_status
|
|
mek_status = {
|
|
heating_rate = 0.0,
|
|
|
|
status = false,
|
|
burn_rate = 0.0,
|
|
act_burn_rate = 0.0,
|
|
temp = 0.0,
|
|
damage = 0.0,
|
|
boil_eff = 0.0,
|
|
env_loss = 0.0,
|
|
|
|
fuel = 0,
|
|
fuel_need = 0,
|
|
fuel_fill = 0.0,
|
|
waste = 0,
|
|
waste_need = 0,
|
|
waste_fill = 0.0,
|
|
ccool_type = types.FLUID.EMPTY_GAS, ---@type fluid
|
|
ccool_amnt = 0,
|
|
ccool_need = 0,
|
|
ccool_fill = 0.0,
|
|
hcool_type = types.FLUID.EMPTY_GAS, ---@type fluid
|
|
hcool_amnt = 0,
|
|
hcool_need = 0,
|
|
hcool_fill = 0.0
|
|
},
|
|
---@class mek_struct
|
|
mek_struct = {
|
|
length = 0,
|
|
width = 0,
|
|
height = 0,
|
|
min_pos = types.new_zero_coordinate(),
|
|
max_pos = types.new_zero_coordinate(),
|
|
heat_cap = 0,
|
|
fuel_asm = 0,
|
|
fuel_sa = 0,
|
|
fuel_cap = 0,
|
|
waste_cap = 0,
|
|
ccool_cap = 0,
|
|
hcool_cap = 0,
|
|
max_burn = 0.0
|
|
}
|
|
}
|
|
|
|
return db
|
|
end
|
|
|
|
--#endregion
|
|
|
|
-- ALIASES --
|
|
|
|
---@alias color integer
|
|
|
|
--#region ENUMERATION TYPES
|
|
|
|
---@enum TEMP_SCALE
|
|
types.TEMP_SCALE = {
|
|
KELVIN = 1,
|
|
CELSIUS = 2,
|
|
FAHRENHEIT = 3,
|
|
RANKINE = 4
|
|
}
|
|
|
|
types.TEMP_SCALE_NAMES = {
|
|
"Kelvin",
|
|
"Celsius",
|
|
"Fahrenheit",
|
|
"Rankine"
|
|
}
|
|
|
|
types.TEMP_SCALE_UNITS = {
|
|
"K",
|
|
"\xb0C",
|
|
"\xb0F",
|
|
"\xb0R"
|
|
}
|
|
|
|
---@enum ENERGY_SCALE
|
|
types.ENERGY_SCALE = {
|
|
JOULES = 1,
|
|
FE = 2,
|
|
RF = 3
|
|
}
|
|
|
|
types.ENERGY_SCALE_NAMES = {
|
|
"Joules (J)",
|
|
"Forge Energy (FE)",
|
|
"Redstone Flux (RF)"
|
|
}
|
|
|
|
types.ENERGY_SCALE_UNITS = {
|
|
"J",
|
|
"FE",
|
|
"RF"
|
|
}
|
|
|
|
local GENERIC_STATE = {
|
|
OFFLINE = 1,
|
|
UNFORMED = 2,
|
|
FAULT = 3,
|
|
IDLE = 4,
|
|
ACTIVE = 5
|
|
}
|
|
|
|
---@enum REACTOR_STATE
|
|
types.REACTOR_STATE = {
|
|
OFFLINE = 1,
|
|
UNFORMED = 2,
|
|
FAULT = 3,
|
|
DISABLED = 4,
|
|
ACTIVE = 5,
|
|
SCRAMMED = 6,
|
|
FORCE_DISABLED = 7
|
|
}
|
|
|
|
---@enum BOILER_STATE
|
|
types.BOILER_STATE = GENERIC_STATE
|
|
|
|
---@enum TURBINE_STATE
|
|
types.TURBINE_STATE = {
|
|
OFFLINE = 1,
|
|
UNFORMED = 2,
|
|
FAULT = 3,
|
|
IDLE = 4,
|
|
ACTIVE = 5,
|
|
TRIPPED = 6
|
|
}
|
|
|
|
---@enum TANK_STATE
|
|
types.TANK_STATE = {
|
|
OFFLINE = 1,
|
|
UNFORMED = 2,
|
|
FAULT = 3,
|
|
ONLINE = 4,
|
|
LOW_FILL = 5,
|
|
HIGH_FILL = 6
|
|
}
|
|
|
|
---@enum IMATRIX_STATE
|
|
types.IMATRIX_STATE = {
|
|
OFFLINE = 1,
|
|
UNFORMED = 2,
|
|
FAULT = 3,
|
|
ONLINE = 4,
|
|
LOW_CHARGE = 5,
|
|
HIGH_CHARGE = 6
|
|
}
|
|
|
|
---@enum SPS_STATE
|
|
types.SPS_STATE = GENERIC_STATE
|
|
|
|
---@enum PANEL_LINK_STATE
|
|
types.PANEL_LINK_STATE = {
|
|
LINKED = 1,
|
|
DENIED = 2,
|
|
COLLISION = 3,
|
|
BAD_VERSION = 4,
|
|
DISCONNECTED = 5
|
|
}
|
|
|
|
---@enum RTU_UNIT_TYPE
|
|
types.RTU_UNIT_TYPE = {
|
|
VIRTUAL = 0, -- virtual device
|
|
REDSTONE = 1, -- redstone I/O
|
|
BOILER_VALVE = 2, -- boiler mekanism 10.1+
|
|
TURBINE_VALVE = 3, -- turbine, mekanism 10.1+
|
|
DYNAMIC_VALVE = 4, -- dynamic tank, mekanism 10.1+
|
|
IMATRIX = 5, -- induction matrix
|
|
SPS = 6, -- SPS
|
|
SNA = 7, -- SNA
|
|
ENV_DETECTOR = 8 -- environment detector
|
|
}
|
|
|
|
types.RTU_UNIT_NAMES = {
|
|
"redstone",
|
|
"boiler_valve",
|
|
"turbine_valve",
|
|
"dynamic_valve",
|
|
"induction_matrix",
|
|
"sps",
|
|
"sna",
|
|
"environment_detector"
|
|
}
|
|
|
|
-- safe conversion of RTU UNIT TYPE to string
|
|
---@nodiscard
|
|
---@param utype RTU_UNIT_TYPE
|
|
---@return string
|
|
function types.rtu_type_to_string(utype)
|
|
if utype == types.RTU_UNIT_TYPE.VIRTUAL then
|
|
return "virtual"
|
|
elseif utype == types.RTU_UNIT_TYPE.REDSTONE or
|
|
utype == types.RTU_UNIT_TYPE.BOILER_VALVE or
|
|
utype == types.RTU_UNIT_TYPE.TURBINE_VALVE or
|
|
utype == types.RTU_UNIT_TYPE.DYNAMIC_VALVE or
|
|
utype == types.RTU_UNIT_TYPE.IMATRIX or
|
|
utype == types.RTU_UNIT_TYPE.SPS or
|
|
utype == types.RTU_UNIT_TYPE.SNA or
|
|
utype == types.RTU_UNIT_TYPE.ENV_DETECTOR then
|
|
return types.RTU_UNIT_NAMES[utype]
|
|
else
|
|
return ""
|
|
end
|
|
end
|
|
|
|
---@enum RTU_ID_FAIL
|
|
types.RTU_ID_FAIL = {
|
|
OK = 0,
|
|
OUT_OF_RANGE = 1,
|
|
DUPLICATE = 2,
|
|
MAX_DEVICES = 3,
|
|
MISSING = 4
|
|
}
|
|
|
|
---@enum TRI_FAIL
|
|
types.TRI_FAIL = {
|
|
OK = 1,
|
|
PARTIAL = 2,
|
|
FULL = 3
|
|
}
|
|
|
|
---@enum PROCESS
|
|
types.PROCESS = {
|
|
INACTIVE = 0,
|
|
MAX_BURN = 1,
|
|
BURN_RATE = 2,
|
|
CHARGE = 3,
|
|
GEN_RATE = 4,
|
|
MATRIX_FAULT_IDLE = 5,
|
|
SYSTEM_ALARM_IDLE = 6,
|
|
GEN_RATE_FAULT_IDLE = 7
|
|
}
|
|
|
|
types.PROCESS_NAMES = {
|
|
"INACTIVE",
|
|
"MAX_BURN",
|
|
"BURN_RATE",
|
|
"CHARGE",
|
|
"GEN_RATE",
|
|
"MATRIX_FAULT_IDLE",
|
|
"SYSTEM_ALARM_IDLE",
|
|
"GEN_RATE_FAULT_IDLE"
|
|
}
|
|
|
|
---@enum AUTO_GROUP
|
|
types.AUTO_GROUP = {
|
|
MANUAL = 0,
|
|
PRIMARY = 1,
|
|
SECONDARY = 2,
|
|
TERTIARY = 3,
|
|
BACKUP = 4
|
|
}
|
|
|
|
types.AUTO_GROUP_NAMES = {
|
|
"Manual",
|
|
"Primary",
|
|
"Secondary",
|
|
"Tertiary",
|
|
"Backup"
|
|
}
|
|
|
|
---@enum COOLANT_TYPE
|
|
types.COOLANT_TYPE = {
|
|
WATER = 1,
|
|
SODIUM = 2
|
|
}
|
|
|
|
---@enum WASTE_MODE
|
|
types.WASTE_MODE = {
|
|
AUTO = 1,
|
|
MANUAL_PLUTONIUM = 2,
|
|
MANUAL_POLONIUM = 3,
|
|
MANUAL_ANTI_MATTER = 4
|
|
}
|
|
|
|
types.WASTE_MODE_NAMES = {
|
|
"AUTO",
|
|
"MANUAL_PLUTONIUM",
|
|
"MANUAL_POLONIUM",
|
|
"MANUAL_ANTI_MATTER"
|
|
}
|
|
|
|
---@enum WASTE_PRODUCT
|
|
types.WASTE_PRODUCT = {
|
|
PLUTONIUM = 1,
|
|
POLONIUM = 2,
|
|
ANTI_MATTER = 3
|
|
}
|
|
|
|
types.WASTE_PRODUCT_NAMES = {
|
|
"PLUTONIUM",
|
|
"POLONIUM",
|
|
"ANTI_MATTER"
|
|
}
|
|
|
|
---@enum ALARM
|
|
types.ALARM = {
|
|
ContainmentBreach = 1,
|
|
ContainmentRadiation = 2,
|
|
ReactorLost = 3,
|
|
CriticalDamage = 4,
|
|
ReactorDamage = 5,
|
|
ReactorOverTemp = 6,
|
|
ReactorHighTemp = 7,
|
|
ReactorWasteLeak = 8,
|
|
ReactorHighWaste = 9,
|
|
RPSTransient = 10,
|
|
RCSTransient = 11,
|
|
TurbineTrip = 12,
|
|
FacilityRadiation = 13
|
|
}
|
|
|
|
types.ALARM_NAMES = {
|
|
"ContainmentBreach",
|
|
"ContainmentRadiation",
|
|
"ReactorLost",
|
|
"CriticalDamage",
|
|
"ReactorDamage",
|
|
"ReactorOverTemp",
|
|
"ReactorHighTemp",
|
|
"ReactorWasteLeak",
|
|
"ReactorHighWaste",
|
|
"RPSTransient",
|
|
"RCSTransient",
|
|
"TurbineTrip",
|
|
"FacilityRadiation"
|
|
}
|
|
|
|
---@enum ALARM_PRIORITY
|
|
types.ALARM_PRIORITY = {
|
|
CRITICAL = 1,
|
|
EMERGENCY = 2,
|
|
URGENT = 3,
|
|
TIMELY = 4
|
|
}
|
|
|
|
types.ALARM_PRIORITY_NAMES = {
|
|
"CRITICAL",
|
|
"EMERGENCY",
|
|
"URGENT",
|
|
"TIMELY"
|
|
}
|
|
|
|
---@enum ALARM_STATE
|
|
types.ALARM_STATE = {
|
|
INACTIVE = 1,
|
|
TRIPPED = 2,
|
|
ACKED = 3,
|
|
RING_BACK = 4
|
|
}
|
|
|
|
types.ALARM_STATE_NAMES = {
|
|
"INACTIVE",
|
|
"TRIPPED",
|
|
"ACKED",
|
|
"RING_BACK"
|
|
}
|
|
|
|
--#endregion
|
|
|
|
--#region STRING TYPES
|
|
|
|
---@alias side
|
|
---|"top"
|
|
---|"bottom"
|
|
---|"left"
|
|
---|"right"
|
|
---|"front"
|
|
---|"back"
|
|
|
|
---@alias os_event
|
|
---| "alarm"
|
|
---| "char"
|
|
---| "computer_command"
|
|
---| "disk"
|
|
---| "disk_eject"
|
|
---| "http_check"
|
|
---| "http_failure"
|
|
---| "http_success"
|
|
---| "key"
|
|
---| "key_up"
|
|
---| "modem_message"
|
|
---| "monitor_resize"
|
|
---| "monitor_touch"
|
|
---| "mouse_click"
|
|
---| "mouse_drag"
|
|
---| "mouse_scroll"
|
|
---| "mouse_up"
|
|
---| "double_click" (custom)
|
|
---| "paste"
|
|
---| "peripheral"
|
|
---| "peripheral_detach"
|
|
---| "rednet_message"
|
|
---| "redstone"
|
|
---| "speaker_audio_empty"
|
|
---| "task_complete"
|
|
---| "term_resize"
|
|
---| "terminate"
|
|
---| "timer"
|
|
---| "turtle_inventory"
|
|
---| "websocket_closed"
|
|
---| "websocket_failure"
|
|
---| "websocket_message"
|
|
---| "websocket_success"
|
|
---| "clock_start" (custom)
|
|
|
|
---@alias fluid
|
|
---| "mekanism:empty_gas"
|
|
---| "minecraft:water"
|
|
---| "mekanism:sodium"
|
|
---| "mekanism:superheated_sodium"
|
|
|
|
types.FLUID = {
|
|
EMPTY_GAS = "mekanism:empty_gas",
|
|
WATER = "minecraft:water",
|
|
SODIUM = "mekanism:sodium",
|
|
SUPERHEATED_SODIUM = "mekanism:superheated_sodium"
|
|
}
|
|
|
|
---@alias rps_trip_cause
|
|
---| "ok"
|
|
---| "high_dmg"
|
|
---| "high_temp"
|
|
---| "low_coolant"
|
|
---| "ex_waste"
|
|
---| "ex_heated_coolant"
|
|
---| "no_fuel"
|
|
---| "fault"
|
|
---| "timeout"
|
|
---| "manual"
|
|
---| "automatic"
|
|
---| "sys_fail"
|
|
---| "force_disabled"
|
|
|
|
types.RPS_TRIP_CAUSE = {
|
|
OK = "ok",
|
|
HIGH_DMG = "high_dmg",
|
|
HIGH_TEMP = "high_temp",
|
|
LOW_COOLANT = "low_coolant",
|
|
EX_WASTE = "ex_waste",
|
|
EX_HCOOLANT = "ex_heated_coolant",
|
|
NO_FUEL = "no_fuel",
|
|
FAULT = "fault",
|
|
TIMEOUT = "timeout",
|
|
MANUAL = "manual",
|
|
AUTOMATIC = "automatic",
|
|
SYS_FAIL = "sys_fail",
|
|
FORCE_DISABLED = "force_disabled"
|
|
}
|
|
|
|
---@alias container_mode
|
|
---| "BOTH"
|
|
---| "FILL"
|
|
---| "EMPTY"
|
|
|
|
types.CONTAINER_MODE = {
|
|
BOTH = "BOTH",
|
|
FILL = "FILL",
|
|
EMPTY = "EMPTY"
|
|
}
|
|
|
|
---@alias dumping_mode
|
|
---| "IDLE"
|
|
---| "DUMPING"
|
|
---| "DUMPING_EXCESS"
|
|
|
|
types.DUMPING_MODE = {
|
|
IDLE = "IDLE",
|
|
DUMPING = "DUMPING",
|
|
DUMPING_EXCESS = "DUMPING_EXCESS"
|
|
}
|
|
|
|
--#endregion
|
|
|
|
--#region MODBUS
|
|
|
|
-- MODBUS function codes
|
|
---@enum MODBUS_FCODE
|
|
types.MODBUS_FCODE = {
|
|
READ_COILS = 0x01,
|
|
READ_DISCRETE_INPUTS = 0x02,
|
|
READ_MUL_HOLD_REGS = 0x03,
|
|
READ_INPUT_REGS = 0x04,
|
|
WRITE_SINGLE_COIL = 0x05,
|
|
WRITE_SINGLE_HOLD_REG = 0x06,
|
|
WRITE_MUL_COILS = 0x0F,
|
|
WRITE_MUL_HOLD_REGS = 0x10,
|
|
ERROR_FLAG = 0x80
|
|
}
|
|
|
|
-- MODBUS exception codes
|
|
---@enum MODBUS_EXCODE
|
|
types.MODBUS_EXCODE = {
|
|
OK = 0x00,
|
|
ILLEGAL_FUNCTION = 0x01,
|
|
ILLEGAL_DATA_ADDR = 0x02,
|
|
ILLEGAL_DATA_VALUE = 0x03,
|
|
SERVER_DEVICE_FAIL = 0x04,
|
|
ACKNOWLEDGE = 0x05,
|
|
SERVER_DEVICE_BUSY = 0x06,
|
|
NEG_ACKNOWLEDGE = 0x07,
|
|
MEMORY_PARITY_ERROR = 0x08,
|
|
GATEWAY_PATH_UNAVAILABLE = 0x0A,
|
|
GATEWAY_TARGET_TIMEOUT = 0x0B
|
|
}
|
|
|
|
--#endregion
|
|
|
|
return types
|