标签->设置文本(“已连接”); 序列号。写(“现在11000000…..门巴夫”); //serial.close(); qDebug()setText(“未连接”); },c++,qt,serial-port,C++,Qt,Serial Port" /> 标签->设置文本(“已连接”); 序列号。写(“现在11000000…..门巴夫”); //serial.close(); qDebug()setText(“未连接”); },c++,qt,serial-port,C++,Qt,Serial Port" />

发送命令后关闭串行端口 我试图制作一个C++程序,它连接到RS232设备并发送一些命令。我目前试图一次只发送一个命令,但我有一个问题。看起来,当我发送命令而不调用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"); } /*创建串行端口并对其进行配置*/ QSerialPort系列; serial.setPortName(“COM39”); 串行.setBaudRate(QSerialPort::Baud9600); serial.setDataBits(QSerialPort::Data8); serial.setParity(QSerialPort::NoParity); 串行.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); /*连接到串行端口并发送命令*/ if(serial.open(QIODevice::ReadWrite)){ 用户界面->标签->设置文本(“已连接”); 序列号。写(“现在11000000…..门巴夫”); //serial.close(); qDebug()setText(“未连接”); }

发送命令后关闭串行端口 我试图制作一个C++程序,它连接到RS232设备并发送一些命令。我目前试图一次只发送一个命令,但我有一个问题。看起来,当我发送命令而不调用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"); } /*创建串行端口并对其进行配置*/ QSerialPort系列; serial.setPortName(“COM39”); 串行.setBaudRate(QSerialPort::Baud9600); serial.setDataBits(QSerialPort::Data8); serial.setParity(QSerialPort::NoParity); 串行.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); /*连接到串行端口并发送命令*/ if(serial.open(QIODevice::ReadWrite)){ 用户界面->标签->设置文本(“已连接”); 序列号。写(“现在11000000…..门巴夫”); //serial.close(); qDebug()setText(“未连接”); },c++,qt,serial-port,C++,Qt,Serial Port,我正在使用端口监控软件查看设备是否通过COM39端口与我的程序通信,这就是我如何找出问题的原因。 我尝试编写一个打开端口的函数,但它进入无限循环或不工作。问题是我在if指令中调用了serial.open(),这导致每次执行只打开一次。为了工作,我将serial.open()方法放在端口配置之后。正确且完整的代码(对我有效)如下: /*创建串行端口并对其进行配置*/ QSerialPort系列; serial.setPortName(“COM39”); 串行.setBaudRate(QSerial

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

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

/*创建串行端口并对其进行配置*/
QSerialPort系列;
serial.setPortName(“COM39”);
串行.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
串行.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
/*连接到串行端口并发送命令*/
if(serial.open(QIODevice::ReadWrite)){
用户界面->标签->设置文本(“已连接”);
序列号。写(“现在11000000…..门巴夫”);
//serial.close();
qDebug()setText(“未连接”);
}

也许检查write()方法返回的内容会给您一些提示?它返回实际写入的字节数,如果发生错误,返回-1。感谢帮助,我在配置端口后立即调用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");
}