procedure TfrmZh.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
    p: PChar;
   str:string;
begin
      p := Buffer;
      str := p;
end;
因发送方式为连续发,接收有时会错乱,希有好心人帮助解决

解决方案 »

  1.   

    var
       Bf:string;
    procedure   TfrmZh.Comm1ReceiveData(Sender:   TObject;   Buffer:   Pointer; 
        BufferLength:   Word); 
    var 
            p:   PChar; 
          str:string; 
    begin 
                p   :=   Buffer; 
                str   :=   p;
                bf:=bf+str; 
    end; 
      

  2.   

    procedure   TCzForm.CommReceiveData(Sender:   TObject;   Buffer:   Pointer; 
        BufferLength:   Word); 
    var 
            p:   PChar; 
          str,ss:string; 
          i:integer; 
    begin             p   :=   Buffer; 
                str   :=   p; 
                str:=trim(str);             with   Dmcz.TBcssj   do 
                begin 
                    first; 
                    if   FieldByName('ybrx').AsString='JLCW'   then 
                    begin 
                        i:=length(str); 
                        ss:=copy(str,0,i-2); 
                        memo1.Lines.Text:=ss; 
                    end; 
                end; end; 
    上面是我的程序源码                          
    主要用来接收称重数据,仪表发送方式为连续发送,接收有时会错乱,希有好心人帮助解决,给一个源码参考,急       发送格式为1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   1000.2kg   ........... 
     
    上面那个不能解决 
      

  3.   

    我把inx_XonXoffFlow设false 
          outx_xonxoffFlow设false 
          TxContinueOnXoff设false 
    procedure   TCzForm.CommReceiveData(Sender:   TObject;   Buffer:   Pointer; 
        BufferLength:   Word);     var 
            p:   PChar; 
          str:string; 
    begin 
                p   :=   Buffer; 
                str   :=   p; 
                str:=copy(str,0,BufferLength-2); 
                with   Dmcz.TBcssj   do 
                begin 
                    first; 
                    if   FieldByName('ybrx').AsString='JLCW'   then     //预留 
                    begin 
                            str:=copy(str,0,length(str)-2); 
                            memo1.Lines.Text:=str; 
                    end; 
              end; end; 
    以上源码已在两台机子上连续测试两小时通过,接收正常,单片机为Atmel   89s52   格式为1位起始位,1停止位,8位数据位,1标志位,谢谢各位,供大家参考