2012-06-18 43 views
6

Tôi hiện đang gặp sự cố với mô-đun pySerial trong Python. Vấn đề của tôi liên quan đến việc kết nối và ngắt kết nối với một thiết bị. Tôi có thể kết nối thành công với thiết bị của mình và liên lạc với nó miễn là tôi muốn, và ngắt kết nối nó bất cứ khi nào tôi muốn. Tuy nhiên, tôi không thể kết nối lại với thiết bị khi kết nối đã bị ngắt.Kết nối lại với thiết bị với pySerial

Đây là lớp wrapper rằng chương trình của tôi sử dụng để giao tiếp với các cổng nối tiếp:

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) 

Có ai biết lý do tại sao vấn đề này tồn tại và những gì tôi có thể cố gắng làm để sửa chữa nó?

+0

Whats ngoại lệ/dấu vết bạn nhận được khi bạn cố gắng kết nối lại? Bạn có đang sử dụng Windows hay Linux không? – jedwards

+0

Bạn có ý gì khi "kết nối bị ngắt kết nối"? Bạn có nghĩa là rút cáp nối tiếp, hoặc chỉ cần thoát khỏi quá trình python của bạn? – TJD

+0

@andrew donelick Không liên quan đến câu trả lời cho vấn đề của bạn, nhưng tại sao bạn không khởi tạo đối tượng 'Serial' trong' __init __() '? –

Trả lời

2

Bạn không phát hành cổng nối tiếp khi bạn hoàn tất. Sử dụng ser.close() để đóng cổng trước khi thoát khỏi chương trình của bạn, nếu không cổng sẽ bị khóa vô thời hạn. Tôi sẽ đề nghị thêm một phương pháp gọi là disconnect() trong lớp học của bạn cho việc này.

Nếu bạn đang dùng Windows, để khắc phục tình huống trong quá trình thử nghiệm, hãy khởi động Trình quản lý tác vụ và xóa bất kỳ quy trình python.exe hoặc pythonw.exe nào có thể đang khóa cổng nối tiếp.

+0

Cảm ơn bạn. Sau tất cả các tìm kiếm tôi đã làm để đóng cổng nối tiếp, mà Sublime Text, Python, đã giữ cổng mở khi tôi xây dựng lại dự án, đây là giải pháp tốt nhất. – Speakeasys