2010-09-09 22 views
3

我使用twisted.internet.serialport讓我的程序連續連接到串口上的設備。Twisted的串口和消失的串口設備

不幸的是,我的串口只是一個USB設備,這意味着它可以在任何時候被操作系統斷開或重置(端口2被集線器(EMI?)禁用,重新啓用...)。我看到pyserial已經支持了幾個星期,並引發了一個SerialException。

我想做的是嘗試重新連接到每隔幾秒消失的串行端口。

那麼,有沒有辦法告訴我如何斷開連接?或者我應該繼續爲pyserial編寫一個線程包裝器?

感謝

回答

1

http://twistedmatrix.com/trac/ticket/3690可能有關。

票據在適當的Windows支持上出現阻塞。我不確定這種斷開事件是否會觸發Twisted的內部連接丟失檢測代碼,但我希望它(即使沒有pyserial的最新版本)。

您可以很容易地試用從該票據鏈接的分支,以查看它是否按照您的要求操作,至少。如果是這樣,也許你可以幫助實際解決票(10.2版本即將到來)。

+0

我已經閱讀過這篇文章,看起來有些無關,但我只是給了他們的分支一個嘗試,它真的解決了我的問題。 – Chris 2010-09-09 18:09:38

+0

那麼,我怎麼把這個合併到主幹? ;) – Chris 2010-09-09 18:10:09

+0

http://twistedmatrix.com/trac/ticket/3690#comment:16(無法打開串口:無法打開端口:(5,'CreateFile','訪問被拒絕')中提到的問題)似乎是票的主要阻礙點。如果有人找出原因並解決該問題,那麼可能會使分支非常接近合併。或者,Windows支持可以拆分成一張單獨的票據,讓支持立即被合併(如果您不關心Windows支持,它可以幫助您)。 – 2010-09-09 21:34:24

1

似乎分支版本中唯一相關的變化是在協議中調用connectionLost()。

,直到它固定在樹幹我用:

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

我用扭曲10.1(在Ubuntu)和8.1(對我的信賴debian的)進行了測試。兩者都很好。不知道其他操作系統。