• 11704阅读
  • 5回复

[提问]QT中串口接收大量数据的问题 [复制链接]

上一主题 下一主题
离线meandxiong
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-22
这几天刚开始用QT在写关于串口接收数据问题上遇到一些问题。


首先发送数据有好几百个整形数据,发送的时候转成十六进制(比如100转成00 64)然后这边再接收后将其转为十进制数据显示出来。关键就在于每次只接收2字节的十六进制数。


现在收发数据的转换都已经做好了,也调试通过。不过在实际发送很多数的时候接收到的数据部全,有些时候接收多一些有些时候少一些。然后我再发送数据的程序里面用了sleep(500)做了延迟,结果就是发送数据全部成功到达接收方。


这个问题是我发送太快了造成的么?我用setTimeout()设置了延迟好像没有用。另外,qt的串口编程是不是只有那个第三方类呢?

这是我的发送函数

void Widget::bsend(int a)
{
   char str[8];
//Sleep(100);
   sprintf(str,"%X",a);
   QString s=QString::fromLocal8Bit(str);
   QByteArray k=QByteArray::fromHex(s.toAscii());
   sendCom->write(k);
}

void Widget::sendData()
{
   getNum();
   for (int i=0;i<=10;i++)
       for (int j=0;j<=10;j++)
       {
           if (map[j]<256)
                bsend(0);
           bsend(map[j]);
       }
}


然后是接收函数



void Widget::readCom()
{
   if (saveCom->bytesAvailable()==2)
      {
          QByteArray temp=saveCom->read(2);
          if (!temp.count()==0)
       {
           int l=1,ans=0;
           for (int i=temp.count()-1;i>=0;i--)
                {
                    int k=temp;
                    if (k<0) k=256+k;
                    ans=ans+k*l;
                    l=l*256;
                }
       Widget::ans++;
       ofstream outf("get.DAT",ios::app);
       outf<<ans<<' ';
       QString str=QString::number(ans);
       ui->textBrowser->insertPlainText(str+' ');
       }
      }
//  else saveCom->readAll();
   ui->label->setText(QString::number(ans));
}
离线meandxiong
只看该作者 1楼 发表于: 2011-07-23
看的人这么多,能不能给点意见呀。。。。。 拜托了 各位大神
离线meandxiong
只看该作者 2楼 发表于: 2011-07-23
回 2楼(kukulv) 的帖子
好吧。。。。。。今天换了QByteArray的Vector来储存接收的数据,最后在统一处理,就可以了,就是不知道上面的问题到底出现在哪里
离线meandxiong
只看该作者 3楼 发表于: 2011-07-23
  这个网站~~~~~~~
离线zjfshowtime
只看该作者 4楼 发表于: 2011-07-29
问题的确是出在发送太快,而且你每次只读两个byte的数据,太短了,你可以多接收点,放到一个数组里面,然后对这个数组进行解析啊这样的数据肯定也不会出现你那样的问题了!
你可以硬件连接两个串口,或者电脑后面本来就有两个串口,尝试两个串口互相发送数据!看数据发送过程中有没有错误,你还可以使用串口调试助手这样的工具来监视串口数据,也可以模拟串口发送数据。
离线zjfshowtime
只看该作者 5楼 发表于: 2011-07-29
咱们网站里面还是有些这方面的帖子呢,你也可以看看吧!
快速回复
限100 字节
 
上一个 下一个