1) My previous comment has some, shall we say, slurring, due to having celebrated a 3 day weekend here in the US. Let me restate some things.
03h command is always a read command
10h is always a write command
As you can see in the Modbus document you provided, the slave map has a RW column indicating (declaring) whether the value is read or read/write.
Those you've selected are RW so you can write to them.
2) I'm glad that you can figure out the device slave node address (section 2.4), it isn't clear to me at all.
3) The issue with 'one offset' or 'subtracting one' goes to the issue of whether the addressing starts at one or zero.
register 1 is at address 0000
register 2 is at address 0001
register 3 is at address 0002
register 4 is at address 0003
In this document, there is an 'index' column. It starts at one. But programmers usually start memory addressing at zero. So is the number given for a location an address or a register? Interpretation varies by manufacturer and implementer.
You write an integer value (within its valid range) to 2049 and see if changes. If it doesn't, offset the register address by one and try again.
4) The addresses are clearly decimal register (addresses), not hex. So register 16252 decimal needs a Modbus master that can handle a (4)16525 register address. Most modern ones do. The leading (4) is implied for holding registers, is not always stated, to distinguish the memory from input registers (3). It's a legacy thing.
5) >What I am thinking is for the heating/cooling setpoints if for instance unit address is 02 and trend cooling setpoint is assigned to input 10 in the modbus driver...
I'm not sure what you are saying.
These are controllers, so every unit has an input (PV) and a cooling setpoint (SP), which is the definition of a controller. So I'm not sure how a "cooling setpoint is assigned to input 10"? Aren't these single input devices?
Did you mean to say, write the value, 10°C, to the device at address 02, to be used as the cooling setpoint?
For that case, register 2049 (decimal) is the correct register.
10°C needs to be in a format that accounts for its 10^-1 exponent, where 100 (decimal) would be interpreted as 10.0.
The actual modbus packet for that is
device address (02), function code (10h), starting address (2049 = 0801h), quantity of registers in bytes (02h), value (100 = 0064h), CRC
6) >16525 digital status's I was thinking of setting up a D TO A in the Trend software and sending the analogue value to register 16525 and letting the ERT 400 convert it back unless you can suggest another way ?
The idea is that 16525 is a bit packed word.
LSB = 0
MSB = 15
bit 8 = cooling
bit 9 = heating
bit 15 = on/off
0000000100000000 = bit for cooling
You read the 16 bit word at register 16525 and compare it to known word values for whatever those bits represent, if you don't have logic masking tools to determine the bit itself.
I'm not at all clear on how converting to analog would do anything.