QtSerialPort 未写入串口

问题描述 投票:0回答:2

我正在尝试使用 QtSerialPort 将 Gcode 命令发送到 3D 打印机。我能够连接并读取打印机发送的启动 gcode,但我无法编写 Gcode 来让打印机执行某些操作。我读过很多人的代码,据我所知,我的代码看起来没有错,但我肯定遗漏了一些东西。

这是我用来连接 3D 打印机的:

void MainWindow::on_connectButton_clicked()
{
    serial->setPortName(ui->portBox->currentText());
    serial->setBaudRate(250000);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);;
    serial->setFlowControl(QSerialPort::NoFlowControl);
    if (serial->open(QIODevice::ReadWrite)) {
       ui->label->setText("Connected to Printer!!");
    } else {
    ui->label->setText("Error: Failed to connect");
    }
}

这是我要写入串行端口的内容:

QString command = "G28";
QByteArray x = command.toLocal8Bit();
serial->write(x);

这没有给我带来错误,但打印机没有反应。我尝试了 Qt 串行控制台示例并发出“G28”并且打印机反应正确。在同一个程序中,我添加了一个执行上述代码来编写命令的按钮,但它什么也没做。这告诉我问题可能出在我如何写入端口上。 有人对我做错了什么有任何想法吗? 预先感谢。

c++ qt serial-port g-code 3d-printing
2个回答
0
投票

正如拉斐尔在上面发表的,我的问题是我失踪了 G28之后。将其更改为这解决了我的问题:

QString command = "G28\n";
QByteArray x = command.toLocal8Bit();
serial->write(x);

0
投票

我有类似的症状,但原因不同。我将其添加到此处,以防 Google 在此页面上发现其他有相同问题的人。

在 Windows 10 上,我必须确保在

serialPort.waitForBytes(100);
之后立即调用
serialPort.write(data);
,以确保字节确实在线上
。否则,
write()
将返回发送的正确字节数,但线路上未发送任何内容。

我也尝试过

flush()
,但这只会发送第一组数据,而无法用于后续调用。

© www.soinside.com 2019 - 2024. All rights reserved.