MSCOMM(Comm)初始化:
if Comm.PortOpen then
      Comm.PortOpen:=False;
Comm.CommPort:=1;
Comm.Settings:='57600,n,8,1';
Comm.Inputlen:=0;
Comm.OutBufferCount:=0;
Comm.InBufferCount:=0;
Comm.RThreshold:=1;   //接收缓冲区有一个字符时产生事件
Comm.SThreshold:=0;
Comm.PortOpen:=True;
function TYKTComServer.SendTime(const OpenTime: WideString): WordBool;
var //更新管理器时间
  InputArr0,InputArr1,OutArr:array of byte;
  Temp:byte;
  i,j,k:integer;
  rtn:boolean;
begin
  try
    result:=false;
    rtn:=true;    SetLength(InputArr0,1);
    InputArr0[0]:=254;    setlength(inputarr1,13);
    InputArr1[0]:=13;
    InputArr1[1]:=$A0;
    InputArr1[2]:=0;
    //当前时间
    InputArr1[3]:=strtoint(FormatDateTime('s',time)); //秒
    InputArr1[4]:=strtoint(FormatDateTime('n',time)); //分
    InputArr1[5]:=strtoint(FormatDateTime('h',time)); //小时
    InputArr1[6]:=strtoint(FormatDateTime('d',Date)); //日
    InputArr1[3]:=DayOfWeek(date); //星期
    InputArr1[4]:=strtoint(FormatDateTime('m',Date)); //月
    InputArr1[5]:=strtoint(FormatDateTime('yy',Date)); //年
    //开机时间
    InputArr1[6]:=strtoint(Copy(Opentime,15,2)); //分
    InputArr1[7]:=strtoint(Copy(Opentime,12,2)); //小时
    InputArr1[8]:=strtoint(Copy(Opentime,9,2)); //日
    InputArr1[9]:=strtoint(Copy(Opentime,6,2)); //月
    InputArr1[10]:=strtoint(Copy(Opentime,3,2)); //年
    //校验值
    Temp:=0;
    for i:=0 to 10 do
      Temp:=Temp+InputArr1[i];
    InputArr1[11]:=Temp;
    Temp:=0-Temp;
    InputArr1[12]:=Temp;    for k:=0 to 2 do
      begin
        FrmMain.Comm.OutBufferCount:=0;   //清空发送缓冲区
        FrmMain.Comm.InBufferCount:=0;    //清空接受缓冲区
        FrmMain.Comm.Settings:='57600,M,8,1';  //发送下位机地址
        FrmMain.Comm.Output:=InputArr0;        FrmMain.Comm.Settings:='57600,S,8,1';  //发送数据
        FrmMain.Comm.Output:=InputArr1;
        sleep(1000);
                   //延时1000ms没有问题
                   
        if FrmMain.comm.CommEvent=2 then   //查询接收事件
          begin
            j:=FrmMain.Comm.InBufferCount;
      
            //如果延时5ms的话,问题出在这里:
            我定义了Comm.RThreshold:=1,也就是已经查询到接收事件,
            按理起码 FrmMain.Comm.InBufferCount>=1 吧?
            有时居然 j=0 了 !
            下面的数组就出了问题!!!!!!!!!!        
            setlength(OutArr,j);
            OutArr:=FrmMain.comm.Input;
            if j=OutArr[0] then //check length
              begin
                Temp:=0;  //check
                for i:=0 to j-3 do
                  Temp:=Temp+OutArr[i];
                if Temp=OutArr[j-2] then
                  begin
                    Temp:=0-Temp;
                    if Temp=OutArr[j-1] then
                      if OutArr[1]=$10 then
                        begin
                          Result:=true;
                          rtn:=false;
                        end;
                  end;
              end;
          end;
        if not rtn then break;
      end;
  except
    showmessage('更新管理器时间失败!');
  end;
end;
请高手解答!!!!!