读回来的返回值想在mReceive上显示,为什么这个按钮需要按两次才能显示出来?

sangbo1988226 2011-09-16 10:49:18
void __fastcall TForm1::Button3Click(TObject *Sender)
{
unsigned int Buf[10];
char str[14],inbuff[1024],a,b,c,d,e;
int i,f,g,h,m,n,k;
unsigned long lrc;
DWORD nBytesRead,dwEvent,dwError;
COMSTAT cs;
if(hComm==0) return;//检查handle的值
str[0]=':';str[1]='W';str[2]='0';str[3]='0';
str[4]='0';str[5]='C';
f=0;g=0;h=0;m=0;n=0;k=0;
Buf[0]=StrToIntDef(mSend17->Text,0);
if(Buf[0]>65535)
{
MessageBox(0,"距离数据设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm);
return;
}
f=Buf[0]/4096;g=Buf[0]%4096;h=g/256;m=g%256;
n=m/16;k=m%16;
if(f>9)
str[6]=f+0x37;
else str[6]=f+0x30;
if(h>9)
str[7]=h+0x37;
else str[7]=h+0x30;
if(n>9)
str[8]=n+0x37;
else str[8]=n+0x30;
if(k>9)
str[9]=k+0x37;
else str[9]=k+0x30;
a=0x00;
for(i=0;i<10;i++)
{
a+=str[i];
}
b=a%256;c=b/16;d=b%16;
if(c>9)
str[10]=c+0x37;
else str[10]=c+0x30;
if(d>9)
str[11]=d+0x37;
else str[11]=d+0x30;
str[12]=0x0D;str[13]=0x0A;
WriteFile(hComm,str,14,&lrc,NULL);
ClearCommError(hComm,&dwError,&cs);
//数据是否大于所准备的缓冲区
if(cs.cbInQue>sizeof(inbuff))
{
PurgeComm(hComm,PURGE_RXCLEAR);//消除通信端口数据
return;
}
ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);//接收通信端口的数据
inbuff[cs.cbInQue]='\0';
mReceive->Text=inbuff;

C++builder做的一个窗口程序,发一下去一帧数据下位机会返回一组数据,但是奇怪的是为什么这个按钮需要按两次才能显示出来?是我那个ReadFile函数用的不对还是怎么回事,请指教!!
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzbinfo 2011-09-16
  • 打赏
  • 举报
回复
sangbo1988226 2011-09-16
  • 打赏
  • 举报
回复
ok,的确是这个问题,示波器上看到写完数据到接受完数据大概有15ms的时间,加上一个Sleep的延时函数就ok了,谢谢提醒!忽视这点
zzbinfo 2011-09-16
  • 打赏
  • 举报
回复
你写完数据,加个等待时间看看
sangbo1988226 2011-09-16
  • 打赏
  • 举报
回复
我用示波器看了我的发送是没问题的,也可以看到接受的数据,但现在就是不知道为什么返回值需要按两次按钮才能显示。
zzbinfo 2011-09-16
  • 打赏
  • 举报
回复
先用个调试软件看看你串口的数据是否发送正确,还有就是你发完了利马接收数据估计不行,应该是弄个线程监控串口,有数据了读取

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧