Current version: 1.3.0      

Download 32-bit version


Download 64-bit version


Peruna in a nutshell


Peruna - Modbus/TCP router - supports16 simultaneous connections from clients to 256 (0-255) Modbus/TCP servers (slaves).

Peruna monitors incoming Modbus messages and according to UID received forwards packet to the configured IP and port.

Peruna alters original message's header by replacing the Transaction Identifier with it's own ID; HB: client ID (1 - 16), LB: message buffer's slot used (0-255). With this modification, Peruna can identify Modbus response from the server and message can be routed to the correct client connection, allowing several clients to communicate with same server via single TCP connection at the server end. And because client's TIs never passes Peruna, there is no possibility to mix the responses even if clients are using the very same TI.
Original TI is restored when response is passed back to the client.

Peruna is buffering incoming messages from clients. If standing message's 'buffer slot' gets older than 30 secs, it is reused if buffering is needed for newer messages. If buffer overflow occurs (amount of non-replied messages gets higher than 256 within 30 secs), all standing messages are discarded.
During the normal Modbus data exchange buffering is not needed, but it is nice-to-have feature in case of temporary server overload or similar reason, when server's reply is delayed and client triggers a new query/queries.

If connection to server is idle more than 30 sec, connection is closed.

When query to UID without operational TCP connection is received, Peruna tries to establish a connection according to current configuration. As long as the connection doesn't exist, Peruna returns a Modbus exception 'Gateway target device failed to respond' to every query received to that particular UID.

Configuration data can be saved. Routing parameters are stored into files marked with an extension 'peruna'.
Peruna can open peruna configuration files when path to file is used as a command line parameter (or when extension is associated to Peruna.exe).

UID (MB slave address) of passing message can be replaced by another one. Also 'read holding register' -function (FC3) can be converted to 'read input register' (FC4) and vice versa - on the fly.


Peruna.exe is given away 'as it is' - I don't take any responsibility of it, nor possible harm caused by bugs or misuse of it.

And it's freeware. Use it, spread it, distribute it - no costs whatsoever.