A customer recently got caught out when interfacing to an engine controller with Modbus. The data to be read was shown with register numbers 400001 onwards.
Of course, in Modbus land, 400001 means the data is contained in a holding register (4) and the register number is 1 (00001). Register 1 has address 0 and a holding register is read with function code 3 (read holding).
So, to be clear, holding register (4) is read with function code 3 and register 1 is at address 0. It couldn’t be clearer!