串品接收数据出现buffer is empty异常
串品接收数据出现buffer is empty错误通过ApdComPortW获取串口传来的数据后,放到字符串receive中,再输出到
串品接收数据出现buffer is empty错误
通过ApdComPortW获取串口传来的数据后,放到字符串receive中,再输出到Memo1中,调试时输出内容是正确的,可是出现了“buffer is empty”错误。
代码如下:
C/C++ codefor(int i=0;i<68;i++) { char C=ApdComPortW->GetChar(); switch(C) { case '\n': break; case '\r': break; default: receive+=C; } }
我是通过Substring将receive拆分为5行,输出内容为:
2012-05-02
11:00:43
N.W.: 0.0645Kg
T.W.: 0.0000Kg
G.W.: 0.0645Kg
求receive的长度为68.
如果把for(int i=0;i<68;i++)
改成 for(int i=0;i<Count;i++)
则没有错误,但Memo1中的输出格式有问题了,如下
2012-05-
02 11
:00:43
N.W.:
0.0645Kg
T.W.:
0.0000
KgG.W.
: 0.06
45Kg
求receive的长度时出现了奇怪的问题,如下
8
6
6
8
8
6
8
6
8
4
好像receive被分成了10份。
怀疑串口的数据是不是通过10份字符串,每份8个字符来发送的,如是这样,我该怎么处理呢?
[解决办法]给你改了一下,应该没问题
void __fastcall TForm1::ApdComPortWTriggerAvail(TObject *CP, WORD Count) {
char C;
for(int i=0;i<Count;i++) {
C=ApdComPortW->GetChar();
switch ( C ) {
case '\r' :
break;
case '\n' :
MemoRe->Lines->Add(receive);
receive = "";
break;
default :
receive+=C;
break;
}
}
}
[解决办法]重新分析了一下你的程序,应该是缓冲区溢出了。
你的数据不全,不要使用这个控件了,换个接收程序,一位一位的收来再看看有什么漏掉了。