SerialPort.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import serial
  2. import datetime
  3. import time
  4. class SerialPort():
  5. def __init__(self,PortName,BaudRate=115200,TimeOut=6):
  6. try:
  7. self.port = serial.Serial(PortName, baudrate=BaudRate,timeout=TimeOut)
  8. except:
  9. raise RuntimeError("Open serial port error: %s", PortName)
  10. def close(self):
  11. self.port.flush()
  12. self.port.close()
  13. def sendcmd(self, cmd):
  14. if self.port.is_open:
  15. self.port.flushInput()
  16. self.port.flushOutput()
  17. print datetime.datetime.now().strftime("\n%Y-%m-%d %H:%M:%S.%f"), ' ', cmd,
  18. self.port.write(cmd + '\n')
  19. else:
  20. raise RuntimeError("Cmd send error, port not open: %s", self.port.name)
  21. def sendcmd_bybyte(self, cmd,interval=0.020):
  22. if self.port.is_open:
  23. self.port.flushInput()
  24. self.port.flushOutput()
  25. print datetime.datetime.now().strftime("\n%Y-%m-%d %H:%M:%S.%f"), ' ', cmd,
  26. for sc in cmd:
  27. self.port.write(sc)
  28. time.sleep(interval)
  29. self.port.write("\n")
  30. else:
  31. raise RuntimeError("Cmd send error, port not open: %s", self.port.name)
  32. def readResponse(self,terminator=']'):
  33. res = self.port.read_until(terminator)
  34. print datetime.datetime.now().strftime("\n%Y-%m-%d %H:%M:%S.%f"), ' ', res,
  35. if terminator in res:
  36. return res
  37. else:
  38. raise RuntimeError("Error: timeout %s",res)
  39. def send_read(self,cmd,terminator=']'):
  40. self.read_existing()
  41. self.sendcmd(cmd)
  42. return self.readResponse(terminator)
  43. def read_existing(self):
  44. # res = self.port.read(self.port.in_waiting)
  45. res = self.port.read_all()
  46. if res != "":
  47. print datetime.datetime.now().strftime("\n%Y-%m-%d %H:%M:%S.%f"), ' ', res,
  48. return res
  49. def setTimeout(self,timeOut=6):
  50. self.port.timeout = timeOut