在接收过程中,总是把一个完整的数据帧分成两段,如:本来要接收的一个完整返回帧是68 12 34 78 56 00 01 68 81 05 00 00 17 80 05 00 07 16 ,但是现在都是68接收一次,然后再重新触发接收剩下的内容。这样的话我很难把它们解析出来。而且,在我连续发送2个帧(中间sleep(1000)),它也是等发送完后才开始接收的。这样很容易造成数据干扰
我这个控件怎么也没有onchar事件
,只有Trigger,TriggerAvail,TriggerData,Triggertimer等等以Trigger开头的这些。
procedure TMainForm.ComPort1Trigger(CP: TObject; Msg, TriggerHandle,
  Data: Word);
var
  I : Word;
  C : Char;
  s: String;
  t:integer;
begin
   sleep(100);
        s:='';
        for I:= 1 to Data do
        begin
          C := ComPort1.GetChar;
            s:=s+inttohex(byte(c),2)+' ';
          inc(JSdate);
        end;
       Diff(s);         //显示子程序
      end;

解决方案 »

  1.   

    查看控件源码,应该有接收Buffer的设置,只是没有放到属性里边来而已。以前用Comm32的时候有过这样的问题,修改下就可以了。现在用SPcomm感觉不错
      

  2.   

    我原先也是用spcomm的,但是一直有缓冲区溢出的状况(就是发送一定量数据后就没法输出数据了),后来改成这个APDcomport。现在快要用这个客户端了,换控件有点来不及啊。
    具体要怎样做啊,我都要疯了
      

  3.   

    在我把下面的for语句改成for for I:= 1 to Data-1 do  第一次收到的就是68 12 34 78 56 00 01 68 81 05 00 00 17 80 05 00 07 然后第二次收到16,怎么总是把一个完整的数据帧分成两次收回呢
      sleep(100);
      s:='';
      for I:= 1 to Data do
      

  4.   

    不行啊,我sleep(1000)降到100的,问题一直存在。
      

  5.   

    这个控件多年前用过一次,然后就不用了。
    不然就一个字节一个字节收吧。
    还是换吧,建议用CPORT,没有这纠结的问题
      

  6.   

    我就是遇到这种情况,准备使用SPcomm