REPL

Dependencies

Depends on prompt_toolkit and click

Install dependencies

$ pip install click prompt_toolkit --upgrade

Or Install pymodbus with repl support

$ pip install pymodbus[repl] --upgrade

Usage Instructions

RTU and TCP are supported as of now

bash-3.2$ pymodbus.console
Usage: pymodbus.console [OPTIONS] COMMAND [ARGS]...

Options:
  --version       Show the version and exit.
  --verbose       Verbose logs
  --support-diag  Support Diagnostic messages
  --help          Show this message and exit.

Commands:
  serial
  tcp

TCP Options

bash-3.2$ pymodbus.console tcp --help
Usage: pymodbus.console tcp [OPTIONS]

Options:
  --host TEXT     Modbus TCP IP
  --port INTEGER  Modbus TCP port
  --help          Show this message and exit.

SERIAL Options

bash-3.2$ pymodbus.console serial --help
Usage: pymodbus.console serial [OPTIONS]

Options:
  --method TEXT          Modbus Serial Mode (rtu/ascii)
  --port TEXT            Modbus RTU port
  --baudrate INTEGER     Modbus RTU serial baudrate to use.
  --bytesize [5|6|7|8]   Modbus RTU serial Number of data bits. Possible
                         values: FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS.
  --parity [N|E|O|M|S]   Modbus RTU serial parity.  Enable parity checking.
                         Possible values: PARITY_NONE, PARITY_EVEN, PARITY_ODD
                         PARITY_MARK, PARITY_SPACE. Default to 'N'
  --stopbits [1|1.5|2]   Modbus RTU serial stop bits. Number of stop bits.
                         Possible values: STOPBITS_ONE,
                         STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO. Default to '1'
  --xonxoff INTEGER      Modbus RTU serial xonxoff.  Enable software flow
                         control.
  --rtscts INTEGER       Modbus RTU serial rtscts. Enable hardware (RTS/CTS)
                         flow control.
  --dsrdtr INTEGER       Modbus RTU serial dsrdtr. Enable hardware (DSR/DTR)
                         flow control.
  --timeout FLOAT        Modbus RTU serial read timeout.
  --write-timeout FLOAT  Modbus RTU serial write timeout.
  --help                 Show this message and exit.

To view all available commands type help

TCP

$ pymodbus.console tcp --host 192.168.128.126 --port 5020

> help
Available commands:
client.change_ascii_input_delimiter          Diagnostic sub command, Change message delimiter for future requests.
client.clear_counters                        Diagnostic sub command, Clear all counters and diag registers.
client.clear_overrun_count                   Diagnostic sub command, Clear over run counter.
client.close                                 Closes the underlying socket connection
client.connect                               Connect to the modbus tcp server
client.debug_enabled                         Returns a boolean indicating if debug is enabled.
client.force_listen_only_mode                Diagnostic sub command, Forces the addressed remote device to         its Listen Only Mode.
client.get_clear_modbus_plus                 Diagnostic sub command, Get or clear stats of remote          modbus plus device.
client.get_com_event_counter                 Read  status word and an event count from the remote device's         communication event counter.
client.get_com_event_log                     Read  status word, event count, message count, and a field of event bytes from the remote device.
client.host                                  Read Only!
client.idle_time                             Bus Idle Time to initiate next transaction
client.is_socket_open                        Check whether the underlying socket/serial is open or not.
client.last_frame_end                        Read Only!
client.mask_write_register                   Mask content of holding register at `address`          with `and_mask` and `or_mask`.
client.port                                  Read Only!
client.read_coils                            Reads `count` coils from a given slave starting at `address`.
client.read_device_information               Read the identification and additional information of remote slave.
client.read_discrete_inputs                  Reads `count` number of discrete inputs starting at offset `address`.
client.read_exception_status                 Read the contents of eight Exception Status outputs in a remote          device.
client.read_holding_registers                Read `count` number of holding registers starting at `address`.
client.read_input_registers                  Read `count` number of input registers starting at `address`.
client.readwrite_registers                   Read `read_count` number of holding registers starting at         `read_address`  and write `write_registers`         starting at `write_address`.
client.report_slave_id                       Report information about remote slave ID.
client.restart_comm_option                   Diagnostic sub command, initialize and restart remote devices serial         interface and clear all of its communications event counters .
client.return_bus_com_error_count            Diagnostic sub command, Return count of CRC errors         received by remote slave.
client.return_bus_exception_error_count      Diagnostic sub command, Return count of Modbus exceptions         returned by remote slave.
client.return_bus_message_count              Diagnostic sub command, Return count of message detected on bus          by remote slave.
client.return_diagnostic_register            Diagnostic sub command, Read 16-bit diagnostic register.
client.return_iop_overrun_count              Diagnostic sub command, Return count of iop overrun errors         by remote slave.
client.return_query_data                     Diagnostic sub command , Loop back data sent in response.
client.return_slave_bus_char_overrun_count   Diagnostic sub command, Return count of messages not handled          by remote slave due to character overrun condition.
client.return_slave_busy_count               Diagnostic sub command, Return count of server busy exceptions sent          by remote slave.
client.return_slave_message_count            Diagnostic sub command, Return count of messages addressed to         remote slave.
client.return_slave_no_ack_count             Diagnostic sub command, Return count of NO ACK exceptions sent          by remote slave.
client.return_slave_no_response_count        Diagnostic sub command, Return count of No responses  by remote slave.
client.silent_interval                       Read Only!
client.state                                 Read Only!
client.timeout                               Read Only!
client.write_coil                            Write `value` to coil at `address`.
client.write_coils                           Write `value` to coil at `address`.
client.write_register                        Write `value` to register at `address`.
client.write_registers                       Write list of `values` to registers starting at `address`.

SERIAL

$ pymodbus.console serial --port /dev/ttyUSB0 --baudrate 19200 --timeout 2
> help
Available commands:
client.baudrate                              Read Only!
client.bytesize                              Read Only!
client.change_ascii_input_delimiter          Diagnostic sub command, Change message delimiter for future requests.
client.clear_counters                        Diagnostic sub command, Clear all counters and diag registers.
client.clear_overrun_count                   Diagnostic sub command, Clear over run counter.
client.close                                 Closes the underlying socket connection
client.connect                               Connect to the modbus serial server
client.debug_enabled                         Returns a boolean indicating if debug is enabled.
client.force_listen_only_mode                Diagnostic sub command, Forces the addressed remote device to         its Listen Only Mode.
client.get_baudrate                          Serial Port baudrate.
client.get_bytesize                          Number of data bits.
client.get_clear_modbus_plus                 Diagnostic sub command, Get or clear stats of remote          modbus plus device.
client.get_com_event_counter                 Read  status word and an event count from the remote device's         communication event counter.
client.get_com_event_log                     Read  status word, event count, message count, and a field of event bytes from the remote device.
client.get_parity                            Enable Parity Checking.
client.get_port                              Serial Port.
client.get_serial_settings                   Gets Current Serial port settings.
client.get_stopbits                          Number of stop bits.
client.get_timeout                           Serial Port Read timeout.
client.idle_time                             Bus Idle Time to initiate next transaction
client.inter_char_timeout                    Read Only!
client.is_socket_open                        c l i e n t . i s   s o c k e t   o p e n
client.mask_write_register                   Mask content of holding register at `address`          with `and_mask` and `or_mask`.
client.method                                Read Only!
client.parity                                Read Only!
client.port                                  Read Only!
client.read_coils                            Reads `count` coils from a given slave starting at `address`.
client.read_device_information               Read the identification and additional information of remote slave.
client.read_discrete_inputs                  Reads `count` number of discrete inputs starting at offset `address`.
client.read_exception_status                 Read the contents of eight Exception Status outputs in a remote          device.
client.read_holding_registers                Read `count` number of holding registers starting at `address`.
client.read_input_registers                  Read `count` number of input registers starting at `address`.
client.readwrite_registers                   Read `read_count` number of holding registers starting at         `read_address`  and write `write_registers`         starting at `write_address`.
client.report_slave_id                       Report information about remote slave ID.
client.restart_comm_option                   Diagnostic sub command, initialize and restart remote devices serial         interface and clear all of its communications event counters .
client.return_bus_com_error_count            Diagnostic sub command, Return count of CRC errors         received by remote slave.
client.return_bus_exception_error_count      Diagnostic sub command, Return count of Modbus exceptions         returned by remote slave.
client.return_bus_message_count              Diagnostic sub command, Return count of message detected on bus          by remote slave.
client.return_diagnostic_register            Diagnostic sub command, Read 16-bit diagnostic register.
client.return_iop_overrun_count              Diagnostic sub command, Return count of iop overrun errors         by remote slave.
client.return_query_data                     Diagnostic sub command , Loop back data sent in response.
client.return_slave_bus_char_overrun_count   Diagnostic sub command, Return count of messages not handled          by remote slave due to character overrun condition.
client.return_slave_busy_count               Diagnostic sub command, Return count of server busy exceptions sent          by remote slave.
client.return_slave_message_count            Diagnostic sub command, Return count of messages addressed to         remote slave.
client.return_slave_no_ack_count             Diagnostic sub command, Return count of NO ACK exceptions sent          by remote slave.
client.return_slave_no_response_count        Diagnostic sub command, Return count of No responses  by remote slave.
client.set_baudrate                          Baudrate setter.
client.set_bytesize                          Byte size setter.
client.set_parity                            Parity Setter.
client.set_port                              Serial Port setter.
client.set_stopbits                          Stop bit setter.
client.set_timeout                           Read timeout setter.
client.silent_interval                       Read Only!
client.state                                 Read Only!
client.stopbits                              Read Only!
client.timeout                               Read Only!
client.write_coil                            Write `value` to coil at `address`.
client.write_coils                           Write `value` to coil at `address`.
client.write_register                        Write `value` to register at `address`.
client.write_registers                       Write list of `values` to registers starting at `address`.
result.decode                                Decode the register response to known formatters.
result.raw                                   Return raw result dict.

Every command has auto suggestion on the arguments supported, arg and value are to be supplied in arg=val format.

> client.read_holding_registers count=4 address=9 slave=1
{
    "registers": [
        60497,
        47134,
        34091,
        15424
    ]
}

The last result could be accessed with result.raw command

> result.raw
{
    "registers": [
        15626,
        55203,
        28733,
        18368
    ]
}

For Holding and Input register reads, the decoded value could be viewed with result.decode

> result.decode word_order=little byte_order=little formatters=float64
28.17

>

Client settings could be retrieved and altered as well.

> # For serial settings

> # Check the serial mode
> client.method
"rtu"

> client.get_serial_settings
{
    "t1.5": 0.00171875,
    "baudrate": 9600,
    "read timeout": 0.5,
    "port": "/dev/ptyp0",
    "t3.5": 0.00401,
    "bytesize": 8,
    "parity": "N",
    "stopbits": 1.0
}
> client.set_timeout value=1
null

> client.get_timeout
1.0

> client.get_serial_settings
{
    "t1.5": 0.00171875,
    "baudrate": 9600,
    "read timeout": 1.0,
    "port": "/dev/ptyp0",
    "t3.5": 0.00401,
    "bytesize": 8,
    "parity": "N",
    "stopbits": 1.0
}

DEMO

REPL client classes

Modbus Clients to be used with REPL.

class pymodbus.repl.client.mclient.ExtendedRequestSupport

Bases: object

Extended request support.

change_ascii_input_delimiter(data=0, **kwargs)

Change message delimiter for future requests.

Parameters:
  • data – New delimiter character

  • kwargs

Returns:

clear_counters(data=0, **kwargs)

Clear all counters and diag registers.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

clear_overrun_count(data=0, **kwargs)

Clear over run counter.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

force_listen_only_mode(data=0, **kwargs)

Force addressed remote device to its Listen Only Mode.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

get_clear_modbus_plus(data=0, **kwargs)

Get/clear stats of remote modbus plus device.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

get_com_event_counter(**kwargs)

Read status word and an event count.

From the remote device’s communication event counter.

Parameters:

kwargs

Returns:

get_com_event_log(**kwargs)

Read status word.

Event count, message count, and a field of event bytes from the remote device.

Parameters:

kwargs

Returns:

mask_write_register(address=0, and_mask=65535, or_mask=0, slave=0, **kwargs)

Mask content of holding register at address with and_mask and or_mask.

Parameters:
  • address – Reference address of register

  • and_mask – And Mask

  • or_mask – OR Mask

  • slave – Modbus slave slave ID

  • kwargs

Returns:

read_coils(address, count=1, slave=0, **kwargs)

Read count coils from a given slave starting at address.

Parameters:
  • address – The starting address to read from

  • count – The number of coils to read

  • slave – Modbus slave slave ID

  • kwargs

Returns:

List of register values

read_device_information(read_code=None, object_id=0, **kwargs)

Read the identification and additional information of remote slave.

Parameters:
  • read_code – Read Device ID code (0x01/0x02/0x03/0x04)

  • object_id – Identification of the first object to obtain.

  • kwargs

Returns:

read_discrete_inputs(address, count=1, slave=0, **kwargs)

Read count number of discrete inputs starting at offset address.

Parameters:
  • address – The starting address to read from

  • count – The number of coils to read

  • slave – Modbus slave slave ID

  • kwargs

Returns:

List of bits

read_exception_status(slave=0, **kwargs)

Read contents of eight Exception Status output in a remote device.

Parameters:
  • slave – Modbus slave ID

  • kwargs

Returns:

read_holding_registers(address, count=1, slave=0, **kwargs)

Read count number of holding registers starting at address.

Parameters:
  • address – starting register offset to read from

  • count – Number of registers to read

  • slave – Modbus slave slave ID

  • kwargs

Returns:

read_input_registers(address, count=1, slave=0, **kwargs)

Read count number of input registers starting at address.

Parameters:
  • address – starting register offset to read from to

  • count – Number of registers to read

  • slave – Modbus slave slave ID

  • kwargs

Returns:

readwrite_registers(read_address=0, read_count=0, write_address=0, values=0, slave=0, **kwargs)

Read read_count number of holding registers.

Starting at read_address and write write_registers starting at write_address.

Parameters:
  • read_address – register offset to read from

  • read_count – Number of registers to read

  • write_address – register offset to write to

  • values – List of register values to write (comma separated)

  • slave – Modbus slave slave ID

  • kwargs

Returns:

report_slave_id(slave=0, **kwargs)

Report information about remote slave ID.

Parameters:
  • slave – Modbus slave ID

  • kwargs

Returns:

restart_comm_option(toggle=False, **kwargs)

Initialize and restart remote devices.

Serial interface and clear all of its communications event counters.

Parameters:
  • toggle – Toggle Status [ON(0xff00)/OFF(0x0000]

  • kwargs

Returns:

return_bus_com_error_count(data=0, **kwargs)

Return count of CRC errors received by remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_bus_exception_error_count(data=0, **kwargs)

Return count of Modbus exceptions returned by remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_bus_message_count(data=0, **kwargs)

Return count of message detected on bus by remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_diagnostic_register(data=0, **kwargs)

Read 16-bit diagnostic register.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_iop_overrun_count(data=0, **kwargs)

Return count of iop overrun errors by remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_query_data(message=0, **kwargs)

Loop back data sent in response.

Parameters:
  • message – Message to be looped back

  • kwargs

Returns:

return_slave_bus_char_overrun_count(data=0, **kwargs)

Return count of messages not handled.

By remote slave due to character overrun condition.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_slave_busy_count(data=0, **kwargs)

Return count of server busy exceptions sent by remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_slave_message_count(data=0, **kwargs)

Return count of messages addressed to remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_slave_no_ack_count(data=0, **kwargs)

Return count of NO ACK exceptions sent by remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

return_slave_no_response_count(data=0, **kwargs)

Return count of No responses by remote slave.

Parameters:
  • data – Data field (0x0000)

  • kwargs

Returns:

write_coil(address, value, slave=0, **kwargs)

Write value to coil at address.

Parameters:
  • address – coil offset to write to

  • value – bit value to write

  • slave – Modbus slave slave ID

  • kwargs

Returns:

write_coils(address, values, slave=0, **kwargs)

Write value to coil at address.

Parameters:
  • address – coil offset to write to

  • values – list of bit values to write (comma separated)

  • slave – Modbus slave slave ID

  • kwargs

Returns:

write_register(address, value, slave=0, **kwargs)

Write value to register at address.

Parameters:
  • address – register offset to write to

  • value – register value to write

  • slave – Modbus slave slave ID

  • kwargs

Returns:

write_registers(address, values, slave=0, **kwargs)

Write list of values to registers starting at address.

Parameters:
  • address – register offset to write to

  • values – list of register value to write (comma separated)

  • slave – Modbus slave slave ID

  • kwargs

Returns:

class pymodbus.repl.client.mclient.ModbusSerialClient(framer, **kwargs)

Bases: ExtendedRequestSupport, ModbusSerialClient

Modbus serial client.

get_baudrate()

Get serial Port baudrate.

Returns:

Current baudrate

get_bytesize()

Get number of data bits.

Returns:

Current bytesize

get_parity()

Enable Parity Checking.

Returns:

Current parity setting

get_port()

Get serial Port.

Returns:

Current Serial port

get_serial_settings()

Get Current Serial port settings.

Returns:

Current Serial settings as dict.

get_stopbits()

Get number of stop bits.

Returns:

Current Stop bits

get_timeout()

Get serial Port Read timeout.

Returns:

Current read imeout.

set_baudrate(value)

Set baudrate setter.

Parameters:

value – <supported baudrate>

set_bytesize(value)

Set Byte size.

Parameters:

value – Possible values (5, 6, 7, 8)

set_parity(value)

Set parity Setter.

Parameters:

value – Possible values (“N”, “E”, “O”, “M”, “S”)

set_port(value)

Set serial Port setter.

Parameters:

value – New port

set_stopbits(value)

Set stop bit.

Parameters:

value – Possible values (1, 1.5, 2)

set_timeout(value)

Read timeout setter.

Parameters:

value – Read Timeout in seconds

class pymodbus.repl.client.mclient.ModbusTcpClient(**kwargs)

Bases: ExtendedRequestSupport, ModbusTcpClient

TCP client.

pymodbus.repl.client.mclient.handle_brodcast(func)

Handle broadcast.

pymodbus.repl.client.mclient.make_response_dict(resp)

Make response dict.

REPL server classes

Pymodbus REPL (Read Evaluate Print Loop)

Warning The Pymodbus REPL documentation is not updated.

Pymodbus REPL Client

Pymodbus REPL comes with many handy features such as payload decoder to directly retrieve the values in desired format and supports all the diagnostic function codes directly .

For more info on REPL Client refer Pymodbus REPL Client

https://asciinema.org/a/y1xOk7lm59U1bRBE2N1pDIj2o.png

Pymodbus REPL Server

Pymodbus also comes with a REPL server to quickly run an asynchronous server with additional capabilities out of the box like simulating errors, delay, mangled messages etc.

For more info on REPL Server refer Pymodbus REPL Server

https://img.youtube.com/vi/OutaVz0JkWg/maxresdefault.jpg