繁体   English   中英

Qt5 QSerialPort写入数据

[英]Qt5 QSerialPort write data

如何在串行端口中写入数据,而发送消息之间会有延迟? 这是我的代码:

void MainWindow::on_pushButton_Done_clicked()
{
    if(sport->isOpen()){
        sport->clear();
        QString cmd = Phase+Mode;

        //Write Stop
        sport->write("stop!", 5);

        //Write Mode
        sport->write(cmd.toStdString().c_str(), cmd.toStdString().length());

        //Write Speed
        sport->write(Speed.toStdString().c_str(), Speed.toStdString().length());

        //Write Direction
        sport->write(Direction.toStdString().c_str(), Direction.toStdString().length());

        //Run
        sport->write("start!", 6);

    }
}

当我调用此函数时,我的设备收到一条错误消息。

谢谢。

2种选择:

  • 使用waitForBytesWritten来确保写入字节,然后短暂sleep

    但是,这将阻止线程并阻止gui

  • 另一种是使用QTimer几次触发另一个插槽,并使用一个字段指示需要发送的内容

似乎您正在尝试对某些步进电机控制器或类似程序进行编程。 通常,在此类控制器中,您应等待控制器响应以验证命令已正确处理。

看起来您的代码设计非常糟糕。 将与此控制器相关的所有内容移动到单独的类,该类具有一组插槽,例如: starRotateLeftWithSpeed(double) 如果您决定使用其他答案中提出的方法,例如waitForBytesWritten ,代码将更干净,并且使用线程也很容易。

绝对应该更仔细地阅读控制器手册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM