串口接收一帧数据,由9个双字节十六进制数组成,如:FE 22 02 11 00 00 00 00 FF
其中FE,22,02,FF为起止字符和标志字符,其余为数据;
现在的问题是:第四项"11"始终接收不到,只能收到8个字符,即"FE 22 02 00 00 00 00 FF".当"11"为"13"时现象一样;然而"11'为其他数时又能收到正确的9个字符;
不知道我说清楚没有?

解决方案 »

  1.   

    看看这个接收转换函数
    var
    CodeSize: Integer;
    s: String;
    i: Integer;
    myr: array of byte;
    CodeSize:=MSComm1.InBufferCount;
    if CodeSize>0 then
    begin
        myr:=VarArrayCreate([0,CodeSize-1],varByte);
        myr:=MSComm1.Input;
        for i:=0 to CodeSize-1 do
            S := S+ IntToHex(myr[i],2);
        Result := s;
    end;
      

  2.   

    你要自己来确定自己要收完多少数据,一般情况下,当检测到数据到的时候,一次Read只能收到8个字节的数据
      

  3.   

    哦 你用的一定是SPCOMM吧? SPCOMM中$11作为结束符,所以你总收不到 解决的办法如下:
    Comm1.Inx_XonXoffFlow:=False;
    Comm1.Outx_XonXoffFlow:=False;
    这样就OK了!
      

  4.   

    Comm1.Inx_XonXoffFlow:=False;
    Comm1.Outx_XonXoffFlow:=False;$11,$13都有这种情况