问题标签 [qtserialport]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
33245 浏览

c++ - Qt和串口编程

Qt 中是否有任何串口设备?

如果没有,您推荐哪些跨平台(理想)库(用于使用串行端口,也许还有其他 I/O 端口)?

0 投票
2 回答
28572 浏览

c++ - Qt 串行端口 - 一致地读取数据

我正在通过我的串行端口向设备发送(写入)字节。我正在使用 QSerialPort ( http://qt-project.org/wiki/QtSerialPort ) 模块来实例化设备 IO 支持。当我向我的 INSTEON 调制解调器(串行)发送消息时,设备在读取我的消息后会发回我的消息副本 + 0x06(ACK 字节),然后是状态消息。

我已经使用 DockLight ( http://www.docklight.de/ ) 测试了我的消息。我发送以下消息来查询设备的状态:

使用 Docklight,我收到响应:

返回的消息正是我所期望的,即设备已打开。如果关闭,如果设备关闭,调制解调器将在最后一个字节位置发回 0x00。现在,我的问题 - 我必须没有正确设置我的函数来发送然后接收响应字节。我尝试了许多不同的示例和配置,目前我正在使用以下内容:

设置信号槽连接:

用于遍历设备 QList 的函数。如果设备是所需的类型(“Light”),那么我们将设备 ID 格式化为预期的 QByteArray 消息结构。将消息传递给线程以进行发送。(从 QSerialPortBlockingMaster示例修改的线程。

SetupThread用于设置局部线程变量并执行(运行)线程的函数。

Run功能 - 处理发送和接收

handleResponse函数,接收响应信号的 SLOT

我收到以下输出:

这里有两个问题。

  1. 我从未收到关于第二个设备(卧室灯)的任何回复,这是第二个发送的消息。似乎发送被阻止了,你会建议我如何格式化我的发送,以便在收到第一次发送的响应后发送?只有 1 个 COM 端口可用于发送/接收。我相信我应该向设备 1 发送消息,接收设备 1 响应,发送到设备 2,接收设备 2。我最终会看到大量设备的巨大交通拥堵并使用等待条件,即。在执行设备 2 的通信进程之前等待设备 1 的通信进程完成?

  2. 第一次读取包含接收的适当前半部分。Read: "026220cbcf05190006"第二次接收包含第一个响应的第二半,然后是第二个响应的第一半:读取 2 -Read: "025020cbcf1edaf721000002621de94b05190006"适当的完整响应是02621DE94B05190006 025020CBCF1EDAF72100FF (注意20CBCF是完整响应示例中的设备 2 的 ID)

应该对我从串口接收数据的方式进行哪些更正?谢谢!

0 投票
2 回答
1736 浏览

c++ - QtSerialPort 在错误的线程中实例化,导致信号/插槽失败

我正在使用QtSerialPort库通过 USB 与虚拟 COM 端口通信。COM 端口返回数据并在使用 QtSerialPort 给出的示例项目对其进行测试时正常工作,但当我将其作为项目的一部分运行时失败。

我检查了导致 QtSerialPort 被实例化的实例化链和线程,发现有些奇怪。结果如下。

在我的代码中,main() 函数实例化了 MainWindow,而 MainWindow 又实例化了 HardwareManager 并将其存储为私有变量。当 HardwareManager 被实例化时,它也会实例化 QSerialPort 实例,以便它可以正确地与 COM 端口通信。

但是,您会注意到上面我的 QSerialPort与父对象以及它的父对象位于不同的线程中(它在线程 B 中,而两个祖先都在线程 A 中)。我认为这个其他线程导致我的信号/插槽失败。如果我dumpObjectInfo,它会将我的 Signal/Slot 列为已设置,但事件永远不会触发。

以上是我用来创建新串行端口并将其连接到正确插槽的代码。实际的波特率、奇偶校验和数据/停止位配置分别发生(并且工作正常,如 QtSerialPort 提供的示例应用程序中所测试的那样)。

有没有人知道为什么这个特定对象(QSerialPort 实例)在不同的线程中被实例化?我试过“moveToThread”来切换线程关联,但似乎没有任何效果。

我还在Qt 项目论坛上发过帖子,但还没有有用的回复。

编辑: 以下是调用链中的相关代码:

当 QSerialPort 准备好被读取时(它有数据要提供),它会触发readyRead信号(至少,它应该如此)。此信号在 Qt 示例项目中正确触发,但我从未在我的应用程序中收到该信号。我相信我没有收到信号的原因是因为这些线程问题。

0 投票
1 回答
502 浏览

c++ - 无法在 qt creator 中编译 QtSerialPort

我已经从 git 下载了 qtserialport 文件并尝试在 qt-creator 中编译它。起初我尝试了“构建”选项,但也尝试了“运行 qmake”。

两者都给我相同的结果

:-1: 错误:运行失败:C:\Qt\Qt5.0.1\5.0.1\msvc2010\bin\syncqt.bat -module QtSerialPort -mkspecsdir C:\Qt\Qt5.0.1\5.0.1\msvc2010/ mkspecs -outdir C:/qtserialport-build-Desktop_Qt_5_0_1_MSVC2010_32bit-Debug C:/qt-qtserialport

0 投票
1 回答
5043 浏览

qt - Qt中的串口通信

我是 Qt 新手,需要准备一个项目以从 rs232 发送十六进制命令。QString 行包含 64 位二进制数据,我必须将其转换为十六进制并通过 rs232 发送。

那么,如何将 QString 行中的 64 位二进制数据转换为十六进制值并通过 rs232 传输呢?

0 投票
1 回答
7527 浏览

multithreading - 多线程代码中 QSerialPort 的 Qt 错误:QCoreApplication::sendEvent:“无法将事件发送到不同线程拥有的对象

删除 serialPort 会在调试版本中导致此消息:

QCoreApplication::sendEvent 中的 ASSERT 失败:“无法向其他线程拥有的对象发送事件。当前线程 c0a528。接收器 ''(类型为 'QSerialPort')是在线程 c76850 中创建的”,文件 kernel\qcoreapplication.cpp,第 532 行

当主窗口关闭时,在 ~QSerialReader 中会触发实际错误。这是代码。

编辑1:佩佩的建议:

如果我将 QSerialReader 更改为 QDataReader 中的成员,问题就消失了。但是当使用 QSerialPort::open 打开端口时,会出现此错误:

QObject:无法为不同线程中的父级创建子级。(父级为 QSerialPort(0xdf6930),父级线程为 QThread(0xd8a528),当前线程为 QThread(0xdf6850) QObject:无法为位于不同线程中的父级创建子级。(父级为 QSerialPort(0xdf6930),父级线程为 QThread (0xd8a528),当前线程是QThread(0xdf6850)

QSerialPort::open(xx) 在 serialReader.readData() 内部调用;

所以仍然......一些令人讨厌的问题。几年前我在 Java 中编码时没有遇到过这样的问题。

创建 CSerialReader 时的堆栈跟踪(作为成员变量)。这在主线程中调用。

0 投票
3 回答
16812 浏览

c++ - QtSerialPort QSerialPort 没有这样的文件或目录

我使用本教程:http ://doc-snapshot.qt-project.org/qt5-stable/qtserialport/blockingmaster.html

但是当我想运行它时,Qt Creator会产生以下错误:

错误:QT 中的未知模块:串行端口

当我按住鼠标时,#include <QtSerialPort/QSerialPort>它说:

不包括这样的文件或目录

我使用 Qt5.0.1有什么想法吗?

0 投票
3 回答
8477 浏览

c++ - Qt 4.7 QtSerialPort/QSerialPortInfo:没有这样的文件或目录

我正在使用Qt 4.7.4Qt Creator 2.4.1。我正在尝试为串行通信构建blockingmaster 代码,例如Qt 站点上给出的示例。

但是在对我的环境和路径目标进行了必要的修改之后,当我尝试构建项目时。它给了我:

关注链接后(没有成功);

我的 .pro 文件如下所示:

但错误仍然是一样的。我已经尝试了一些东西。

通过 QT 进行串行通信对我来说是一项新任务,所以我尝试使用 Qt 网站上给出的示例。谁能向我提供更多信息以消除此错误?

0 投票
2 回答
10229 浏览

c++ - Qt 串口通讯

我正在编写一个 Qt 应用程序以通过串行端口与另一台计算机通信。我有两个真正的问题。

1. 我可以很好地发送和接收数据,但有时串口会“吃掉”我输入的一部分。例如,如果我发送:

有时(并非总是)它只会收到:

(因为它是一个终端,它会回显输入。我的提示也告诉我,我显然是在错误的位置。)

2. 此外,有时即使我知道有数据可以接收,当有可用数据时触发的 Qt 插槽也不会触发。如果我向\r\n端口发送另一个,则插槽将触发。例如,有时我会ls做一些事情,命令名称会从端口读回,但文件夹的内容会一直呆在那里,直到我再次点击返回。然后我得到目录列表和两个提示。

这是我的代码:

0 投票
3 回答
2171 浏览

c++ - 通讯 Arduino-C++ 不读Arduino

我有以下代码:

Arduino中的下一个代码:

首先,我向 Arduino 发送一个“a”,而 ARduino 必须以“b”响应。但是当我阅读 Arduino 的端口时,我只收到 ''。

任何人都知道为什么我收到''而不是'b'?谢谢你的时间。