Using Unserver to Connect to PLCs over Modbus RTU
What is Unserver?
[Unserver](https://unserver.xyz) is a software tool designed to simplify communication with Modbus
RTU networks.It’s useful as a data acquisition layer for creating HMIs and testing Modbus networks.
RTU networks.It’s useful as a data acquisition layer for creating HMIs and testing Modbus networks.
How it Works?
Unserver provides an HTTP API over a Modbus network. The API allows clients to work with Modbus data using predefined objects called “tags”. The user creates tags during configuration.
![HMI applications connect to Modbus networks via Unserver]

Each tag is a group of properties, which correspond to specific Modbus addresses.
Each property is defined with a specific data type, for example int16, BCD16 or float32.
When a client requests read/write of a tag, Unserver “translates” it into appropriate Modbus requests.
![Unserver automatically creates HTTP API based on configuration]

Getting Started
·
First, download the latest build at [Unserver official
site](https://unserver.xyz).
First, download the latest build at [Unserver official
site](https://unserver.xyz).
The trial/non-commercial license of Unserver is free.
·
To install Unserver, simply extract the installation package.
To install Unserver, simply extract the installation package.
·
Now open “network.json” in a text editor to configure the correct serial port used for Modbus connection:
Now open “network.json” in a text editor to configure the correct serial port used for Modbus connection:
“`json
“port”: {“name”: “COM1”,
“baudRate”: 9600,
“dataBits”: 8,
“parity”: “none”,
“stopBits”: 1,
“timeoutMs”: 500
}
“`
·
In the same file specify the address of one or more of your Modbus
devices:
In the same file specify the address of one or more of your Modbus
devices:
“`json
“devices”: [
{
“alias”: “plc1”,
“address”: “1”
}
]
“`
All
configuration files use JSON format, which is an easy and programmer-friendly way of specifying text-based configuration.
configuration files use JSON format, which is an easy and programmer-friendly way of specifying text-based configuration.
·
The next step is creating some tags.
The next step is creating some tags.
Open
“tags.json” and review the default tag configuration, which looks
like this:
“tags.json” and review the default tag configuration, which looks
like this:
“`json
[
{
“name”: “getting-started”, “device”:
“device1”,
“properties”: [
{
“name”: “test-property”, “address”:
“HR0”, “type”: “numeric”, “raw”:
“int16” }
“name”: “test-property”, “address”:
“HR0”, “type”: “numeric”, “raw”:
“int16” }
]
}
]
“`
·
This configuration creates a tag named `getting-started` with one
property – `test-property`.The property is mapped to the Modbus address `HR0`
as a 16-bit signed integer.
This configuration creates a tag named `getting-started` with one
property – `test-property`.The property is mapped to the Modbus address `HR0`
as a 16-bit signed integer.
·
You can edit the “address” setting if you wish to use another Modbus register.
You can edit the “address” setting if you wish to use another Modbus register.
·
Make sure to save both configuration files before continuing.
Make sure to save both configuration files before continuing.
Test Your Tag
·
Now we are ready to run Unserver.
Now we are ready to run Unserver.
· First, start `unserver.exe`. During the first run it will ask your permission to bind to an http endpoint.If the configuration is valid, you should not see any error messages in the console.
· Now make sure you PC is connected to the Modbus device via the port you specified in `network.json`
·
Open a web browser and navigate to http://localhost:9000/tags/getting-started.You should now see the value of the
tag in the browser window.
Open a web browser and navigate to http://localhost:9000/tags/getting-started.You should now see the value of the
tag in the browser window.
Build a Test Web Page
Create a file named `index.html` with the following content:
“`html
var unserver = new Unserver('http://localhost:9000');
unserver.startPolling(1000);
var value = unserver.watchProperty('getting-started.test-property',
function(value){
document.write('tag value: ' + value);
});