# -*- coding: UTF-8 -*- import serial import time import binascii ''' 描述:串口同步基类 ''' class baseSerial(): # 构造函数 def __init__(self): self.exception = None self.ser = serial.Serial() # 析构函数(停用); # def __del__(self): # self.close() def open(self, port, baudrate = 115200, bytesize = 8, parity = serial.PARITY_NONE, stopbits = 1, timeout = 2, writeTimeout = 0.5): if type(port) == type(0): self.ser.port = "COM"+str(port) else: self.ser.port = port # 波特率; self.ser.baudrate = baudrate # 数据位; self.ser.bytesize = bytesize # 校验码; self.ser.parity = parity # PARITY_NONE=0 # 停止位; self.ser.stopbits = stopbits # 串口等待超时值(Read) self.ser.timeout = timeout # 读超时; # 串口写超时值(Read) self.ser.writeTimeout = writeTimeout # 写超时; try: self.ser.open() # 返回结果; return self.ser.is_open except Exception,e: self.exception = e print '打开串口异常',str(e) return False # 重新打开; def reOpen(self): self.exception = None self.ser.close() try: self.ser.open() # 返回结果; return self.ser.is_open except Exception,e: self.exception = e return False def close(self): self.ser.close() ''' 描述:写串口 ''' def write(self, cmd): try: self.exception = None writelen = self.ser.write(cmd) # flush等待写入完成; self.ser.flush() print "writehex:" + binascii.hexlify(cmd) + " writelen=" + str(writelen) return True if writelen == len(cmd) else False except Exception,e: self.exception = e print '写串口异常',str(e) return False ''' 描述:读取串口数据; 返回:返回16进制字符串; 补充:ser.in_waiting 实际是缓冲区里的数据长度,也就是要读的长度; ''' def read(self): try: self.exception = None if self.ser.in_waiting == 0: time.sleep(self.ser.timeout) bys = self.ser.read(self.ser.in_waiting) print "readhex:" + binascii.hexlify(bys) + " readlen=" + str(bys.__len__()) return bys except Exception,e: self.exception = e print '读串口异常',str(e) return None if __name__ == "__main__": pass