Modbus Client is an interactive Modbus communication tool. Modbus Client can be used as:
-
A command line interactive repl. The repl can be started using the
-r
command line flag.The following command will start a repl connected to a Modbus TCP server listening to IP address 192.168.1.2 and Port 502
> modbus-client -r --TCP --ip 192.168.2.1 --port 502
A valid connection to a Modbus server is necessary to start the Modbus Client repl
-
An HTML GUI that can be accessed locally at
http://localhost:4000
.The following command will start a local web server and try to open the default browser at
http://localhost:4000
> modbus-client -s
The Modbus Client GUI can be started without an already established connection to a Modbus Server. If the server is not able to automatically staret your web browser, please visit
http://localhost:4000
manually. -
A command line tool to read Modbus registers from a template file
The following command will connect to a Modbus TCP server listening to IP address 192.168.1.2 and Port 502 and query all registers found on
input.csv
file outputing the result tooutput.csv
> modbus-client -t --TCP --ip 192.168.2.1 --port 502 --i input.csv -o output.csv
A valid connection to a Modbus server is necessary to start the Modbusclient repl
For more information on availiable commands and options, use the -h, --help
flags
> modbus-client --help
Modbus Client uses a registers table format to make working with multiple registers easier.
The registers table is a colon seperated csv file. You can find a sample table in the in the installation folder called sample.csv
.
The following raw csv file
Name;Register Type;Register Address;Data Type;Data Value;Unit Id;Description
status;input register;10;Word;1;1;0 = device is stopped, 1 = device is running
command;holding register;10;Word;0;1;0 = stop device, 1 = start device
setpoint;holding register;15;Float;;1;power setpoint
temperature;input register;20;Double;35.2;1;device temperature
alarms;input register;22;Bits;0001100100110101;1;alarms
corresponds to the register table below:
Name | Register Type | Register Address | Data Type | Data Value | Unit Id | Description |
---|---|---|---|---|---|---|
status | Input Register | 10 | Word | 1 | 0 = device is stopped, 1 = device is running | |
command | Holding Register | 10 | Word | 1 | 1 | 0 = stop device, 1 = start device |
setpoint | Holding Register | 15 | Float | 3.14 | 1 | power setpoint |
temperature | Input Register | 20 | Double | 1 | device temperature | |
alarms | Input Register | 22 | Bits | 1 | device alarms |
The first line of a registers table csv file is always ignored and is only used as column header information. Each subsequent row is parsed by Modbus Client using the parsing rules described below:
The name field serves as an identifier for the register. The following naming rules apply:
- A name field cannot start with a numeric value
- No special characters are allowed, except an underscore "_"
- Only uppercase or lowercase alphabetic ASCII characters are allowed
Valid register types:
Input Register
Holding Register
Capitalization is ignored when parsing the register type field, eg INPUT REGISTER
and input register
are both valid fields.
For more information on Modbus register types see the Modbus Application Protocol
Modbus protocol based address for the register. In the case of registers with multiple addresses (eg Float or Double) the address field defines the lowest address.
Word
: A 16-bit WordFloat
: A 32-bit floating point number (2 words)Double
: A 64-bit floating point number (4 words)
Capitalization is ignored when parsing the data type field, eg Word
, word
and WORD
are valid fields.
For word ordering on types with more than one word represenatation, see Word Ordering
Initial value for a register. The field can be left empty. Only usefull when defining default values. When reading registers, this value will be overwritten, so keeping the field empty is usually sufficient.
Unit Id of the Modbus Server assigned to the register.
Description of the register. Cannot contain line breaks or a colon character (;).
Word order defines the order of input words for data values that require multiple words for thei represenatation (eg. Float Word). According to the Modbus Application Protocol:
MODBUS uses a ‘big-Endian’ representation for addresses and data items. This means that when a numerical quantity larger than a single byte is transmitted, the most significant byte is sent first.
Conforming to this requirement, Modbus Client always uses a 'big-endian' representaion for the 16-bit word type. In order to allow for some flexibility, for data values requiring more than one word value, a choice between 'little-endian' and 'big-endian' representation can be made.
Example:
Four word values layout out in four input registers as follows:
Word Address | 0 | 1 | 2 | 3 |
---|---|---|---|---|
Word | 0x01 | 0x23 | 0x45 | 0x67 |
will be interpreted as a Double value:
- Little Endian :
0x67452301
- Big Endian :
0x01234567
Modbus-Client is an open source project. You can download and built the project at the source repository.
To build Modbus Client on Linux and Windows you will need the following tools installed:
- The Haskell Tool Stack - version >=2.5.1
- Elm - version 0.19.1
- Rust - version >= 1.47.0 . Only for building the Modbus test server
- NSIS. Only for building Modbus Client on Windows. You will need to add the NSIS folder to your path after installation
You can use the provided build.hs
script to build Modbus Client backend and frontend along with a Modbus test server, as well as Linux and Windows installers. The script can only be run inside the application's root folder.
Linux:
> ./build.hs
Windows:
> stack runghc .\build.hs