baseSerial.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding: UTF-8 -*-
  2. import serial
  3. import time
  4. import binascii
  5. '''
  6. 描述:串口同步基类
  7. '''
  8. class baseSerial():
  9. # 构造函数
  10. def __init__(self):
  11. self.exception = None
  12. self.ser = serial.Serial()
  13. # 析构函数(停用);
  14. # def __del__(self):
  15. # self.close()
  16. def open(self, port, baudrate = 115200, bytesize = 8, parity = serial.PARITY_NONE, stopbits = 1, timeout = 2, writeTimeout = 0.5):
  17. if type(port) == type(0):
  18. self.ser.port = "COM"+str(port)
  19. else:
  20. self.ser.port = port
  21. # 波特率;
  22. self.ser.baudrate = baudrate
  23. # 数据位;
  24. self.ser.bytesize = bytesize
  25. # 校验码;
  26. self.ser.parity = parity # PARITY_NONE=0
  27. # 停止位;
  28. self.ser.stopbits = stopbits
  29. # 串口等待超时值(Read)
  30. self.ser.timeout = timeout # 读超时;
  31. # 串口写超时值(Read)
  32. self.ser.writeTimeout = writeTimeout # 写超时;
  33. try:
  34. self.ser.open()
  35. # 返回结果;
  36. return self.ser.is_open
  37. except Exception,e:
  38. self.exception = e
  39. print '打开串口异常',str(e)
  40. return False
  41. # 重新打开;
  42. def reOpen(self):
  43. self.exception = None
  44. self.ser.close()
  45. try:
  46. self.ser.open()
  47. # 返回结果;
  48. return self.ser.is_open
  49. except Exception,e:
  50. self.exception = e
  51. return False
  52. def close(self):
  53. self.ser.close()
  54. '''
  55. 描述:写串口
  56. '''
  57. def write(self, cmd):
  58. try:
  59. self.exception = None
  60. writelen = self.ser.write(cmd)
  61. # flush等待写入完成;
  62. self.ser.flush()
  63. print "writehex:" + binascii.hexlify(cmd) + " writelen=" + str(writelen)
  64. return True if writelen == len(cmd) else False
  65. except Exception,e:
  66. self.exception = e
  67. print '写串口异常',str(e)
  68. return False
  69. '''
  70. 描述:读取串口数据;
  71. 返回:返回16进制字符串;
  72. 补充:ser.in_waiting 实际是缓冲区里的数据长度,也就是要读的长度;
  73. '''
  74. def read(self):
  75. try:
  76. self.exception = None
  77. if self.ser.in_waiting == 0:
  78. time.sleep(self.ser.timeout)
  79. bys = self.ser.read(self.ser.in_waiting)
  80. print "readhex:" + binascii.hexlify(bys) + " readlen=" + str(bys.__len__())
  81. return bys
  82. except Exception,e:
  83. self.exception = e
  84. print '读串口异常',str(e)
  85. return None
  86. if __name__ == "__main__":
  87. pass