【发布时间】:2013-08-04 08:23:37
【问题描述】:
我正在编写一个 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因为没有这样的目录存在 -
您需要缓冲从端口读取的数据,直到遇到
,这可能需要从端口多次读取。
标签: c++ qt serial-port qtserialport