Modbux.Rtu.Slave (Modbux v0.3.14)
View SourceAPI 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}readcountcoils.{:ri, slave, address, count}readcountinputs.{:rhr, slave, address, count}readcountholding registers.{:rir, slave, address, count}readcountinput 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- (trueorfalse) 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.