发送命令后串口关闭

时间:2015-09-08 08:00:37

标签: c++ qt serial-port

我正在尝试创建一个连接到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端口与我的程序进行通信,以及我如何找出问题所在。 我尝试编写一个打开端口的函数,但它进入无限循环或者不工作。

1 个答案:

答案 0 :(得分: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");
}