2015-09-08 2 views
0

Я пытаюсь создать программу на 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"); 
} 

Я использую программное обеспечение для мониторинга порта, чтобы увидеть, если устройство поддерживает связь с моей программой через порт 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"); 
} 
Смежные вопросы