Modpoll Modbus Master Simulator

modpoll is a command line based Modbus master simulator and test utility. modpoll is using the FieldTalk Modbus driver.

Modpoll binaries are available for the following systems:

  • Windows PCs
  • Linux PCs
  • Raspberry Pi, BeagleBoard and other ARM based Linux devices
Modbus Master simulator
modpoll execution from command line
modpoll-3.6.zip
modpoll-3.6.tgz
System Requirements
  • Windows (x86, x64)
  • Linux (ARM eabihf, x86, x86_64)
License This program is free software; you can use it and redistribute it under the terms of the accompanying License document.

Installation

Windows

Download into a folder and extract the zip archive. The modpoll.exe command must be run from a Command Prompt:
cd modpoll
win\modpoll -h

Linux

Download into a folder. Then unpack the tarball:
tar xzf modpoll-3.6.tgz
The tarball contains multiple binaries for different CPU architectures. Run the version matching your system from the command line. Example for Raspberry Pi:
cd modpoll
linux_arm-eabihf/modpoll -h

Usage

Usage: modpoll [OPTIONS] SERIALPORT|HOST [WRITEVALUES...]
Arguments:
SERIALPORT    Serial port when using Modbus ASCII or Modbus RTU protocol
              COM1, COM2 ...                on Windows
              /dev/ttyS0, /dev/ttyS1 ...    on Linux
HOST          Host name or dotted IP address when using MODBUS/TCP protocol
General options:
-m ascii      Modbus ASCII protocol
-m rtu        Modbus RTU protocol (default if SERIALPORT contains /, \\ or COM)
-m tcp        MODBUS/TCP protocol (default otherwise)
-m udp        MODBUS UDP
-m enc        Encapsulated Modbus RTU over TCP
-a #          Slave address (1-255 for serial, 0-255 for TCP, 1 is default)\n
-r #          Start reference (1-65536, 1 is default)
-c #          Number of values to poll (1-125, 1 is default)
-t 0          Discrete output (coil) data type
-t 1          Discrete input data type
-t 3          16-bit input register data type
-t 3:hex      16-bit input register data type with hex display
-t 3:int      32-bit integer data type in input register table
-t 3:mod      32-bit module 10000 data type in input register table
-t 3:float    32-bit float data type in input register table
-t 4          16-bit output (holding) register data type (default)
-t 4:hex      16-bit output (holding) register data type with hex display
-t 4:int      32-bit integer data type in output (holding) register table
-t 4:mod      32-bit module 10000 type in output (holding) register table
-t 4:float    32-bit float data type in output (holding) register table
-i            Slave operates on big-endian 32-bit integers
-f            Slave operates on big-endian 32-bit floats
-e            Use Daniel/Enron single register 32-bit mode
-0            First reference is 0 (PDU addressing) instead 1
-1            Poll only once only, otherwise every poll rate interval
-l            Poll rate in ms, (1000 is default)
-o #          Time-out in seconds (0.01 - 10.0, 1.0 s is default)
Options for MODBUS/TCP, UDP and RTU over TCP:
-p #          IP protocol port number (502 is default)
Options for Modbus ASCII and Modbus RTU:
-b #          Baudrate (e.g. 9600, 19200, ...) (19200 is default)
-d #          Databits (7 or 8 for ASCII protocol, 8 for RTU)
-s #          Stopbits (1 or 2, 1 is default)
-p none       No parity
-p even       Even parity (default)
-p odd        Odd parity
-4 #          RS-485 mode, RTS on while transmitting and another # ms after

Usage Examples

To get help on usage run the following command:
modpoll -h
To retrieve continuously 10 Modbus holding registers starting from reference 500 of slave ID number 5 with Modbus RTU at 9600 baud, no parity on COM1 run:
modpoll -b 9600 -p none -m rtu -a 3 -r 500 -c 10 COM1
To retrieve once 5 floating point values starting from reference 100 with Modbus/TCP from slave device with IP 10.0.0.100:
modpoll -m tcp -t4:float -r 100 -c 5 -1 10.0.0.100