【问题标题】:Serial port closing after sending a command发送命令后关闭串口
【发布时间】:2015-09-08 08:00:37
【问题描述】:

我正在尝试制作一个连接到 RS232 设备并发送一些命令的 c++ 程序。我目前正在尝试一次只发送一个命令,但我遇到了问题。看起来当我在不调用 serial.close() 的情况下发送命令时,我从设备收到响应命令,告诉我没问题,但在那之后,串行端口关闭。如果我调用 serial.close(),我可以根据需要多次发送命令,但设备没有响应。以下是我的部分代码,包含我使用的设置和连接顺序:

/*Create the serial port and configure it*/
QSerialPort serial;
serial.setPortName("COM39");
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);

/*Connect to serial port and send the command*/
if(serial.open(QIODevice::ReadWrite)){
    ui->label->setText("Connected");
    serial.write("NOW11000000.....mENDBAAF");
    //serial.close();
    qDebug()<<"Command sent";
}
else{
    ui->label->setText("Not Connected");
}

我正在使用端口监控软件来查看设备是否通过 COM39 端口与我的程序通信,这就是我找出问题所在的方法。 我尝试编写一个打开端口的函数,但它会进入无限循环或无法正常工作。

【问题讨论】:

  • 也许检查 write() 返回的方法会给你一些提示?它返回实际写入的字节数,如果发生错误,则返回 -1。
  • 感谢帮助,我已经通过在配置端口后立即调用 serial.open() 方法解决了这个问题。现在它可以正常工作了。我稍后会发布问题的答案。

标签: c++ qt serial-port


【解决方案1】:

问题是我在 if 指令中调用了 serial.open(),这导致它每次执行只打开一次。为了工作,我将 serial.open() 方法放在端口配置之后。正确且完整的代码(对我有用)是这样的:

/*Create the serial port and configure it*/
QSerialPort serial;
serial.setPortName("COM39");
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);

/*Connect to serial port and send the command*/
if(serial.open(QIODevice::ReadWrite)){
ui->label->setText("Connected");
serial.write("NOW11000000.....mENDBAAF");
//serial.close();
qDebug()<<"Command sent";
}
else{
ui->label->setText("Not Connected");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多