Я пишу приложение Qt для связи с другим компьютером через последовательный порт. У меня есть 2 реальных вопроса.Qt Последовательный порт связи
1. Я могу отправлять и получать данные в порядке, но иногда последовательный порт «ест» часть моего ввода. Например, если я посылаю:
cd /application/bin
иногда (не всегда) он будет получать только:.
cd /applica
(Так как это терминал он повторяет входной сигнал обратно Кроме того, моя подсказка говорит мне, что я ясно в неправильном месте.)
2. Кроме того, иногда слот Qt, который выстреливает, когда имеется не срабатывает, даже если я знаю, что есть данные, которые я могу получить данные. Если я отправлю еще \r\n
вниз по порту, то слот будет гореть. Например, иногда я буду ls
, и имя команды будет считано обратно с порта, но содержимое папки сидит там в подвешенном состоянии, пока я снова не вернусь. Затем я получаю список каталога и два запроса.
Вот мой код:
void Logic::onReadyRead(){
QByteArray incomingData;
incomingData = port->readAll();
QString s(incomingData);
emit dataAvailable(s);// this is a Qt slot if you don't know what it is.
qDebug() << "in:"<< s.toLatin1();
}
void Logic::writeToTerminal(QString string)
{
string.append("\r\n");
port->write((char*)string.data(), string.length());
if (port->bytesToWrite() > 0){
port->flush();
}
qDebug() << "out:" << string.toLatin1();
}
Я только понял, что это может быть неясно, это не связанные проблемы. Shell сообщит мне, что он не может перейти в '/ applica', потому что такой каталог не существует – Muricula
Вам нужно будет буферизовать данные, которые считываются из порта, до тех пор, пока вы не встретите, что может потребовать нескольких считываний из порта , –
Pete