--------------------------------------------------------------------------------
 ModbusTCP registers for P2520

 standard ModbusTCP port: 502

 v1.1 for firmware 7-5-0.x, 2020-03-16
 ModbusTCP specification is free available: http://modbus.org/specs.php
--------------------------------------------------------------------------------


List of Supported Modbus commands
--------------------------------------------------------------------------------

|-------------------------------------|-------|--------------------------------|
| Command                             | Code  | Description                    |
|                                     | [HEX] |                                |
|-------------------------------------|-------|--------------------------------|
| Read Holding Register(s)            | 0x03  | Reads 16 bit register(s)       |
|-------------------------------------|-------|--------------------------------|
| Read Input Register(s)              | 0x04  | Reads 16 bit register(s)       |
|-------------------------------------|-------|--------------------------------|


Device informations
--------------------------------------------------------------------------------

|-------------------|--------|--------|-----|--------|-------------------------|
| Variable          | Adr.   | Adr.   | Nr. | Type   | Description             |
|                   | [HEX]  | [DEC]  |     | *)     |                         |
|-------------------|--------|--------|-----|--------|-------------------------|
| serial number     | 0x9C22 | 39970  | 1   | BCD    | 1st two digits of s/n   |
|                   | 0x9C23 | 39971  | 1   | BCD    | 2nd two digits of s/n   |
|                   | 0x9C24 | 39972  | 1   | BCD    | 3rd two digits of s/n   |
|                   | 0x9C25 | 39973  | 1   | BCD    | 4th two digits of s/n   |
|-------------------|--------|--------|-----|--------|-------------------------|
| device type       | 0x9C26 | 39974  | 1   | Int16b | 0x1105 ... P2520        |
|-------------------|--------|--------|-----|--------|-------------------------|


Measured values
--------------------------------------------------------------------------------

|-------------------|--------|--------|-----|---------|------------------------|
| Variable          | Adr.   | Adr.   | Nr. | Type    | Description            |
|                   | [HEX]  | [DEC]  |     | *)      |                        |
|-------------------|--------|--------|-----|---------|------------------------|
| current ch1 [uA]  | 0x9C27 | 39975  | 1   | Int16b  | integer - 16bit,       |
| current ch2 [uA]  | 0x9C28 | 39976  | 1   | Int16b  | error <= -32000        |
|-------------------|--------|--------|-----|---------|------------------------|
| actual value ch1  | 0x9C29 | 39977  | 2   | Flt32b  | IEEE754 float,         |
| actual value ch2  | 0x9C2B | 39979  | 2   | Flt32b  | error = -inf,          |
|                   |        |        |     |         | lower 16bit first      |
|-------------------|--------|--------|-----|---------|------------------------|
| actual value ch1  | 0x9C2D | 39981  | 1   | Int16b  | integer - 16bit        |
| actual value ch2  | 0x9C2E | 39982  | 1   | Int16b  | error <= -32000        |
|-------------------|--------|--------|-----|---------|------------------------|
| actual value ch1  | 0x9C2F | 39983  | 1   | Int*10  | integer*10 - 16bit     |
| actual value ch2  | 0x9C30 | 39984  | 1   | Int*10  | error <= -32000        |
|-------------------|--------|--------|-----|---------|------------------------|
| actual value ch1  | 0x9C31 | 39985  | 1   | Int*100 | integer*100 - 16bit    |
| actual value ch2  | 0x9C32 | 39986  | 1   | Int*100 | error <= -32000        |
|-------------------|--------|--------|-----|---------|------------------------|
| unit on ch1       | 0x9C33 | 39987  | 1   | Ascii   | two chars from unit    |
| unit on ch2       | 0x9C34 | 39988  | 1   | Ascii   | "dC", "dF", "RH"       |
|-------------------|--------|--------|-----|---------|------------------------|
| alarm state ch1   | 0x9C35 | 39989  | 1   | Int16b  | 0 ... none             |
| alarm state ch2   | 0x9C36 | 39990  | 1   | Int16b  | 1 ... high alarm       |
|                   |        |        |     |         | 2 ... low alarm        |
|-------------------|--------|--------|-----|---------|------------------------|
| unused            | 0x9C37 | 39991  | 9   |         |                        |
|                   |   ~    |   ~    |     |         |                        |
|                   | 0x9C3F | 39999  |     |         |                        |
|-------------------|--------|--------|-----|---------|------------------------|

|-------------------|--------|--------|-----|---------|------------------------|
| actual value ch1  | 0x9C40 | 40000  | 1   | Int*10  | integer - 16bit        |
| actual value ch2  | 0x9C46 | 40006  | 1   | Int*10  | error <= -32000        |
|-------------------|--------|--------|-----|---------|------------------------|
| alarm state ch1   | 0x9C41 | 40001  | 1   | Ascii   | "no" ... none          |
| alarm state ch2   | 0x9C47 | 40007  | 1   | Ascii   | "hi" ... high alarm    |
|                   |        |        |     |         | "lo" ... low alarm     |
|-------------------|--------|--------|-----|---------|------------------------|
| current ch1 [uA]  | 0x9C42 | 40002  | 1   | Int*10  | integer - 16bit,       |
| current ch2 [uA]  | 0x9C48 | 40008  | 1   | Int*10  | error <= -32000        |
|-------------------|--------|--------|-----|---------|------------------------|
| actual value ch1  | 0x9C43 | 40003  | 2   | 32b*100 | integer*100 - 32bit,   |
| actual value ch2  | 0x9C49 | 40009  | 2   | 32b*100 | error <= -320000000,   |
|                   |        |        |     |         | lower 16bit first      |
|-------------------|--------|--------|-----|---------|------------------------|
| unused            | 0x9C45 | 40005  | 1   |         |                        |
|                   | 0x9C4B | 40011  | 1   |         |                        |
|-------------------|--------|--------|-----|---------|------------------------|


Notice
--------------------------------------------------------------------------------

 In table are stated addresses of the Modbus registers (Adr.). Modbus register
 number is plus one than address of register (e.g. register with number 0x9C41
 have the Modbus address 0x9C40). Inside Modbus TCP frames are physically
 send address.


*)  Type:

    Int16b ..... registry range is -31999 to 32767, error value <= -32000
    Int*10 ..... registry is in format integer*10 – 16bits, 12.5 dgrC = 125,
                 error value <= -32000
    Int*100 .... registry is in format integer*100 – 16bits, 12.53 dgrC = 1253,
                 error value <= -32000
    Flt32b ..... two Modbus registers containing IEEE754 float,
                 lower 16bits first, error value = -inf
    32b*100 .... two Modbus registers containing 32bit signed integer*100,
                 12.53 dgrC = 1253, lower 16bits first, error value <= -320000000
    Ascii ...... two ASCII character in register
    BCD ........ registry is coded as BCD

