View Source Modbux.Rtu.Slave (Modbux v0.3.13)
API for a Modbus RTU Slave device.
Summary
Functions
Returns a specification to start this module under a supervisor.
Gets the current state of the Slave DB.
Callback implementation for GenServer.init/1
.
Send a raw frame through the serial port.
Updates the state of the Slave DB.
Starts a Modbus RTU Slave process.
Gets the Slave state.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor
.
Gets the current state of the Slave DB.
Callback implementation for GenServer.init/1
.
Send a raw frame through the serial port.
Updates the state of the Slave 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.
Starts a Modbus RTU Slave process.
The following options are available:
tty
- defines the serial port to spawn the Slave.gen_opts
- defines extra options for the Genserver OTP configuration.uart_opts
- defines extra options for the UART configuration (defaults:[speed: 115200, rx_framing_timeout: 1000]).
model
- defines the DB initial state.active
- (true
orfalse
) enable/disable DB updates notifications (mailbox).
The messages (when active mode is true) have the following form:
{:modbus_rtu, {:slave_request, payload}}
or
{:modbus_rtu, {:slave_error, payload, reason}}
The following are some reasons:
:ecrc
- corrupted message (invalid crc).:einval
- invalid function.:eaddr
- invalid memory address requested.
Model (DB)
The model or data base (DB) defines the slave 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)
Gets the Slave state.