2012-06-18 168 views
6

我目前在python中的pySerial模塊有問題。我的問題涉及連接和斷開設備。我可以成功地連接到我的設備,並且只要我想和它溝通,並在我需要的時候斷開連接。但是,一旦連接斷開,我無法重新連接到設備。用pySerial重新連接到設備

下面是我的程序使用和串口接口的包裝類:

import serial, tkMessageBox 

class Controller: 
""" Wrapper class for managing the serial connection with the MS-2000. """ 
    def __init__(self, settings): 
     self.ser = None 
     self.settings = settings 

    def connect(self): 
     """ Connect or disconnect to MS-2000. Return connection status.""" 
     try: 
      if self.ser == None: 
       self.ser = serial.Serial(self.settings['PORT'], 
             self.settings['BAUDRATE']) 
       print "Successfully connected to port %r." % self.ser.port 
       return True 
      else: 
       if self.ser.isOpen(): 
        self.ser.close() 
        print "Disconnected." 
        return False 
       else: 
        self.ser.open() 
        print "Connected." 
        return True 
     except serial.SerialException, e: 
      return False 

    def isConnected(self): 
     '''Is the computer connected with the MS-2000?''' 
     try: 
      return self.ser.isOpen() 
     except: 
      return False 

    def write(self, command): 
     """ Sends command to MS-2000, appending a carraige return. """ 
     try: 
      self.ser.write(command + '\r') 
     except Exception, e: 
      tkMessageBox.showerror('Serial connection error', 
            'Error sending message "%s" to MS-2000:\n%s' % 
           (command, e)) 

    def read(self, chars): 
     """ Reads specified number of characters from the serial port. """ 
     return self.ser.read(chars) 

有誰知道爲什麼這個問題存在,我可以嘗試做些什麼來解決它的原因是什麼?

+0

當你嘗試重新連接時,你會得到什麼異常/痕跡?你在Windows還是Linux? – jedwards

+0

「連接被切斷」是什麼意思?你的意思是拔掉串口線,或者退出你的python進程? – TJD

+0

@andrew donelick與您的問題的答案無關,但爲什麼不初始化'__init __()'中的'Serial'對象? – 2012-06-19 00:16:50

回答

2

當您完成時,您並未發佈串口。在退出程序之前使用ser.close()關閉端口,否則端口將無限期地保持鎖定狀態。我建議在你的班級中加入一個名爲disconnect()的方法。

如果您在Windows上,爲了在測試過程中糾正這種情況,請啓動任務管理器並終止可能鎖定串行端口的任何python.exepythonw.exe進程。

+0

謝謝。在所有搜索結束後,我都關閉了串口,當我重建項目時,Sublime Text,Python使端口保持打開狀態,這是最好的解決方案。 – Speakeasys