- `dump_odd.py`, dump all data that doesn't have the default value - `live_monitor.rb`, Allows you to scan, at a regular time, all Modbus registries of a device. - `mocli.py`, A Command Line Interface for pymodbus - `read_all_holding_registers.py`, used to scan and get values from holding registers on a TCP Modbus Slave; - `write_all_holding_registers.py`, used to write a specific value to one or multiple holding registers of a TCP Modbus Slave; - `read_register.py`, used to get values from various types of addresses on a TCP Modbus Slave (Holding Register, Discrete Input, Input Register) - `pymodmon.py`, monitor several modbus addresses with a configurable interval and can also write the received data to a csv file. - `pymodmon_3.py`, updated version of above script for python 3 - `register_scanner.py`, Script take IP as input and brute force against all the registers. Identified valid registered will be exported to excel file - `modbuspal.jar`, PC-based Modbus simulator. Its goal is to reproduce a realistic environment, with many slaves and animated register values. ## live_monitor.rb ``` Usage : ruby live_monitor.rb IP_ADDRESS TIME_IN_SECONDS ``` ## live_monitor.rb ``` Usage : python register_scanner.py -i ip_addr ``` ## read_all_holding_registers.py ``` usage: read_all_holding_registers.py [-h] [-p PORT] [-u UID] [-sa START] [-ea END] ip Read all holding registries from a TCP MODBUS Slave positional arguments: ip IP address of the slave optional arguments: -h, --help show this help message and exit -p PORT, --port PORT Modbus Port. Defaults to 502 -u UID, --uid UID Modbus Unit ID. Defaults to 1 -sa START, --start-address START Starting Address for the scanner. Defaults to 1 -ea END, --end-address END Ending Address for the scanner. Defaults to 65535 ``` ## write_all_holding_registers.py ``` usage: write_all_holding_registers.py [-h] [-p PORT] [-u UID] [-sa START] [-ea END] [-v VALUE] ip Write all holding registries on a TCP MODBUS Slave positional arguments: ip IP address of the slave optional arguments: -h, --help show this help message and exit -p PORT, --port PORT Modbus Port. Defaults to 502 -u UID, --uid UID Modbus Unit ID. Defaults to 1 -sa START, --start-address START Starting Address for the writer. Defaults to 1 -ea END, --end-address END Ending Address for the writer. Defaults to 65535 -v VALUE, --value VALUE Value that will be written. Defaults to 7777 ``` ## read_register.py ``` usage: read_register.py [-h] [-p PORT] [-u UID] [-sa START] [-ea END] [-t TYPE] ip Read specific addresses on a TCP MODBUS Slave positional arguments: ip IP address of the slave optional arguments: -h, --help show this help message and exit -p PORT, --port PORT Modbus Port. Defaults to 502 -u UID, --uid UID Modbus Unit ID. Defaults to 1 -sa START, --start-address START Starting Address for the scanner. Defaults to 1 -ea END, --end-address END Ending Address for the scanner. Defaults to 65535 -t TYPE, --type TYPE Type of Modbus address to read. Values can be 'h' for Holding, 'd' for Discrete Inputs or 'i' for Input Registers. Defaults to 'h' ``` # PyModMon Python Modbus Monitor This is a Python skript that acts as a Modbus slave. It can be used e.g. for reading data from newer solar inverters made by SMA. It has the ability to monitor several modbus addresses with a configurable interval and can also write the received data to a csv file. The logged data can then be used with other programs for analysing or plotting. Dependencies: * Python 2.7 * Python package docopt * Python package pymodbus (and dependencies) pymodmon_3.py is the updated version for Python 3 (tested with Python 3.7). No additional functionality was added.