【发布时间】: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