这几天刚开始用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));
}