7

現在、Python の 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)

この問題が存在する理由と、それを修正するために私ができることを誰か知っていますか?

4

1 に答える 1

3

終了時にシリアルポートを解放していません。プログラムを終了する前にポートを閉じるために使用ser.close()します。そうしないと、ポートは無期限にロックされたままになります。disconnect()このために、クラスで呼び出されるメソッドを追加することをお勧めします。

Windows を使用している場合、テスト中に状況を改善するには、タスク マネージャーを起動し、シリアル ポートをロックしている可能性のあるプロセスを強制python.exe終了します。pythonw.exe

于 2012-06-30T22:51:29.817 に答える