2012-06-18 8 views
6

के साथ डिवाइस से दोबारा कनेक्ट करना मुझे वर्तमान में पायथन में 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

क्या आप फिर से कनेक्ट करने का प्रयास करते समय अपवाद/ट्रेस प्राप्त करते हैं? और क्या आप विंडोज या लिनक्स पर हैं? – jedwards

+0

"कनेक्शन कटे हुए" से आपका क्या मतलब है? आप सीरियल केबल को अनप्लग करना चाहते हैं, या सिर्फ अपनी अजगर प्रक्रिया से बाहर निकलना चाहते हैं? – TJD

+0

@andrew donelick आपकी समस्या के उत्तर से संबंधित नहीं है, लेकिन आप '__init __()' में 'सीरियल' ऑब्जेक्ट को प्रारंभ क्यों नहीं करते हैं? –

उत्तर

2

आप समाप्त होने पर सीरियल पोर्ट जारी नहीं कर रहे हैं। अपने कार्यक्रम से बाहर निकलने से पहले बंदरगाह को बंद करने के लिए ser.close() का उपयोग करें, अन्यथा बंदरगाह अनिश्चित काल तक बंद रहेगा। मैं इसके लिए आपकी कक्षा में disconnect() नामक एक विधि जोड़ने का सुझाव दूंगा।

यदि आप विंडोज़ पर हैं, परीक्षण के दौरान स्थिति का समाधान करने के लिए, टास्क मैनेजर शुरू करें और python.exe या pythonw.exe प्रक्रियाओं को मार दें जो सीरियल पोर्ट लॉक कर रहे हैं।

+0

धन्यवाद। सीरियल बंदरगाह को बंद करने के लिए मैंने जो खोज की थी, उसके बाद सब्लिमे टेक्स्ट, पायथन ने परियोजना को पुनर्निर्मित करते समय बंदरगाह को खोल दिया है, यह सबसे अच्छा समाधान था। – Speakeasys

संबंधित मुद्दे