code: def read_register(self, registeraddress, numberOfDecimals=0, functioncode=3, signed=False):
          
          _checkFunctioncode(functioncode, [3, 4])
          _checkInt(numberOfDecimals, minvalue=0, maxvalue=10, description='number of decimals')
          _checkBool(signed, description='signed')
          return self._genericCommand(functioncode, registeraddress, numberOfDecimals=numberOfDecimals, signed=signed)
docs: Read an integer from one 16-bit register in the slave, possibly scaling it.
  
          The slave register can hold integer values in the range 0 to 65535 ("Unsigned INT16").
  
          Args:
              * registeraddress (int): The slave register address (use decimal numbers, not hex).
              * numberOfDecimals (int): The number of decimals for content conversion.
              * functioncode (int): Modbus function code. Can be 3 or 4.
              * signed (bool): Whether the data should be interpreted as unsigned or signed.
  
          If a value of 77.0 is stored internally in the slave register as 770, then use ``numberOfDecimals=1``
          which will divide the received data by 10 before returning the value.
  
          Similarly ``numberOfDecimals=2`` will divide the received data by 100 before returning the value.
  
          Some manufacturers allow negative values for some registers. Instead of
          an allowed integer range 0 to 65535, a range -32768 to 32767 is allowed. This is
          implemented as any received value in the upper range (32768 to 65535) is
          interpreted as negative value (in the range -32768 to -1).
  
          Use the parameter ``signed=True`` if reading from a register that can hold
          negative values. Then upper range data will be automatically converted into
          negative return values (two's complement).
  
          ============== ================== ================ ===============
          ``signed``     Data type in slave Alternative name Range
          ============== ================== ================ ===============
          :const:`False` Unsigned INT16     Unsigned short   0 to 65535
          :const:`True`  INT16              Short            -32768 to 32767
          ============== ================== ================ ===============
  
          Returns:
              The register data in numerical value (int or float).
  
          Raises:
              ValueError, TypeError, IOError