code: def read_area(self, area, dbnumber, start, size):
          
          assert area in snap7.snap7types.areas.values()
          wordlen = snap7.snap7types.S7WLByte
          type_ = snap7.snap7types.wordlen_to_ctypes[wordlen]
          logger.debug("reading area: %s dbnumber: %s start: %s: amount %s: "
                        "wordlen: %s" % (area, dbnumber, start, size, wordlen))
          data = (type_ * size)()
          result = self.library.Cli_ReadArea(self.pointer, area, dbnumber, start,
                                             size, wordlen, byref(data))
          check_error(result, context="client")
          return bytearray(data)
docs: This is the main function to read data from a PLC.
          With it you can read DB, Inputs, Outputs, Merkers, Timers and Counters.
  
          :param dbnumber: The DB number, only used when area= S7AreaDB
          :param start: offset to start writing
          :param size: number of units to read