View Source Modbux.Tcp.Server (Modbux v0.3.11)
API for Modbus TCP Server.
Summary
Functions
Returns a specification to start this module under a supervisor.
Gets the current state of the Server DB.
Callback implementation for GenServer.handle_continue/2
.
Callback implementation for GenServer.init/1
.
Starts a Modbus TCP Server process.
Updates the state of the Server DB.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor
.
Gets the current state of the Server DB.
Callback implementation for GenServer.handle_continue/2
.
Callback implementation for GenServer.init/1
.
@spec start_link(any(), debug: [:log | :statistics | :trace | {any(), any()}], hibernate_after: :infinity | non_neg_integer(), name: atom() | {:global, any()} | {:via, atom(), any()}, spawn_opt: :link | :monitor | {:fullsweep_after, non_neg_integer()} | {:min_bin_vheap_size, non_neg_integer()} | {:min_heap_size, non_neg_integer()} | {:priority, :high | :low | :normal}, timeout: :infinity | non_neg_integer() ) :: :ignore | {:error, any()} | {:ok, pid()}
Starts a Modbus TCP Server process.
The following options are available:
port
- is the Modbux TCP Server tcp port number.timeout
- is the connection timeout.model
- defines the DB initial state.sup_otps
- server supervisor OTP options.active
- (true
orfalse
) enable/disable DB updates notifications (mailbox).
The messages (when active mode is true) have the following form:
{:modbus_tcp, {:slave_request, payload}}
Model (DB)
The model or data base (DB) defines the server memory map, the DB is defined by the following syntax:
%{slave_id => %{{memory_type, address_number} => value}}
where:
slave_id
- specifies a unique unit address from 1 to 247.memory_type
- specifies the memory between::c
- Discrete Output Coils.:i
- Discrete Input Contacts.:ir
- Analog Input Registers.:hr
- Analog Output Registers.
address_number
- specifies the memory address.value
- the current value from that memory.
Example
model = %{80 => %{{:c, 20818} => 0, {:hr, 20818} => 0}}
Modbux.Tcp.Server.start_link(model: model, port: 2000)
Updates the state of the Server DB.
cmd
is a 4 elements tuple, as follows:
{:rc, slave, address, count}
readcount
coils.{:ri, slave, address, count}
readcount
inputs.{:rhr, slave, address, count}
readcount
holding registers.{:rir, slave, address, count}
readcount
input registers.{:fc, slave, address, value}
force single coil.{:phr, slave, address, value}
preset single holding register.{:fc, slave, address, values}
force multiple coils.{:phr, slave, address, values}
preset multiple holding registers.