Skip to main content

Solis Datalogging Stick

Setup

  • Connect the Solis Datalogging Stick to a Solis inverter
  • Make sure the baud rate is set to 9600 on both the Solis inverter and the Solis Datalogging Stick
  • Find the ip address of the Solis Datalogging Stick (port 80 and 8899 are used by default)

Configuration

There are two webpages available on the Solis Datalogging Stick:

  • http://<ip-address>/ - Configuration page
  • http://<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
#UIDFUNCTIONDATA LENGTHDATARESPONSE TIME
614120 99 0 100 19 207 0 7 0 100 0 250309ms
714120 99 0 100 19 207 0 7 0 100 0 250291ms
814120 99 0 100 19 207 0 7 0 100 0 250291ms
914120 99 0 100 19 207 0 7 0 100 0 250301ms
1014120 99 0 100 19 207 0 7 0 100 0 250301ms
101.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
#UIDFUNCTIONDATA LENGTHDATARESPONSE TIME
1142000 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 0465ms
1465MS

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.