我把ReadTimeOutInterval设成10000都没用,若收到的数据超过14字节便会自动
截断到下一次接收,同样的数据用SPCOMM控件接收能一次收完,数据没有问题呀比如应接收到字节140,16,49,51,49,52,49,51,49,52,49,51,49,52,49,51,49,52,258
但接收时被ComPort自动分成2段来接收变为:
第一次:140,16,49,51,49,52,49,51,49,52,49,51,49,52
第二次:49,51,49,52,258
我用SPCOMM能一次性收完的,ComPort有什么属性需要设置吗?(延时已经设了,没用)
贴下我的代码
procedure Tfrm_QueryCard.ComPortPwdRxChar(Sender: TObject; Count: Integer);
var
    i:integer;
    rbuf:array of byte;
    yh:integer;
begin
    sleep(100);
    try
        try
            setLength(rbuf, count);
            ComPortPwd.Read(pchar(rbuf)^,count);            //check
            yh:=rbuf[0];
            for i:=1 to count-2 do
            begin
                yh:=yh xor rbuf[i];
            end;
            if yh<>rbuf[count-1] then
            begin
                myshowmessage('校验码错误');
                TotalGetCardAmt := 0;
                close;
                exit;
            end;            viewstring:='';
            for i:=2 to strlen+1 do
            begin
                viewstring:=viewstring+chr(rbuf[i]);
            end;
        except
        end;
    finally
        pwdlock:=false;
    end;
end;

解决方案 »

  1.   

    你可以看查看Comport的Demo 里面应该有很好的解答
      

  2.   

    不好意思,控件包里没有找到Demo,你能说的详细点吗?谢谢
    我想知道此现象能不能解决
      

  3.   

    你的结帖率?????
        FTComm.Inx_XonXoffFlow  := False;  // 设置此两项 可解决 你的问题
        FTComm.Outx_XonXoffFlow := False;  // 设置此两项
        FTComm.ReadIntervalTimeout := 110;
        FTComm.StartComm;
      

  4.   


    不好意思啊,我问的是ComPort控件,SPComm控件原本就没问题我的程序已完成 在测试阶段发现这个问题,现在要在换控件的话...唉
      

  5.   

    并且ComPort控件的
        FlowControl.XonXoffOut = False
        FlowControl.XonXoffIn = False
    都是默认的
      

  6.   

    http://topic.csdn.net/t/20050524/10/4030846.html
    你看看这篇,应该可以解决你的问题,我现在也遇到相同的问题
      

  7.   

    用Rx80Full这个事件,发生时去读取数据。同时把不用的事件可以提高性能关闭掉。