I've not used the modbus driver so I couldn't help with the double, but you can retrieve a memory location programmatically using ReadAny(startAddress, numberOfAddresses)
through the driver instance.
As an example in my own usage I'm getting 50 addresses starting at addr from an instance of EthernetIPforCLXComm driver named plc_clx
profile_points1 = plc_clx.ReadAny(addr, 50)