我对编程很陌生,我正在自学。我编写了一个应用程序来轮询来自控制单元的多个请求。我基本上连续向控制单元发送各种读取命令并读回响应。我的程序正常工作,我成功发送命令并接收答案。但是读取速度很慢(我的代码中有 100 毫秒超时,以确保我得到完整的答复)女士和我总是在那个时间范围内收到完整的答案。我有相同的设置 57K 波特 8 位 1 停止位并且没有奇偶校验。然而,我的 QT 代码需要将近 100 毫秒才能收到答案。在我的代码中,我读取了前 2 个字节(第一个字节是消息标识符,第二个字节是消息长度的剩余部分)然后我循环读取,直到总消息长度等于消息长度字节 +1(+ 1 包含第一个字节)。当我知道它知道硬件是限制因素时,为什么我的代码在 QT 中如此缓慢,我对此一无所知。请求总是 3 个字节,而回复从 3 到 61 个字节不等。请帮我指出我的错误。如果我删除超时,我总是有短读。到目前为止,我还尝试了 read(all) 但结果相同。以下是我阅读响应的代码摘录。完整代码位于 当我知道它知道硬件是限制因素时,为什么我的代码在 QT 中如此缓慢,我对此一无所知。请求总是 3 个字节,而回复从 3 到 61 个字节不等。请帮我指出我的错误。如果我删除超时,我总是有短读。到目前为止,我还尝试了 read(all) 但结果相同。以下是我阅读响应的代码摘录。完整代码位于 当我知道它知道硬件是限制因素时,为什么我的代码在 QT 中如此缓慢,我对此一无所知。请求总是 3 个字节,而回复从 3 到 61 个字节不等。请帮我指出我的错误。如果我删除超时,我总是有短读。到目前为止,我还尝试了 read(all) 但结果相同。以下是我阅读响应的代码摘录。完整代码位于https://github.com/MarkusIppy/PowerTune
//Error handling
QTime startTime = QTime::currentTime();
int timeOut = 100; // timeout in milisec.
QByteArray recvData = m_serialport->read(2); // reading first two bytes of received message to determine lenght of ecpected message
int msgLen = recvData[1]; //Total message Lenght excluding the first byte
while ( recvData.size() <= (msgLen+1) )
{
if ( startTime.msecsTo(QTime::currentTime()) > timeOut ) break;
recvData += m_serialport->read(msgLen+1-recvData.size());
}
if (msgLen +1 == recvData.length()) //if the received data lenght equals the message lenght from lenght byte + identifier byte (correct message lenght received )
{
qDebug() << "Received data OK"<<msgLen +1;
if(requestIndex <= 61){requestIndex++;}
else{requestIndex = 58;}
readData(recvData);
}
else //if the lenght of the received message does not correspond with the expected lenght repeat the request
{
qDebug() << "Received data lenght NIO";
readData(recvData);
qDebug() << "Request Message again"<< requestIndex;
}