首先,串行口本身不会自动帮你断帧,所以你需要自己去跟随
另外,你的接收程序这样写是既低效也不合理
应该先定义一个全局的帧缓冲区(一个足够大的BYTE型数组),再用一个指针(Index)去定位当前加入的数据
implementation
var
  RxIdx: Integer;
  Rxbuff: array [0..255] of byte;接收程序:
var
  P: PChar;
  S: String;
begin
  P:= @RxBuff;
  Move(Buffer^, RxBuff[RxIdx], BufferLength);
  Inc(RxIdx, BufferLength);
  SetString(S, P, RxIdx);
  ....
  
  

解决方案 »

  1.   

    这个接收函数就这样写?不行啊,发现只显示第一行的信息(这里的返回值中有#9,就是Tab)
    var
      P: PChar;
      S: String;
    begin
      P:= @RxBuff;
      Move(Buffer^, RxBuff[RxIdx], BufferLength);
      Inc(RxIdx, BufferLength);
      SetString(S, P, RxIdx);
      Form1.ReturnTxt.Lines.Add(S);
      

  2.   

    这个接收函数就这样写?不行啊,发现只显示第一行的信息(这里的返回值中有#9,就是Tab)
    var
      P: PChar;
      S: String;
    begin
      P:= @RxBuff;
      Move(Buffer^, RxBuff[RxIdx], BufferLength);
      Inc(RxIdx, BufferLength);
      SetString(S, P, RxIdx);
      Form1.ReturnTxt.Lines.Add(S);把S:String 改为S:WideString ,试验一下
      

  3.   

    接收到的数据如果不完整,不可以多次转成 string 再拼接,应该最后一次性转成 string。
    调试的时候由于暂停,数据会堆积起来一次性收取,乱码机率当然就少了。
      

  4.   

    如何调整呢,是对控件TCnRs232属性的设置吗?
      

  5.   

    那这个接收应该如何写呢?
    我看到一个软件叫,SecureCRT,的就写的很好,可惜找不到相关资料