我最近用TComPort控件完成计算机与转速表的通讯,给转速表发送数据01 03 10 04 00 01 C1 0B,
接收时应该收到7个字节01 03 02 00 01 79 84 ,但现在只能收到6个字节,
如果应该收8个字节时,现在只能收到7个,请问这是什么原因??

解决方案 »

  1.   

    接收代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      event:TComEvents;
      tmpbuf , data :string;
      tmpEvent : TEvent;
      rbuf :array[0..15] of byte;
      i :integer;
      hd:Cardinal;
    begin
      Comport1.BaudRate := br9600;
      Comport1.Port :='COM2';
      Comport1.Events :=[];
      ComPort1.FlowControl.ControlDTR := dtrEnable;
      ComPort1.FlowControl.ControlRTS := rtsEnable;
      Comport1.Open;
      //·¢ËÍÊý¾Ý
      sendToNB(1);  event :=[evRxChar];
      tmpEvent := TEvent.Create(nil,true,false,'');
      hd := tmpEvent.handle;
      Comport1.WaitForEvent(event,hd,1000);  if evRxChar in event then
      begin
        data :='';
        tmpbuf :='';    Comport1.ReadStr(tmpbuf,Comport1.InputCount);
        showmessage(tmpbuf);    if length(tmpbuf) > 0 then
        begin
          for i := 1 to length(tmpbuf) - 1 do
          begin 
            rbuf[i] := ord(tmpbuf[i]);
            data := data + IntToHex(rbuf[i] , 2) + ' ';
          end;
          tvalue := getNbValue(rbuf);
        end;
        
        memo1.Lines.Add('');
        memo1.Lines.Add(data);
        edit3.Text := FloatToStr(tvalue);
      end;end;
      

  2.   

    TO :yueing8(yueing)请问大侠,我应该如何延时啊,在Tcomport中设置,还是在程序中加sleep(100)??
      

  3.   

    因为你在串口触发后就 使用 Comport1.InputCount 进行接收,
    此时 Comport1.InputCount 的字节数只是一部分,所以你只能获取
    一部分的数据,但后续的数据还是存放在串口缓冲区中,当下载再进行
    接收时就会获取上次的字节了。  我一般不使用 tmpEvent := TEvent.Create(nil,true,false,'')
      而是直接 
      ComPort1.Write
      sleep
      ComPort1.rRead