2012-06-18 10 views
6

ile cihaza yeniden bağlanılıyor Python'daki pySerial modülünde şu anda bir sorun yaşıyorum. Sorunum, bir cihaza bağlanmak ve bağlantıyı kesmekle ilgilidir. Cihazımla başarılı bir şekilde bağlantı kurabilir ve istediğim kadarıyla iletişim kurabilir ve istediğim zaman ondan bağlantı kurabilirim. Ancak, bağlantı kesildikten sonra cihaza yeniden bağlanamıyorum. İşte pySerial

programım seri port ile arayüz için kullandığı sarıcı sınıftır:

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) 

bu sorunu var ve bunu düzeltmek için yapmaya çalışacağım neler yapabileceğini neden kimse nedenini biliyor mu?

+0

Yeniden bağlanmaya çalıştığınızda aldığınız istisna/iz nedir? Windows veya Linux'ta mısınız? – jedwards

+0

"Bağlantı kesildi" ile ne demek istiyorsun? Seri kabloyu çıkarmak mı yoksa python sürecinden mi çıkmak istiyorsunuz? – TJD

+0

@andrew donelick Sorunun cevabıyla ilgili değil, ama neden 'Serial 'nesnesini __init __()' de başlatmıyorsunuz? –

cevap

2

İşiniz bittiğinde seri bağlantı noktasını serbest bırakmıyorsunuz. Programınızdan çıkmadan önce portu kapatmak için ser.close() kullanın, aksi takdirde port süresiz olarak kilitli kalır. Bunun için sınıfınızda disconnect() adlı bir yöntem eklemenizi öneririm.

Windows kullanıyorsanız, sınama sırasında durumu düzeltmek için, Görev Yöneticisi'ni başlatın ve seri bağlantı noktasını kilitleyen tüm python.exe veya pythonw.exe işlerini öldürün.

+0

Teşekkürler. Projeyi yeniden inşa ettiğimde, Subtime Text, Python'un portu açık tuttuğu seri portu kapattığım tüm aramalardan sonra bu en iyi çözümdü. – Speakeasys