QSerialPort 在具有特定设备的 Windows 上无法正常工作

Posted

技术标签:

【中文标题】QSerialPort 在具有特定设备的 Windows 上无法正常工作【英文标题】:QSerialPort not working correctly on Windows with specific device 【发布时间】:2017-02-15 14:19:04 【问题描述】:

编辑:我发现了问题!对于任何有类似问题的人,这是我所做的:

设备使用了Hardware Flowcontrol,在Linux下貌似没问题,但是在Windows下,这个参数要明确设置!

问题

我们想读出追踪眼镜框轮廓的设备。 他们使用 RS232 端口。我们已经实现了与 QT 5.7 中的 QSerialPort 类的通信。我们的测试设置目前具有来自不同供应商的两个跟踪器和一台 Windows 7 PC。与示踪剂 1 的通信正常; tracer 2 不会向 Windows PC 发送任何数据。

测试

为了测试,我编写了一个非常简单的程序,它将所有字节打印为通过串行端口接收的 ASCII 字符。它还允许您输入一些文本以将答案发送回设备。 在 Linux 上测试完全相同的源代码可以在两种设备上完美运行。 Testsoftware on Linux (Device Requesting initialization) .在 Windows 上(使用相同的电缆和适配器),日志保持空白。 使用 Nullmodem-Cable 将 Windows PC 连接到 Linux PC 或其他设备,通信按预期工作。

在 Windows 上测试与 PuTTy 的通信,两台设备都可以正常工作。

代码

testapplication 中的代码如下所示:

设置好端口参数并打开后:

QObject::connect(&m_serialPort, SIGNAL(readyRead()), this, SLOT(bytesReady()));

插槽:

void Device::bytesReady()
while(m_serialPort.bytesAvailable())
    emit read(m_serialPort.read(1).at(0));

之后,“Konsole”类将接收到的字节转换为可读的 ASCII 字符并在 QTextEdit 中显示它们

结论/问题

我们怀疑 Qt 或 Windows 中存在错误,但我们不知道如何进一步调查该问题。在 Linux 上的测试表明设备本身运行良好,我们的测试程序也是如此。 Windows 中是否有任何设置或我需要做任何特殊的事情来设置 serialPort?

【问题讨论】:

【参考方案1】:

我自己想通了。请参阅问题顶部的解决方案。

【讨论】:

以上是关于QSerialPort 在具有特定设备的 Windows 上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

定时扫描串口看设备是不是连接在QT、QSerialPort

Qt QSerialport 未插入设备未关闭

QSerialPort 可以读取超过 512 字节的数据吗?

QSerialPort 正确发送多行

使用 QSerialPort 通过串口发送数据

如何使 Qt5.13.1 中的 QSerialPort 工作?