Hi,
OkiePC gave you the solution.
Modbus is according to the standards 16-bit, but quite many have implemented support for 32 bit.
To clarify regarding the offset (which is correct).
There are several ways you list Modbus Registers (disregarding of the Function Code).
First you have Address where Address 0 equals to Register #1.
But you can also list as 40001 which means Read Holding Register (fn 0x03) 1 .
Note that you almost never enter 40001 as the register #, you omit the 4 as that is the indicator of the Register Type i.e. (4)0001.
The same goes for Read Input Registers 30001 (fn 0x04) = Register 1.
For Modbus you have the Hi Byte, Lo Byte order, the same would be for 32-bit, that you have the Hi Word, Lo Word, I would guess. So if you only get a value of 0, you may add 1 to the register number if you read it as a 16-bit word. But As OkiePC said, you need to put it together yourself (Modbus Poll does this for you).
As you are working with Modbus TCP, I recommend that you use Wireshark together with Modbus Poll, as that allows you to analyze the Modbus Protocol, as Modbus Devices should send an exception code if you ask for an invalid address etc.
Best Regards,
Kristoffer