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

c++ - 使用 Qt 的串行端口的异常行为

我正在使用 QT 执行应用程序,以通过 rs-232 将我的 PC 与 8 位微控制器通信。我正在使用 QtSerialPort 库并且通信工作正常,但是每次我从 PC 写东西到 micro 并收到响应时,我必须关闭并打开串行端口,否则我无法继续通信.. 我的配置为:10500 bps,8 位,1 个停止,无奇偶校验,无流量控制。

用于端口的配置和讲座/编写的代码如下:

0 投票
3 回答
6998 浏览

qt - 使用 QSerialPort 从串行端口读取时出现问题

我必须为基于 FriendlyARM 的嵌入式处理器系统开发 C++ 程序。我在台式计算机上使用 Qt Creator 3.0.0(基于 Qt 5.2.0)。我的程序应该能够从 Mini2440 FriendlyARM 处理器的串口读取。

在进入目标系统(嵌入式系统)之前,我尝试读写笔记本电脑上的串行端口。我的主要问题是如何从串口读取。如您所知,新电脑和笔记本电脑没有串口,所以我尝试使用手工制作的 USB 转串口适配器电缆模拟串口编程。插入 USB 串行电缆后,在 Ubuntu 上识别为“/dev/ttyUSB0”。它似乎运作良好。请注意,电缆的另一端(串行端口)没有连接任何东西。

我的第一个问题是:这样配置电缆是否可以,或者我必须将其连接到其他设备?我尝试每 10 秒写入 /dev/ttyUSB0 并读取数据。我结束了以下代码:

写入串口是可以的。但有时阅读问题“没有这样的文件或目录”!有时“文件暂时不可用!奇怪的是notifAreaPort.error()返回0,表示没有发生错误!

想法?

——赛义德·阿姆罗拉希·博尤基

0 投票
2 回答
401 浏览

c++ - 在 OSX SnowLeopard 和 QT 4.8 上编译 QSerialPort

我安装qt 4.8在我的Osx Snow Leopard,我已经克隆QtSerialPortgit://gitorious.org/qt/qtserialport.git然后我尝试在QtCreator.

当我尝试构建库时,我收到以下错误:/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:62:34: error: private/qcore_unix_p.h: No such file或目录/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:在成员函数'bool QSerialPortPrivate::open(QFlags)'中:/Users/warcomeb/Projects/External/qserial/qtserialport/ src/serialport/qserialport_unix.cpp:218: 错误: 'qt_safe_open' 没有在这个范围内声明/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: 在成员函数'void QSerialPortPrivate::关闭()':/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:309:错误:'qt_safe_close'未在此范围内声明 /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:在成员函数“qint64 QSerialPortPrivate::readFromPort(char*, qint64)”中:/Users/warcomeb/Projects /External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1081:错误:在此范围内未声明“qt_safe_read”/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:在成员函数“qint64 QSerialPortPrivate::writeToPort(const char*, qint64)”:/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1097:错误:“qt_safe_write”未在此声明范围/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:在成员函数'qint64 QSerialPortPrivate::writePerChar(const char*, qint64)': /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1134: 错误: 'qt_safe_write' 未在此范围内声明 /Users /warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:在成员函数“qint64 QSerialPortPrivate::readPerChar(char*, qint64)”中:/Users/warcomeb/Projects/External/qserial/qtserialport/src /serialport/qserialport_unix.cpp:1160: 错误: 'qt_safe_read' 未在此范围内声明 make[2]:未在此范围内声明/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:在成员函数“qint64 QSerialPortPrivate::readPerChar(char*, qint64)”中:/Users/warcomeb/Projects /External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1160: 错误: 'qt_safe_read' 未在此范围内声明 make[2]:未在此范围内声明/Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:在成员函数“qint64 QSerialPortPrivate::readPerChar(char*, qint64)”中:/Users/warcomeb/Projects /External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1160: 错误: 'qt_safe_read' 未在此范围内声明 make[2]:* [qserialport_unix.o] 错误 1 ​​make[1]: * [sub-serialport-make_default] 错误 2 make: * [sub-src-make_default-ordered] 错误 2 14:45:11: 进程 "/usr/bin /make" 以代码 2 退出。构建/部署项目 qtserialport (kit: Desktop) 时出错

你能帮我解决这个问题吗?

0 投票
1 回答
1097 浏览

c++ - Qt:包含 .pri 以使用库 - 包含错误

我正在尝试将 QtSerialPort ( http://qt-project.org/wiki/QtSerialPort ) 与 Qt 4.8 一起使用。它不是那个版本的一部分,所以我必须手动安装它。为了避免手动安装它,我只想包含 QtSerialPort 附带的 .pri 文件。我通过执行“git clone https://git.gitorious.org/qt/qtserialport.git ”得到了我的副本。在我的 *.pro 文件中使用它:

但是编译失败 bc。包括:

所以我猜这些包括解析为 /usr/include 等。有没有办法在不手动将所有包含更改为“foo.h”的情况下解决这个问题?

0 投票
2 回答
1853 浏览

c++ - QSerialPort 在 while 循环中?

我有一个通过 RS-232 向超级终端发送数据的功能。该函数在 while 循环之外正常工作,但是,在 while 循环中,它仅在第一次发送之后才发送任何内容。

编辑:

0 投票
0 回答
1245 浏览

c++ - 通过 QSerialPort 接收数据缓慢

我从串口读取接收到的数据的速度有问题。我正在使用 QSerialPort 类。我已经正确配置了(设置与发射器上设置的串行端口选项相同的串行端口选项)。在 MainWindow 构造函数中,当我读取原始数据时,我已将来自 QSerialPort 的信号连接到 MainWindow 的方法 (readData())。看起来像:

数据看起来像:“s03445\n”。程序正确读取和呈现数据,但非常非常慢(例如它打印“s3445”)。数据以大约 20 Hz 的频率发送(400 个样本 - 之后是一秒的暂停),但在我的程序数据中,以大约 3-4 Hz 的频率存在。还值得注意的是,当我通过简单的串行端口终端 (Hercules) 连接到我的发射器时,我会全速接收数据。这种行为可能是什么原因?我究竟做错了什么?有什么建议么?

0 投票
1 回答
808 浏览

c++ - QtSerialPort:Windows 7 上的重复读取

我的应用程序通过串行端口(usb 串行)与嵌入式系统通信。

我正在使用来自 gitorious ( https://qt.gitorious.org/qt/qtserialport/ ) 的 Qt 4.8 和 QtSerialPort 进行开发,并且我还在使用 Windows 7 和 Qt 5.2.1 的 VM 中进行测试

它在 Linux 下运行良好,但我得到了对同一条消息的双重、三重四重读取。我可以验证这些消息只发送一次,通过 puTTY 进行通信。

所以问题是,QtSerialPort、VM(尽管它可以与 putty 一起使用?)、串行驱动程序......等是否存在问题?

这是一个已知的问题?(不过,我什么也找不到)有什么想法可以解决这个问题吗?

这就是我的阅读方式:

编辑:摩尔代码:

编辑:有趣。取消注释“flush()”会使事情正常进行。随着冲洗,我看到成倍的消息。但是在接收端呢?是否有可能因为“flush()”而多次发送消息?

}

0 投票
2 回答
1911 浏览

c++ - 如果打开设备,QSerialPort 会导致程序停止(无限循环?)

我想在串行设备上写。不幸的是,我感觉 QSerialPort 在 linux 下没有正确实现。与其他方法(python)相比,我得到!有时!当我尝试调用时,程序挂起:

我正在使用来自http://qt-project.org/wiki/QtSerialPort的示例(见下文)。QSerialPortInfo 工作正常,因此我可以在打开设备之前搜索它。该问题出现在所有 Qt 5.* 系列中。我目前正在使用 OpenSuse 存储库中的 5.3 beta。其他工具或方法证明设备正在运行(Windows 或 Python)。

工作python脚本:

编辑:我用调试器测试过。至少在 linux 上似乎是 Qt 5 的问题。它看起来像与设备锁相连。

0 投票
2 回答
2718 浏览

c++ - QtSerialPort:readAll 不会产生所有数据并且没有新的 readyRead 信号

我正在从 USB 串行端口读取数据,但有时我会遇到问题,即数据“卡住”。在收到消息时,我会发送新消息并再次等待答复。

我在 Windows 7 上使用 Qt 5.2.1,QtSerialPort 处于异步模式。过了一会儿,我的程序卡住了,因为我在无限期地等待答案。(这是一种暂时的错误,但如果您等待足够长的时间,它确实会发生)。使用调试器,我可以看到我只收到了一条消息的片段。在进一步调查中,我可以看到 QSerialPort 在其“readChunkBuffer”中包含整个消息。

这是我的“readyRead”处理程序:

我也试过“while(port->bytesAvailiable()”。但我在 msgBuffer 中只看到部分消息,但在 QSerialPorts 缓冲区中看到整个消息。不确定 QSerialPort 何时发出信号以及何时实际看到整个消息。

也许这也是一些 Windows 驱动程序缓冲区问题?令我困惑的是,如果我杀死我的应用程序并启动 puTTY 并发送一个换行符,我会得到其余的消息。请注意,这可能不是我的串行通信“伙伴”的问题,bc。它通过 puTTY 等工作,我可以在“readChunkBuffer”中看到消息。

0 投票
1 回答
10184 浏览

linux - 驱动程序 CH341 USB 适配器串行端口或 QSerialPort 在 Linux 中不起作用

以下代码在 Windows 中对我有效,但在 Linux 中不起作用。我使用的是同一台 PC,两个操作系统都是本机安装的。我不使用虚拟机。我需要在 Linux 上工作。我尝试过不同的 linux 发行版,但在任何地方都无法使用。

如果发送 1 个字节,设备会响应并正确发送数据。

例子:

如果发送超过 1 字节的设备在 linux 中不响应请求。

例子:

此事件仅在 Windows 中触发。在 linux 中它永远不会工作,没有收到或以错误的格式到达,并且永远无法识别远程设备。

我在 Windows 中的登录:

(我将设备的实际响应替换为“X”字符)

我在 Linux 中的登录:

USB串口适配器:CH340

PD:对不起我的英语,尽量用谷歌翻译做到最好:(...

更多信息1:

我重建 ch341.c 并添加:

日志中的 delta=0x01 是标志:

更多信息2:

在写/读线程中,我希望在 onReadyRead 上运行 wakeAll。如果您在检查缓冲区是否为空之前通过第二次 readAll 。例子:

更多信息3:

我的内核是 3.12.6,但我从 GitHub 更新了这个文件并重建了这个驱动程序:

https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ch341.c https://github.com/torvalds/linux/blob/master/drivers/usb/serial/usb-serial .c (提交 d9a38a8741fdffabc32e6d0943b1cdcf22712bec)