【问题标题】:write and read hexadecimale trame qt serial port读写十六进制trame qt串口
【发布时间】:2018-05-25 23:11:22
【问题描述】:

打开串口时如何读写十六进制数据?

if (serial->isOpen()) {
    qDebug() << "seccus: " ;
    static const char buff[] = {0xA1, 0xFF, 0xFF, 0x00,97};
    serial->write(buff,sizeof(buff));
}
if (serial->bytesAvailable()) {   // If there are bytes available
    QByteArray f_data; // data container
    f_data.clear();

    if (serial->open(QIODevice::ReadWrite)) { // Try to open the port
        while(serial->bytesAvailable()) { // Reading loop
            f_data.append(serial->readAll());
       }

       serial->flush();
    }
    qDebug()<< "the result" << f_data; // Check the result
}

if(!serial->isOpen())
    qDebug() << "carte disconnect"<<serial->errorString();

【问题讨论】:

  • 当我运行我的代码时,我的终端中没有出现任何内容。我应该将我的buff转换为字节吗????我想知道我在这里错过了什么??
  • 我不使用 Qt,但不应该先调用 serial-&gt;open(QIODevice::ReadWrite) 再调用 serial-&gt;write(buff,sizeof(buff));
  • 是的,你有理由,但还是不行。看来我没有任何可用的字节来读取。我需要从十六进制转换为字节吗?
  • 由于您没有收到任何回复,可能是您发送了错误的数据。客户期望什么?另外,请注意您在数组的最后一个元素上缺少0x。这是故意的吗?
  • 我删除它。我不知道为什么串行没有收到任何东西????我不明白“发送错误的数据”是什么意思??

标签: c++ qt serial-port


【解决方案1】:

要调试您的问题,我将从简化您尝试做的事情开始。尝试编写一些测试代码开始,以确保一切按预期工作:

  1. 测试序列已打开 - 不应该
  2. 打开串口
  3. 测试序列已打开 - 应该是
  4. 测试字节是否可用 - 不应该
  5. 将数据写入串行。同花顺。
  6. 测试字节是否可用 - 应该是
  7. 阅读并打印到屏幕(即测试您的阅读是否正确)
  8. 关闭串口 - 测试它没有打开

也许如果这些步骤之一没有按您的预期工作,您至少可以专注于为什么该特定部分无法正常工作。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多