code: def read_string(self, registeraddress, numberOfRegisters=16, functioncode=3):
          
          _checkFunctioncode(functioncode, [3, 4])
          _checkInt(numberOfRegisters, minvalue=1, description='number of registers for read string')
          return self._genericCommand(functioncode, registeraddress, \
              numberOfRegisters=numberOfRegisters, payloadformat='string')
docs: Read a string from the slave.
  
          Each 16-bit register in the slave are interpreted as two characters (1 byte = 8 bits).
          For example 16 consecutive registers can hold 32 characters (32 bytes).
  
          Args:
              * registeraddress (int): The slave register start address (use decimal numbers, not hex).
              * numberOfRegisters (int): The number of registers allocated for the string.
              * functioncode (int): Modbus function code. Can be 3 or 4.
  
          Returns:
              The string (str).
  
          Raises:
              ValueError, TypeError, IOError