我下面的程序是用于与单片机通信的,但第一次按了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) |