问题标签 [qextserialport]

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 投票
1 回答
7131 浏览

c++ - 如何在 Qt 中使用 QSerialDevice?

我正在尝试在 Qt 中使用 QSerialDevice 来连接到我的串口。我之前也尝试过 QextSerialPort(它适用于 Windows Vista,但不幸的是不适用于 Windows XP ..),但我需要一个支持 XP、Vista 和 Win7 的 API ......我构建了库并以这种方式配置它:

我确实使用了 SVN (0.2.0 - 2010-04-05) 的当前版本和 0.2.0 zip 包。
在构建库之后,我确实将它复制到了我的 Qt Libdir (C:\Qt\2009.05\qt\lib) 以及 C:\Windows\system32。现在我尝试链接到我的项目文件中的库:

我导入所需的标头(abstractserial.h)并像这样使用我自己的 AbstractSerial:

问题是,如果我运行我的应用程序,它会立即崩溃,退出代码为 -1073741515(应用程序无法正确初始化)。这与我在 Windows XP 下使用 QextSerialPort 时遇到的错误相同(它适用于 Windows Vista)。
如果我使用发布配置和我的程序构建 QSerialDevice 库,它会立即崩溃,但退出代码为 -1073741819

有人可以帮助我使用这个程序或让串行端口与 Qt 一起使用的另一种解决方案(可能是另一个 API 或其他东西?)否则我必须使用 Windows API 函数,这意味着我的程序将无法与 UNIX 系统一起使用。 .
如果你对 WinXP SP3 下 QextSerialPort 的问题有解决方案,也欢迎他们;)

最好的问候,
托拜厄斯

0 投票
4 回答
2089 浏览

c++ - QextSerialPort 与 Arduino 的连接问题

我正在尝试使用 QextSerialPort 与 Arduino Diecimila 板进行串行连接。每次我调用 port->open() 时,我的应用程序都会挂起。我认为发生这种情况的原因是每次与它建立串行连接时,Arduino 板都会自行重置。有一种方法可以不重置此处描述的电路板,但我不知道如何让 QextSerialPort 做到这一点。我只能在端口打开后将 DTR 设置为 false,这并没有多大帮助,因为此时主板已经自行重置。

连接代码如下所示:

关于如何完成这项工作的任何想法。如果有人知道另一个库可以做到这一点,我不一定需要使用 QextSerialPort。

我是 C++ 和 Qt 的新手。

更新:我注意到,如果我在运行上述代码之前运行一个连接到同一端口(使用 pySerial)的 python 脚本,一切正常。

0 投票
1 回答
818 浏览

qt - “不能在没有 QEventDispatcherWin32 的情况下创建获胜事件通知程序”

Qt
"Cannot create a win event notifier without a QEventDispatcherWin32"
在尝试打开 QextSerialPort 时触发异常

0 投票
1 回答
2579 浏览

c++ - 尝试读取时 QextSerialPort 阻塞

我在 Windows 上使用 QextSerialPort 使我的 Qt/C++ 应用程序能够读取/写入串行端口。

只有当有字节要读取时,我才想从串口读取字节。

首先,我尝试将QextSerialPort::readyRead()信号连接到我的主类中的一个插槽,但我注意到应用程序挂起。

然后我尝试使用QextSerialPort::read(char *, uint64),它返回读取的字节数,然后我再次尝试组合QextSerialPort::bytesAvailable()QextSerialPort::read(char *, uint64)查看这是否有助于我的应用程序不阻塞。

但是,应用程序总是阻塞并且必须被终止,因为它不响应任何鼠标或键盘事件。我认为应用程序冻结是因为读取例程阻塞。

有没有办法使用 QextSerialPort 执行非阻塞读取?

如果没有,我应该使用什么库来从 Windows 上的串行端口获得非阻塞读取功能?

更新: 我尝试使用QextSerialPort::atEnd()来检查是否有要读取的字节而不是使用QextSerialPort::bytesAvailable()orQextSerialPort::size()并且它总是返回 false。

0 投票
1 回答
2647 浏览

c++ - Qt 调试错误:“解析目标库列表时:格式不正确(无效令牌)”

我正在使用 QtCreator 调试在 Qt/C++ 中开发的应用程序。我的应用程序使用 QextSerialPort 从串行端口读取数据,其中串行端口连接到 Rhino Mark IV 控制器。

我遇到了麻烦,因为我尝试读取一些 ASCII 数据,但是我进入缓冲区的是一些奇怪的字符。例如,数字零 ('0') 的 ASCII 代码被调试器显示并打印qDebug为 '°' 的另一个代码替换。

此外,我在“应用程序输出”选项卡中收到以下消息:while parsing target library list: not well-formed (invalid token).

我想知道为什么我没有使用 QextSerialPort 获得适当的 ASCII 代码。是 QextSerialPort 还是 Rhino Mark IV 控制器的问题?我正在通过两个显示器上的串行端口查看流量,并且 ASCII 字符在显示器上正确显示。因此,我得出结论,这不是控制器或通信渠道的问题。

while parsing target library list: not well-formed (invalid token)消息是什么意思,为什么会出现?

0 投票
2 回答
1447 浏览

c++ - Character encoding problem with QextSerialPort (Qt/C++)

I am developing a Qt/C++ programme in QtCreator that reads and writes from/to the serial port using QextSerialPort. My programme sends commands to a Rhino Mark IV controller and must read the response of those commands (just in case they produce any response). My development and deployment platform is Windows XP Professional.

When the Mark IV sends a response to a command and my programme reads that response from the serial port buffer, the data are not properly encoded; my programme does not seem to get plain ASCII data. For example, when the Mark IV sends an ASCII "0" (decimal 48) followed by a carriage return (decimal 13), my buffer (char *) gets -80 and 13. Characters are not properly encoded, but carriage returns are indeed. I have tried using both read (char *data, qint64 maxSize) and readAll ().

I have been monitoring the serial port traffic using two monitors that interpret ASCII data and display the corresponding characters, and the data sent in both ways seem to be correctly encoded (they are actually displayed correctly). Given that QByteArray does not interpret any character encoding and that I have tried using both read (char *data, qint64 maxSize) and readAll (), I have discarded that the problem may be caused by Qt. However, I am not sure if the problem is caused by QextSerialPort, because my programme send (writes) data properly, but does not read the correct bytes.

I have also tried talking to the Mark IV controller by hand using HyperTerminal, and the communication takes place correctly, too. I set up the connection using HyperTerminal with the following parammeters:

  • Baud rate: 9600
  • Data bits: 8
  • Parity bits: 0
  • Stop bits: 1
  • Flow control: Hardware

My programme sets up the serial port using the same parammeters. HyperTerminal works, my programme does not.

I started using QextSerialPort 1.1 from qextserialport.sourceforge.net and then tried with the latest source code from QextSerialPort on Google Code, and the problem remains.

What is causing the wrong character encoding?

What do I have to do to solve this issue?

0 投票
1 回答
11657 浏览

linux - 如何使用 Qextserialport 在串口上写入

我正在使用 Ubuntu 10.10。

我想通过 QT 使用串行与微控制器 (ATmega328p) 通信,因此为了测试,我在微控制器上创建了一个虚拟应用程序,该应用程序从 UART 读取字符并使用相同字符但在括号之间响应串行端口(回复) .

如果 PC 发送: a ,则 PC 收到回复 [a]

该应用程序运行良好,当我使用超级终端(GtkTerm)从 PC 发送字符时,但当我使用 QT 时它不起作用。我在串口上从 QT 发送一个字符,我正在等待超级终端上的回复,但我没有得到任何回复。

串行通信属性:Baud9600、Parity_none、Stop_bits_1、Data_8bits、Flow_control_Off

知道有什么问题吗?

0 投票
1 回答
268 浏览

qt - Qextserialport 破坏了我的 xml

我正在尝试用 c++ 重写一个用 python 编写的应用程序。

它所做的只是打开一个串口并读取一些xml。在 python 中,我使用 pyserial 来读取 xml 和 beautifulsoup 来检索信息。输出是这样的。

现在我使用 qextserialport 从串口读取,我得到的 xml 是这样的。

我的问题是我无法解析这样的 xml。我得到错误。

编辑:


Qextserialport 以一组不固定的字节从串行端口读取数据。那么如何将我的 xml 连接成一个字符串呢?我每 4-5 秒从串行端口获取一个 xml 字符串。

这是我的代码

以及实际从串口读取的函数

0 投票
1 回答
2029 浏览

c++ - 在哪里可以找到 Linux-gnu/C++ 中 qextserialenumerator 的 objbase.h

我已经下载了 qextserialport 库并在我的 eclipse 项目中使用了它。一旦我编译了项目,我就得到了这个错误。(gcc 版本 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5))

我寻找它以包含它,但我找不到它。

我错过了什么?

0 投票
1 回答
430 浏览

qt - 奇怪的 Qt 问题 - 窗口重绘阻塞线程?

这是我在 Qt 支持论坛上的帖子的 x-post,因为我认为它很奇怪而且很有趣,你们也可以在这里帮助我。


我将尝试解释我遇到的一个问题——这是一个非常奇怪的问题,所以在我尝试解释它时请耐心等待。

让我先概述一下我的申请。它是一个在 Windows XP 上用 Qt 4.7 编写的简单的“串行数据记录器”类型的程序;它基本上接收串行端口上的通信(使用 QExtSerialPort),进行一些处理以从这些通信中提取数据,然后将这些数据推送到前端 GUI 并将其输出到日志文件。我还使用 qDebug() 在各个点将通信和数据传到应用程序输出,因此我可以监控应用程序内部的流动情况。

为清楚起见,如果您没有使用它,QExtSerialPort 只是在串行端口接收到字节时发出一个信号,并使用 QByteArray 将它们传递到连接的插槽。

所以现在我的问题是——我的应用程序最初运行良好,但大约 5 到 10 分钟后,整个事情锁定并停止工作,迫使我崩溃。

在调试器中对此进行了进一步调查后,我注意到了一件非常奇怪的事情。

通信流相当稳定,因此通过监视调试器中的“应用程序输出”窗格,我可以立即看到程序何时锁定,因为似乎没有更多通信到达。如果此时,我单击并将我的应用程序的窗口拖动到屏幕的另一部分,通信开始进入并被处理,然后它停止并再次锁定,直到我再次移动窗口,然后它将允许更多数据等等等等......我已经尝试了一段时间,每次我在屏幕上移动窗口时,它都允许程序接收通信和处理。如果我打开窗口左上角的系统菜单(使用 ALT 空格),这似乎也允许在打开时处理通信。

因此,我在这里的有限推论似乎将我引向了这样一个理论,即由于这些动作中的每一个都会阻止重新绘制窗口,那么 GUI/重新绘制动作一定会阻止我的通信进入。

此外,数据使用两个插槽推送到 GUI,更有趣的是(我认为)如果我删除与这些插槽的连接,从而不允许在我的代码中与 GUI 类进行交互,应用程序运行良好并且永远不会锁定所有进入日志文件和应用程序输出的数据。但是这些插槽非常简单,只检查某些组合框的状态来决定是否更新某些文本字段。

有没有人见过这样的东西?有人对可能发生的事情有任何想法吗?