Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341893
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:03:41


我下面的程序是用于与单片机通信的,但第一次按了Button1以后,不能接收到报文;而又按一次时却能正确的接收报文。Victor先生,这是为什么?其它几个按钮也如此,而且好像接收的是上一次命令发送后应该收到的报文,譬如我按照‘按钮1’→‘按钮2’→‘按钮3’顺序发指令,则有可能出现按钮2按下后接收到的是按钮1所返回的报文,等等。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char Buffer[1];
  Buffer[0]=0x20;
  YbCommDevice1->WritePackage(Buffer,1); //发送数据包
}

void __fastcall TForm1::YbCommDevice1Package(TObject *Sender,
      int NotifyType)
{
 const BufSize = 4096;
  unsigned char FrameSum,Buffer[BufSize];
  int nBytes = 0;
  int i;
  if((nBytes=YbCommDevice1->ReadPackage(Buffer,BufSize))>0)
   {
     AnsiString s;
     for(i=1;i     FrameSum+=Buffer[i];//校验和
 if(nBytes==7)
   {
         if((FrameSum==Buffer[5])&&(Buffer[0]==0x20)&&(Buffer[6]==0x20))
        //如果校验和相同,起始字节与结束字节相同,则连接正常
         {
           for(int i=0; i           s += IntToHex(Buffer[i],2) + " ";
            s = s.Trim();
         if(!s.IsEmpty())
          RichEdit1->Lines->Add(s);
         }
         else ShowMessage("收到不正确的信号,请重试");
    }
 else if(nBytes==……)
   {               }
 else if(nBytes==……)
   {               }
 else ShowMessage("收到不正确的信号,请重试!");//如果字节数不符合条件
  }

else ShowMessage("装置未准备妥当,请检查后重新设置!");//如果没有收到报文
}





--------------------next---------------------

阅读(1128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~