使用pyside的异步串行通信

时间:2017-03-17 21:16:46

标签: python qt serial-port pyside qtserialport

我正在使用pyside并尝试与它进行异步串行通信,但QtSerialPort尚不可用, 我使用pyserial并使用串行通信移动到另一个线程 moveToThread()但是我必须检查是否有定期的消息,所以我每隔200毫秒使用一个QTimer处理,但是如果我可以让Qt发送{{} 1}}每当有数据可用时发出信号,问题恰恰是:

是否有一个现成的模块可以帮助而不会破坏我对pyside的整个代码依赖性? 如果没有,你有什么快速实施的提示? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

避免使用qtserialport,你使用pyserial是正确的。一个好的方法是按照你自己的想法使用pyserial,但是将它作为另一个进程运行(使用multiprocessing模块),并使用Queue来传递输入/输出串口。

在pyside代码中,您可以注册一个类似于无限循环的函数,检查队列中的数据输入,并在数据进入时执行填充(基本上是触发串行传入事件)。您甚至可以使用{ {3}}!

这样,您可以将代码紧凑地保存在单个代码库中,但在功能方面松散耦合,而没有额外的膨胀,只需要一个简单的队列作为IPC。

因为python中的线程可能很棘手,因为python-async,甚至更多因为你有Qt线程模型(和eventloop)和python一起工作。 根据经验:不要混合香蕉和西红柿。

答案 1 :(得分:0)

我找到了一个解决方法,它使用PyQt5串口模块并构建一个独立模块,用于处理串行通信并使用进程间通信(IPC)或本地网络套接字与我的主应用程序进行通信,现在可以执行此操作,并且我没有问题打开这个串行通信模块,我的主要应用程序是完整的。