2015-09-08 77 views
0

我想制作一个连接到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端口进行通信,这就是我怎么想通出了什么问题。 我试着写了一个打开端口的函数,但它进入了一个无限循环或不工作。

+0

也许检查什么方法write()返回给你一些提示?它返回实际写入的字节数,如果发生错误则返回-1。 – talamaki

+0

感谢您的帮助,我通过在配置端口后立即调用** serial.open()**方法来解决此问题。现在它的工作原理应该如此。我会在一会儿回答这个问题。 – Alex

回答

0

的问题是我叫的如果指令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"); 
}