spcomm当出现多个串口时的数据接收异常

spcomm当出现多个串口时的数据接收错误?
服务器有6个串口,对应都有数据过来,故放置了6个SPCOMM控件,结果发现一个问题,那怕仅是打COM1端口,其它端口不打开,所以接收的数据与发送的数据完全不对,但只要把其余5个SPCOMM接收地了事件下面的接收代码全部去掉就可以正常的接收了,一放上去就不行了,就是乱码接收到的,具体代码如下:同时确认参数设置是没有问题的。
procedure TMainFrm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
  var
  ch:char;
  i:integer;
begin
  BCallStr1:='';
  BCallState:='';
  BCallNo:='';
  {move(buffer^,pchar((@rbuf)^),bufferlength);
  for i:=0 to bufferlength-1 do
  begin
  BCallStr1:=BCallStr1+inttohex(ord(rbuf[i]),2); //16进位制按2位一组读出数据
  end; }
  for i:=0 to BufferLength-1 do
  begin
  ch:=(pchar(buffer)+i)^;
  BCallStr1:=BCallStr1+ch;
  end;
  StatusBar1.Panels.Items[0].Text:=Bcallstr1;
  BCallNo:=copy(BCallStr1,3,4);
  BCallState:=copy(BCallStr1,1,2); //获取呼叫器工作状态标示
  mainfrm.ComRevSendSMS;
end;

下面都是一样的
procedure TMainFrm.Comm2ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin
{ BCallStr2:='';
  BCallState:='';
  BCallNo:='';
  move(buffer^,pchar((@rbuf)^),bufferlength);
  for i:=0 to bufferlength-1 do
  begin
  BCallStr2:=BCallStr2+inttohex(ord(rbuf[i]),2); //16进位制按2位一组读出数据
  end;
  StatusBar1.Panels.Items[0].Text:=Bcallstr2;
  BCallNo:=copy(BCallStr2,3,4);
  BCallState:=copy(BCallStr2,1,2); //获取呼叫器工作状态标示
  mainfrm.ComRevSendSMS; }
end;

procedure TMainFrm.Comm3ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin
  {BCallStr3:='';
  BCallState:='';
  BCallNo:='';
  move(buffer^,pchar((@rbuf)^),bufferlength);
  for i:=0 to bufferlength-1 do
  begin
  BCallStr3:=BCallStr3+inttohex(ord(rbuf[i]),2); //16进位制按2位一组读出数据
  end;
  StatusBar1.Panels.Items[0].Text:=Bcallstr3;
  BCallNo:=copy(BCallStr3,3,4);
  BCallState:=copy(BCallStr3,1,2); //获取呼叫器工作状态标示
  mainfrm.ComRevSendSMS; }
end;

procedure TMainFrm.Comm4ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin
 {BCallStr4:='';
  BCallState:='';
  BCallNo:='';
  move(buffer^,pchar((@rbuf)^),bufferlength);
  for i:=0 to bufferlength-1 do
  begin
  BCallStr4:=BCallStr4+inttohex(ord(rbuf[i]),2); //16进位制按2位一组读出数据
  end;
  StatusBar1.Panels.Items[0].Text:=Bcallstr4;
  BCallNo:=copy(BCallStr4,3,4);
  BCallState:=copy(BCallStr4,1,2); //获取呼叫器工作状态标示
  mainfrm.ComRevSendSMS; }
end;

procedure TMainFrm.Comm5ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin
 { BCallStr5:='';
  BCallState:='';
  BCallNo:='';
  move(buffer^,pchar((@rbuf)^),bufferlength);
  for i:=0 to bufferlength-1 do
  begin
  BCallStr5:=BCallStr5+inttohex(ord(rbuf[i]),2); //16进位制按2位一组读出数据
  end;
  StatusBar1.Panels.Items[0].Text:=Bcallstr5;
  BCallNo:=copy(BCallStr5,3,4);
  BCallState:=copy(BCallStr5,1,2); //获取呼叫器工作状态标示
  mainfrm.ComRevSendSMS; }
end;

procedure TMainFrm.Comm6ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin
 { BCallStr6:='';
  BCallState:='';
  BCallNo:='';
  move(buffer^,pchar((@rbuf)^),bufferlength);
  for i:=0 to bufferlength-1 do
  begin
  BCallStr6:=BCallStr6+inttohex(ord(rbuf[i]),2); //16进位制按2位一组读出数据
  end;
  StatusBar1.Panels.Items[0].Text:=Bcallstr6;
  BCallNo:=copy(BCallStr6,3,4);