我原来一直用vb的mscomm做串口通讯。最近改用delphi的spcomm。
发现有一点的程序流程在delphi中不知道怎么办才好。
vb中我接受数据一般用这样的代码:
    mscN1.InputMode = comInputModeBinary
    Do While mscN1.InBufferCount < n2  'n2是要求接受的数据长度
    DoEvents
    Loop
    mscN1.InputLen = n2
    s1 = mscN1.Input
    b1() = s1
因为程序流程就是当串口传回符合长度要求的数据后才继续进行的,否则要一直等待。
在delphi中怎么实现呢?spcomm能这样取数据么?或者有更好的方法也行。

解决方案 »

  1.   

    可以直接用API或CPORT这个控件。
      

  2.   

    如果用cport,怎么弄?给段代码吧。
      

  3.   

    使用CPort,在接收的时候,判断Count的值如:
    procedure TForm3.ComPort1RxChar(Sender: TObject; Count: Integer);
    var
     str:String;
    begin
     if Count<12 then exit; //Count代表缓冲区的字符个数
     //Do something in here
      Comport1.ReadStr(Str,12); //接收12个字符
      
    end;
      

  4.   

    Comport1.InputCount
    Comport1.OutputCount
      

  5.   

    用spcomm也是可以的procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      rbuf:array of byte;
      i:integer;
      t:ttime;
    begin
      if BufferLength<>设定的长度 then exit;  setLength(rbuf, BufferLength);
      move(Buffer^, PChar(rbuf)^, BufferLength);
      .....
     end;
      

  6.   

    呵呵,今天初步调试了一下,算是解决了吧。
    我弄了一个全部变量在ReceiveData中把取接收到的数据长度,然后在流程控制中发完命令后循环读这个变量,直到变量值达到规定的长度(这个长度要根据发送命令的不同可能不同,即返回的数据长度不同)。
    初步调试,还可以吧。
    可能有点麻烦,也是在想不出更好的办法了。
    结贴了!