问题标签 [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 投票
0 回答
328 浏览

c++ - c++ QSerialPort读取超出字符

我正在开发一个 Qt 程序来从 Arduino MEGA 获取数据,并且我不断面临接收最终不需要的换行符的问题,这完全搞砸了解析和验证方案。

关于 Arduino,每秒执行以下操作。

在 Arduino 终端中,一切正常,但在 Qt 下,会发生以下情况:

基本上,一堆换行符被插入到每条数据的各个点。有人对这里可能发生的事情有任何想法吗?提前致谢 :)

0 投票
1 回答
939 浏览

qt - 如何在 QML 中注册 QSerialPort?

我想QSerialPort在 QML 中注册为不可实例化类型,以便我可以使用QSerialPortENUM。

我试图QSerialPort在我的注册main.cpp

我收到以下错误:

/Users/user/qt/5.4/clang_64/lib/QtQml.framework/Headers/qqml.h:234:错误:在嵌套名称说明符QML_GETTYPENAMES中命名的不完整类型'QSerialPort' ^~~~~~~~~~~~~~~ ~~~~

任何提示表示赞赏!谢谢。

0 投票
1 回答
4133 浏览

windows - 在 Qt 中干净地关闭一个 QSerialPort

我正在尝试关闭使用 QSerialPort 库打开的串行端口,但它挂起超过一半的时间。

我正在开发一个多线程应用程序,一个线程负责 UI,另一个线程负责串行通信。我正在使用 QThread 包装类。

问题是当 UI 线程将 dconnect 变量设置为 true 并继续删除通信线程时,它会卡在通信线程的析构函数中,如下所示:

3 次中有 2 次,通信线程挂serial-close()在行,导致 UI 线程QThread::wait()在析构函数中挂在行。不用说这会导致 UI 冻结,如果关闭,整个应用程序将保留在内存中,直到被任务管理器杀死。几分钟后,对 serial::close() 的调用最终将返回;我想知道什么是错的,我怎样才能最好地避免挂起的 UI?

我查看了 QSerialPort 的代码,但看不到任何明显错误的地方。如果我打电话serial->errorCode(),我会得到 UknownError 字符串,但即使端口关闭而没有挂断也会发生这种情况。

编辑:这在调试器中永远不会发生。SerialPort 总是立即关闭,并且析构函数在 QThread::wait() 上没有挂断

编辑:我确定是 serial->close() 挂起,因为我可以看到 qDebug() 语句在它挂起几秒钟或几分钟之前正在打印)。

设备停止传输,因为在 dconnect 开关中,发送了一个断开数据包并且设备上的 LED 变为绿色。

0 投票
2 回答
2193 浏览

linux - Qt 和虚拟串口

我已经按照这个来创建一对串行端口。它工作正常。

现在我正在开发一个 Qt 应用程序(使用QtSerialPort)通过串口发送数据,而我真正想要的是这样一个虚拟串口链接。但似乎QSerialPortInfo::availablePorts()找不到 /dev/pts/... 端口。

为了在 linux 上建立这样的串行端口链接,我应该尝试哪种方法?

0 投票
1 回答
519 浏览

macos - mac上的mxe交叉编译器QSerialPort

我在 mac os x 上使用 qt 5.5.1 并想为 windows 开发一个应用程序。到目前为止,一切都很好。我已经安装了交叉编译器M 交叉环境 (MXE)来生成 .exe 文件。编译器似乎可以工作,但我遇到的问题是 mxe 不知道 Qt 库串行端口。由于使用了 qt5.5,我不再需要手动构建 Qt Serial Port。Qt Serial Port 正式成为 Qt AFAIK 的一部分。如果我使用以下命令运行 Qt Makefile 生成器工具:

我收到以下错误消息:

在我的应用程序 *.pro 文件中,我添加了以下行:

任何人都可以在这一点上帮助我。我想我必须将串行端口库与 mxe 链接起来。但不知道如何解决这个问题。

谢谢!

0 投票
0 回答
93 浏览

c++ - 串口读写同方法

我正在开发一个必须自动化的电气测试软件。我正在使用 PowerTek 的 PA4400A,我正在使用 RS-232 与他通信。如果我使用按钮发送命令,然后大约 4 秒后,如果我使用另一个按钮阅读它,则答案是完整且正确的。如果我将读取和写入命令放在按钮方法中,即使写入和读取之间有 10 秒的延迟,我也不会得到任何答案。

变量声明:

端口初始化:

按钮方法:

其中 cxz 是一个 QByteArray,其中包含机器的命令。使用按钮时的 ans 值:“ 00.00E+0 <(END OF DATA)>” 使用上述方法时的 ans 值:“”

我只是在寻找发生这种情况的原因以及可能的解决方案。感谢帮助。

0 投票
2 回答
402 浏览

c++ - 无法使用 socat 写入打开 QSerialPort

我有一个类,我可以在其中通过具有 privateSerial的成员函数打开一个端口:Serial::openPort()QSerialPort serial_stream

和方法发送:

我通过 socat 打开一个虚拟端口

然后在测试功能中我执行以下操作:

所以我想要的是我可以通过在课堂上打开端口发送data到。b是这样才能够打开端口。但是当我想发送时,我得到以下信息:pts/2pts/3QSerialPortSerialtrueQSerialPortdata

我认为这个问题一定与使用 socat 错误有关,因为我们已经用 RSR232 电缆和另一台计算机测试了代码。

将感谢您的帮助。

编辑:在 code_fodder 的第一个(否)回答之后,我做了他告诉我要做的事情,并在我的中添加了一个 for 循环initTestCase()

就像我评论的那样,可用端口的数量为 0(预计这不是正确的方法)。但为什么Serial::instance().openPort("pts/3");返回 true ?

就像我刚才说的,它一定和socat有关......

0 投票
1 回答
1558 浏览

c++ - QSerialPort readyread() 信号

从 QByteArray 中的 RS232 接收字节时出现问题。我连接了 readyread() 信号来调用我的串行端口方法,并在其中使用 readAll() 将字节读取到 QByteArray。只要数据可用,它就会重写 QByteArray,但我想全部接收,然后使用数据,但现在我不能,因为它是部分的。该怎么办?

0 投票
1 回答
982 浏览

c++ - 如何知道 QSerialPort 何时准备好接收 Qt5 中的更多数据?

当我的串行设备准备好接收更多数据时,有什么方法可以通知?

我正在实现一个程序,该程序使用QSerialPort的异步API通过串行向伺服控制器提供命令。该程序有效,但似乎我遇到了拥堵。

在我的应用程序中,我保留了一个最新伺服位置的注册表,我希望以尽可能低的延迟与控制器同步。我尝试尽快将新数据推送到串行端口,这让我想到了我认为的数据累积,这使得通信完全中断。

我的问题是,当串行接口准备好以某种方式接收新数据时,我可以QSerialPort异步模式下收到通知吗?

我看到的唯一其他选择是使用同步模式并调用waitForBytesWritten()但我真的不想这样做。

注意:我仔细研究了 Qt5 文档中的串口示例,但是异步写入的示例没有提供我需要的信息,因为它在退出前执行了一次发送。

0 投票
0 回答
46 浏览

qt - QSerialPort:数据被分成两个数据包

我正在使用 QSerialPort 类使用Network<->Serial转换器(Moxa NPort)通过网络从硬件模块读取数据。设备发送正确的数据,但接收方无法一次读取整个数据包。例如客户端发送:

接收者得到

起初尝试

在第二次阅读尝试。

端口是这样打开的:

这就是程序的读取方式。(下面的函数是由一个500ms间隔的定时器执行的,实现了一个简单的轮询协议)