我使用spcomm做了一个串口通讯测试,数据发送端发送出去的数据超级终端能够接到,但是,控件的接收数据函数没什么反应?
那位高手碰到类似情况,请指点

解决方案 »

  1.   

    不是还要保证focus一直都在软件上吧.我觉得串口在接收到数据的时候应该能够自动触发控件的消息接收时间,从而调动接收数据的函数。
      

  2.   

    ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
    ------------------
    他的工作原理是!只要缓冲区有数据!他就会去读缓冲区数据。
      

  3.   

    恩 SPCOMM 有自己的缓冲区可以存放数据大哥 拜托 串口有自己的触发事件的 
    1 有消息触发
    2 缓冲区满触发
    3 数据益处触发第一你要合理的设置 自己的缓冲区的大小
    第二你要选择适合你的串口触发过程 比如实时的程序和数据大量发送的数据通信类的程序的设置就不一样 
      

  4.   

    我现在也在写类似的程序,在数据量小比如一byte,两byte时,发送和接收都没有问题,但是现在我把数据量升到32个,数据发送和接收都不正常了!哪位大侠知道什么原因!
      

  5.   

    readintervalTimeout 属性
    然后就是接收缓冲区
      

  6.   

    spcomm没有那么麻烦的,你设置成非阻塞模式,只要有数据自动接收返回,如果你设置成了阻塞模式,那么当然要接收到你设定的大小的数据满了才会返回啊。
    你把它设置成非阻塞模式就可以了,自己代码处理接收到的数据即可。
      

  7.   

    MSCOMM控件可以很轻松的设置 具体的网上有很多详细介绍MSCOMM控件的文章
      

  8.   

    看看波特率是否匹配,我用过这个接受程序,你可以调整一下,自己看看控件的属性是否正确。
    procedure Tfrm_icread.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);var tmpArray:array[0..256] of Byte;
     ArraySize: DWORD;
     Count:DWORD;
     tmpStr:string;
     i:integer;
     pStr:PChar;
    begin  //-------------接受返回串口返回数据-----------
       pStr:=Buffer;
       tmpStr:=string(pStr);
       Dec(PStr);
       tempb:='';
       for i:=0 to bufferlength-1 do
       begin
         inc(PStr);
         tmpArray[i]:=Byte(PSTR^);
         tempb:=tempb+IntToHEX(Ord(tmpArray[i]),2);   end;