3

私はtwisted.internet.serialportを使用して、プログラムをシリアルポート上のデバイスに継続的に接続しています。

残念ながら、私のシリアルポートは単なるUSBデバイスです。つまり、OSによっていつでも切断またはリセットできます(ポート2はハブ(EMI?)によって無効にされ、再度有効になります...)。pyserialはこれを数週間サポートしていて、SerialExceptionを発生させているようです。

私がやりたいのは、数秒ごとに消えたシリアルポートに再接続してみることです。

それで、切断について私に通知するようにツイストに伝える方法はありますか?または、先に進んでpyserialのスレッドラッパーを作成する必要がありますか?

ありがとう

4

2 に答える 2

1

分岐バージョンでの唯一の関連する変更は、プロトコルでのconnectionLost()の呼び出しであるようです。

トランクで修正されるまで、私は以下を使用します。

class fixedSerialPort(SerialPort):
    def connectionLost(self, reason):
        SerialPort.connectionLost(self, reason)
        self.protocol.connectionLost(reason)

Twisted 10.1(ubuntu上)と8.1(信頼できるdebian上)でテストしました。どちらも正常に動作します。ただし、他のOSについてはわかりません。

于 2010-09-09T19:50:01.253 に答える
1

http://twistedmatrix.com/trac/ticket/3690が関連している可能性があります。

チケットは、適切な Windows サポートでブロックされているように見えます。この種の切断イベントが Twisted の内部接続切断検出コードをトリガーするかどうかはわかりませんが、(pyserial の最近のバージョンがなくても) そうなることは期待できます。

少なくとも、そのチケットからリンクされたブランチを簡単に試してみて、それが意図したとおりに機能するかどうかを確認できます。もしそうなら、おそらくあなたはチケットを実際に解決するのを手伝うことができます ( 10.2の リリースはもうすぐです)。

于 2010-09-09T17:50:05.697 に答える