Twisted 的 Serialport 和消失的串口设备
Posted
技术标签:
【中文标题】Twisted 的 Serialport 和消失的串口设备【英文标题】:Twisted's Serialport and disappearing serial port devices 【发布时间】:2010-09-09 16:44:38 【问题描述】:我正在使用 twisted.internet.serialport 让我的程序持续连接到串行端口上的设备。
不幸的是我的串口只是一个USB设备,这意味着它可以随时被操作系统断开或重置(端口2被集线器禁用(EMI?),重新启用......)时间>。我看到 pyserial 已经为此提供了几个星期的支持并引发了 SerialException。
我想做的是尝试重新连接到每隔几秒钟就消失的串行端口。
那么,我有什么方法可以告诉twisted 通知我断开连接?还是我应该继续为 pyserial 编写一个线程包装器?
谢谢
【问题讨论】:
【参考方案1】:似乎分支版本中唯一相关的变化是在协议中调用 connectionLost()。
直到它被固定在后备箱中,我使用:
class fixedSerialPort(SerialPort):
def connectionLost(self, reason):
SerialPort.connectionLost(self, reason)
self.protocol.connectionLost(reason)
我使用 Twisted 10.1(在 ubuntu 上)和 8.1(在我信任的 debian 上)对其进行了测试。两者都工作正常。不过不知道其他操作系统。
【讨论】:
【参考方案2】:http://twistedmatrix.com/trac/ticket/3690 可能是相关的。
在适当的 Windows 支持下,票证似乎被阻止。我不确定这种断开连接事件是否会触发 Twisted 的内部连接丢失检测代码,但我希望它会触发(即使没有最新版本的 pyserial)。
您可能可以很容易地尝试从该票证链接的分支,至少看看它是否符合您的要求。如果是这样,也许您可以帮助解决问题(10.2 release 即将推出)。
【讨论】:
我之前读过这个,看起来有点不相关,但我只是试了一下他们的分支,它确实解决了我的问题。 那么,如何将它合并到主干中? ;) twistedmatrix.com/trac/ticket/3690#comment:16 中提到的问题(Cannot open serial port: could not open port: (5, 'CreateFile', 'Access is denied.'))似乎是主要的阻塞点票。如果有人找出原因以及如何解决它,那可能会使分支非常接近合并。或者,可以将 Windows 支持拆分为单独的票证,让支持立即合并到 POSIX(如果您不关心 Windows 支持,这对您很有帮助)。以上是关于Twisted 的 Serialport 和消失的串口设备的主要内容,如果未能解决你的问题,请参考以下文章
使用 SerialPort 和 C# 中的线程“安全句柄已关闭”
使用 Electronjs/SerialPort 和 React/Redux 的数组绑定