Solis Datalogging Stick
Setup
- Connect the Solis Datalogging Stick to a Solis inverter
- Make sure the baud rate is set to
9600on both the Solis inverter and the Solis Datalogging Stick - Find the ip address of the Solis Datalogging Stick (port
80and8899are used by default)
Configuration
There are two webpages available on the Solis Datalogging Stick:
http://<ip-address>/- Configuration pagehttp://<ip-address>/config_hide.html- Advanced configuration page
Advanced configuration page
Working mode
Working mode can be set to Data collection or Transparency. The default is Data collection.
Modbus TCP
The Solis Datalogging Stick can be used as a Modbus TCP server. The following settings are used by default:
- Protocol:
TCP-Server - Port:
8899 - Server address:
10.10.100.254 - TCP time out setting (max 600s):
300
These settings can be changed on the advanced configuration page.
Data collection
Working mode: Data collection
Connected to Modbus server in 2ms
+----+-----+----------+-------------+---------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+----+-----+----------+-------------+---------+---------------+
| 1 | 1 | 4 | 2 | [32 48] | 252ms |
| 2 | 1 | 4 | 2 | [1 76] | 301ms |
| 3 | 1 | 4 | 2 | [1 76] | 301ms |
| 4 | 1 | 4 | 2 | [1 76] | 301ms |
| 5 | 1 | 4 | 2 | [1 76] | 301ms |
| 6 | 1 | 4 | 2 | [1 76] | 301ms |
| 7 | 1 | 4 | 2 | [1 76] | 291ms |
| 8 | 1 | 4 | 2 | [1 76] | 804ms |
| 9 | 1 | 4 | 2 | [1 76] | 301ms |
| 10 | 1 | 4 | 2 | [1 76] | 301ms |
| 11 | 1 | 4 | 2 | [1 76] | 301ms |
| 12 | 1 | 4 | 2 | [1 76] | 794ms |
| 13 | 1 | 4 | 2 | [1 76] | 301ms |
| 14 | 1 | 4 | 2 | [1 76] | 301ms |
| 15 | 1 | 4 | 2 | [1 76] | 301ms |
| 16 | 1 | 4 | 2 | [1 76] | 301ms |
| 17 | 1 | 4 | 2 | [1 76] | 291ms |
| 18 | 1 | 4 | 2 | [1 76] | 301ms |
| 19 | 1 | 4 | 2 | [1 76] | 301ms |
| 20 | 1 | 4 | 2 | [1 76] | 301ms |
| 21 | 1 | 4 | 2 | [1 76] | 291ms |
| 22 | 1 | 4 | 2 | [1 76] | 301ms |
| 23 | 1 | 4 | 2 | [1 76] | 301ms |
| 24 | 1 | 4 | 2 | [1 76] | 301ms |
| 25 | 1 | 4 | 2 | [1 76] | 301ms |
| 26 | 1 | 4 | 2 | [1 76] | 301ms |
| 27 | 1 | 4 | 2 | [1 76] | 291ms |
+----+-----+----------+-------------+---------+---------------+
| 27 | | | | | 9.054S |
+----+-----+----------+-------------+---------+---------------+
Working mode: Transparency
Connected to Modbus server in 2ms
read tcp 172.23.177.22:55324->172.23.177.17:8899: i/o timeout
read tcp 172.23.177.22:55324->172.23.177.17:8899: i/o timeout
+---+-----+----------+-------------+-----------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+---+-----+----------+-------------+-----------+---------------+
| 0 | 0 | 0 | 0 | [0 0 0 0] | 10.001s |
| 0 | 0 | 0 | 0 | [0 0 0 0] | 10s |
+---+-----+----------+-------------+-----------+---------------+
| 2 | | | | | 20.001S |
+---+-----+----------+-------------+-----------+---------------+
Transparency mode disables the Modbus TCP server? But the port is still open.
Working mode: Data collection + Server filled in
Connected to Modbus server in 0s
+---+-----+----------+-------------+--------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+---+-----+----------+-------------+--------+---------------+
| 1 | 1 | 4 | 2 | [1 90] | 805ms |
| 2 | 1 | 4 | 2 | [1 90] | 2.807s |
| 3 | 1 | 4 | 2 | [1 90] | 2.797s |
| 4 | 1 | 4 | 2 | [1 90] | 1.801s |
| 5 | 1 | 4 | 2 | [1 90] | 1.297s |
+---+-----+----------+-------------+--------+---------------+
| 5 | | | | | 9.509S |
+---+-----+----------+-------------+--------+---------------+
Working mode: Transparency + Server not filled in
Connected to Modbus server in 1ms
+---+-----+----------+-------------+--------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+---+-----+----------+-------------+--------+---------------+
| 1 | 1 | 4 | 2 | [1 90] | 246ms |
| 2 | 1 | 4 | 2 | [1 91] | 291ms |
| 3 | 1 | 4 | 2 | [1 91] | 301ms |
| 4 | 1 | 4 | 2 | [1 90] | 301ms |
| 5 | 1 | 4 | 2 | [1 90] | 301ms |
+---+-----+----------+-------------+--------+---------------+
| 5 | | | | | 1.443S |
+---+-----+----------+-------------+--------+---------------+
Working mode: Data collection + Server not filled in + 3 Modbus TCP clients
Connected to Modbus server in 1ms
+---+-----+----------+-------------+--------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+---+-----+----------+-------------+--------+---------------+
| 1 | 1 | 4 | 2 | [1 91] | 299ms |
| 2 | 1 | 4 | 2 | [1 91] | 301ms |
| 3 | 1 | 4 | 2 | [1 91] | 301ms |
| 4 | 1 | 4 | 2 | [1 91] | 301ms |
| 5 | 1 | 4 | 2 | [1 91] | 291ms |
+---+-----+----------+-------------+--------+---------------+
| 5 | | | | | 1.497S |
+---+-----+----------+-------------+--------+---------------+
Connected to Modbus server in 1ms
+----+-----+----------+-------------+--------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+----+-----+----------+-------------+--------+---------------+
| 11 | 1 | 4 | 2 | [1 91] | 299ms |
| 12 | 1 | 4 | 2 | [1 91] | 301ms |
| 13 | 1 | 4 | 2 | [1 91] | 301ms |
| 14 | 1 | 4 | 2 | [1 91] | 301ms |
| 15 | 1 | 4 | 2 | [1 91] | 291ms |
+----+-----+----------+-------------+--------+---------------+
| 15 | | | | | 1.497S |
+----+-----+----------+-------------+--------+---------------+
Connected to Modbus server in 1ms
+----+-----+----------+-------------+--------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+----+-----+----------+-------------+--------+---------------+
| 21 | 1 | 4 | 2 | [1 91] | 299ms |
| 22 | 1 | 4 | 2 | [1 91] | 301ms |
| 23 | 1 | 4 | 2 | [1 91] | 301ms |
| 24 | 1 | 4 | 2 | [1 91] | 301ms |
| 25 | 1 | 4 | 2 | [1 91] | 301ms |
+----+-----+----------+-------------+--------+---------------+
| 25 | | | | | 1.507S |
+----+-----+----------+-------------+--------+---------------+
Working mode: Data collection + Server not filled in + 2 parallel Modbus TCP clients
Connected to Modbus server in 2ms
2023/01/27 13:19:40 Tx: 000100000006010481450001
Connected to Modbus server in 2ms
2023/01/27 13:19:40 Tx: 000200000006010481450001
[0 2 0 0 0 5 1 4 2 1 104] 253ms
Disconnected from Modbus server at 255ms
read tcp 172.23.177.22:56712->172.23.177.17:8899: i/o timeout
[0 0 0 0 0 0 0 0 0 0 0 0 0] 5.001s
Disconnected from Modbus server at 5.003s
Done in 5.003s
+---+-----+----------+-------------+-----------+---------------+
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
+---+-----+----------+-------------+-----------+---------------+
| 2 | 1 | 4 | 2 | [1 104] | 253ms |
| 0 | 0 | 0 | 0 | [0 0 0 0] | 5.001s |
+---+-----+----------+-------------+-----------+---------------+
| | | | | | 5.003S |
+---+-----+----------+-------------+-----------+---------------+
Conclusion
The Modbus TCP server can only work with one client at a time. Therefore, all requests come one after another so you have to take about +300ms per address. This can become very slow if you have a lot of addresses.
All remote servers should be removed from the Modbus TCP server to properly work with an avg base response time of 300ms.
The first hypothesis was that those remote servers were slow or blocked by the firewall and that's why the Modbus TCP server was slow.
But it turns out that even with a local "remote server" the Modbus TCP server is still slow.
Solutions
Request multiple subsequent addresses at once by increasing the quantity
It takes the same amount of time to request 6 addresses as it does to request 1 address.
Connected to Modbus server in 1ms
2023/01/27 13:29:50 Tx: 000600000006010481730006
2023/01/27 13:29:51 Tx: 000700000006010481730006
2023/01/27 13:29:51 Tx: 000800000006010481730006
2023/01/27 13:29:51 Tx: 000900000006010481730006
2023/01/27 13:29:52 Tx: 000a00000006010481730006
Done in 1.497s
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
|---|---|---|---|---|---|
| 6 | 1 | 4 | 12 | 0 99 0 100 19 207 0 7 0 100 0 250 | 309ms |
| 7 | 1 | 4 | 12 | 0 99 0 100 19 207 0 7 0 100 0 250 | 291ms |
| 8 | 1 | 4 | 12 | 0 99 0 100 19 207 0 7 0 100 0 250 | 291ms |
| 9 | 1 | 4 | 12 | 0 99 0 100 19 207 0 7 0 100 0 250 | 301ms |
| 10 | 1 | 4 | 12 | 0 99 0 100 19 207 0 7 0 100 0 250 | 301ms |
| 10 | 1.497S |
Start address is 33049 and end address is 33149, this means that we request 200 bytes in one packet.
Connected to Modbus server in 1ms
2023/01/27 13:41:26 Tx: 000100000006010481190064
Done in 467ms
| # | UID | FUNCTION | DATA LENGTH | DATA | RESPONSE TIME |
|---|---|---|---|---|---|
| 1 | 1 | 4 | 200 | 0 20 0 1 0 15 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 161 0 8 0 0 15 75 0 0 8 248 0 0 0 0 0 22 0 0 0 0 255 255 255 156 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 53 1 77 19 139 0 3 248 47 0 0 0 8 0 0 0 0 0 0 0 0 0 0 42 248 3 232 0 0 0 0 0 0 0 0 2 20 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 7 1 0 0 0 0 0 0 0 0 0 0 34 56 9 12 0 41 255 255 255 229 0 35 1 248 0 36 0 1 14 60 8 248 0 22 0 99 0 100 19 136 0 7 0 100 0 250 0 0 0 0 0 0 0 0 | 465ms |
| 1 | 465MS |
As we can see, the response time is just a little bit longer, but the data length is much larger resulting in 2.325ms/byte instead of 150ms/byte.
This is a huge improvement.
This ofcourse only works for reading registers, not for writing registers. But that is less of a problem.