帖下我的代码:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  RecvS,Disps:shortstring;
  RecvLen,DataIdx,xcidx:integer;
  CardVer:dword;
  p,i,CMD,SuccFlag,CID,Zoneb,DevID0,DevID1,DevID2:byte;
  OldFn,OldFn1,NewFn,DirS:string;
  UDPBuf:array[0..1023] of byte;
begin
//xcidx:=comport.Read(RecvBuf, ComPort.InputCount); //读取
//AddLog(' 读取字节数: '+inttostr(xcidx));{  xcidx:=ComPort.InputCount;
  CardID:=xcidx+CardID;
  if (CardID=16) or (CardID=13) then
  begin
    ComPort.Read(RecvBuf[RecvPos],count);
    CardID:=0;
    xcidx:=0;
  end else Exit;  }  ComPort.Read(RecvBuf[RecvPos],count);
  DataIdx:=9;
  CMD:=RecvBuf[DataIdx];
  SuccFlag:=RecvBuf[DataIdx+1];
  CID:=RecvBuf[DataIdx+2];
  RecvS:=''; for i:=0 to 15 do RecvS:=RecvS+IntToHex(ord(RecvBuf[i]),2)+' ';
  AddLog(' 接收码: '+RecvS);
  if (cmd =$16) or (cmd=$17) or (cmd=$12) then
  begin
    if CMD=$16 then
    begin
      case CID of
        1 : if SuccFlag>0 then begin Addlog(' 外出布防成功');end else Addlog(' 外出布防失败');
        2 : if SuccFlag>0 then begin Addlog(' 在家布防成功');end else Addlog(' 在家布防失败');
      end;
    end else if CMD=$17 then
    begin
      if SuccFlag>0 then begin Addlog(' 撤防成功');end else Addlog(' 撤防失败');
    end else if CMD=$12 then
    begin
      case CID of
        24 : if SuccFlag>0 then begin Addlog(' 布防成功');end else Addlog(' 布防失败');
        56 : if SuccFlag>0 then begin Addlog(' 撤防成功');end else Addlog(' 撤防失败');
        40 : if SuccFlag>0 then begin Addlog(' 开设备1成功');end else Addlog(' 开设备1失败');
        8  : if SuccFlag>0 then begin Addlog(' 关设备1成功');end else Addlog(' 关设备1失败');
        48 : if SuccFlag>0 then begin Addlog(' 开设备2成功');end else Addlog(' 开设备2失败');
        16 : if SuccFlag>0 then begin Addlog(' 关设备2成功');end else Addlog(' 关设备2失败');
        32 : if SuccFlag>0 then begin Addlog(' 开设备3成功');end else Addlog(' 开设备3失败');
        0  : if SuccFlag>0 then begin Addlog(' 关设备3成功');end else Addlog(' 关设备3失败');
      end;
    end;
  end else if (cmd=$13) or (cmd=$14) or (cmd=$15) then
  begin
    Zoneb:=RecvBuf[DataIdx+2];              // 防区
    DevID0:=RecvBuf[DataIdx+3];
    DevID1:=RecvBuf[DataIdx+4];
    DevID2:=RecvBuf[DataIdx+5];
    Addlog(IntToHex(Zoneb,2)+' 防区 '+IntToHex(DevID2,2)+' 设备告警');
    RecvPos:=0;
  end;
end;
========================
我用的是TMemo的add添加日志的,老是把一条数据分成2次add,我都快疯球了。哪位遇到类似的问题啊,急等~~