我目前正试图与一个通过COM发送数据流的设备进行通信。我有一个奇怪的QtSerialPort问题,我目前不知道如何解决。问题的描述是:当我重新启动设备并重新启动我的应用程序时,我可以在应用程序中打开相应的端口,而不会出现任何错误。但是,我没有从设备接收到任何数据。我试图用信号readyRead从COM端口读取数据.现在,当我使用另一个使用python的串行程序B打开端口时,我可以在重启后成功地从设备中读取。现在,在使用程序B成功地从设备中读取之后,我也可以使用QT-Program从设备中成功地读取,但前提是我不重新启动设备。下面的代码包含带有QtSerial的隔离端口,该端口复制了上述问题。
import sys
from PyQt5 import QtSerialPort
from PyQt5.QtCore import *
from PyQt5.QtSerialPort import *
from PyQt5.QtWidgets import QApplication, QMainWindow
class QtSerialTest(QMainWindow):
def __init__(self, parent=None) -> None:
super().__init__()
self.port_com_port = QtSerialPort.QSerialPort()
self.port_com_port.setPortName("COM4")
self.port_com_port.setBaudRate(QSerialPort.BaudRate.Baud115200)
self.port_com_port.setParity(QSerialPort.Parity.NoParity)
self.port_com_port.setDataBits(QSerialPort.DataBits.Data8)
self.port_com_port.setStopBits(QSerialPort.StopBits.OneStop)
self.port_com_port.open(QIODevice.ReadWrite)
self.port_com_port.readyRead.connect(self.readFromSerial)
def readFromSerial(self):
print(self.port_com_port.readAll())
if __name__ == '__main__':
app = QApplication(sys.argv)
test = QtSerialTest()
app.exec()我可以确认,在重新启动之后,函数"readFromSerial“永远不会被调用,尽管设备发送。
编辑:我忘记提到:我比较了程序A和B的端口设置,它们是相等的。
发布于 2022-05-05 11:54:30
经过一些搜索,我可以删除解决办法,它现在起作用了。我错过了一个重要的配置参数。打开QtSerialPort后,需要调用self.port_com_port.setDataTerminalReady(True)。
https://stackoverflow.com/questions/71795248
复制相似问题