Я пытаюсь создать программу на 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 и это, как я понял, в чем проблема. Я попытался написать функцию, открывающую порт, но он переходит в бесконечный цикл или не работает.
Возможно, проверка того, что возвращает метод write(), дает вам некоторый намек? Он возвращает количество байтов, которые были написаны на самом деле, или -1, если произошла ошибка. – talamaki
Спасибо за помощь, я решил эту проблему, вызвав метод ** serial.open() ** сразу после настройки порта. Теперь он работает так, как должен. Я отправлю ответ на вопрос в одно мгновение. – Alex