2014-07-17 144 views
2

我试图写一个连续读取串行输入的函数。该功能必须能够处理来自串行端口的意外断开连接,并在可能时重新连接。尽管在stackoverflow上阅读了几个问题帖子并查看了pySerial文档,但我还没有找到解决方案。重新连接pySerial

这里是我的代码:

def serialRead(serialPort, queue): 
    """Adds serial port input to a queue.""" 

    ser = serial.Serial(serialPort - 1, timeout = 2) 

    ser.parity = "O" 
    ser.bytesize = 7 

    while(True): 
     try: 
      if(ser == None): 
       ser = serial.Serial(serialPort - 1, timeout = 2) 

       ser.parity = "O" 
       ser.bytesize = 7 

       print("Reconnecting") 

      queue.put(ser.read(27)) 
      ser.write(chr(6).encode()) 

      print("Writing Data...") 

     except: 
      if(not(ser == None)): 
       ser.close() 
       ser = None 
       print("Disconnecting") 

      print("No Connection") 
      time.sleep(2) 

这里是我的输出:

Enter a Serial Port: 7 
Writing Data... 
Writing Data... 
Writing Data... 
Writing Data... 

我开始与我的设备连接。离开程序运行后,不显示“断开连接”或“无连接”并且程序停止(不会崩溃)。

+0

你是如何退出该计划的? – RageCage

+0

我不退出该计划。我试图编写程序,以便它继续运行,即使连接丢失。 – Raeven

+0

对不起,我误解了“离开程序运行”。那么当你断开连接到端口的连接时会发生什么? – RageCage

回答

1

此代码有效。蝙蝠侠在Arduino连接上测试了该程序,发现我的程序在一段时间后成功地与该设备重新连接。我希望这段代码对那些挣扎着类似的人来说很有用。