c++ - Qt串口通信

标签 c++ qt serial-port qtserialport

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

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

cd /application/bin

有时(不总是)它只会接收:

cd /applica

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

2. 此外,有时即使我知道我可以接收数据,当有可用数据时触发的 Qt 插槽也不会触发。如果我向端口发送另一个 \r\n 插槽将触发。 例如,有时我会 ls 一些东西,命令名称将从端口读回,但文件夹的内容一直处于不确定状态,直到我再次按下回车键。然后我得到目录列表和两个提示。

这是我的代码:

void Logic::onReadyRead(){        
        QByteArray incomingData;  
        incomingData = port->readAll();
        QString s(incomingData);
        emit dataAvailable(s);// this is a Qt slot if you don't know what it is.
        qDebug() << "in:"<< s.toLatin1();     
}

void Logic::writeToTerminal(QString string )
{
    string.append( "\r\n");
    port->write((char*)string.data(), string.length());
    if ( port->bytesToWrite() > 0){
        port->flush();
    }
    qDebug() << "out:" << string.toLatin1();
}

最佳答案

我找到了解决方案,我怀疑是编码错误,但我不确定。发送 QByteArray 不是通过串行端口发送 QString,而是解决了这两个问题。我更改了 writeToTerminal() 方法:

void Logic::writeToTerminal(QString string )
{
    string.append( "\r");
    QByteArray ba = string.toAscii();
    port->write(ba);
}

关于c++ - Qt串口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18027492/

相关文章:

c++ - 从 c++/c++11 中的函数返回不同值类型的优雅方式

c++ - 准确评估 1/1 + 1/2 + ... 1/n 行

c++ - 是否可以编译两次并仅通过编写 debian/rules 来构建单独的包?

ruby - COM 端口未出现在 Cygwin 中

c++ - 枚举是实现位标志的规范方式吗?

c++ - 扩展的初始化列表和未初始化的成员

qt - 三态复选框 : deny user from setting it to PartiallyChecked

c++ - Qt中的Winsock连接函数问题

c++ - 使用 com0com 和 hub4com 创建和测试虚拟串行端口

C# SerialPort - 模拟 pos 键盘