托利多的电子秤,如何将称重后电子表盘上的数据读到电脑中,我用的是spcomm组件
波特率:1200
停止位:1
偶校验
数据位:7
在spcomm的接受代码中应该如何写??

解决方案 »

  1.   


    procedure Tfrmmain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      rbuf:array of byte;
      i:   integer;
    begin
      setLength(rbuf, BufferLength);
      move(Buffer^, PChar(rbuf)^, BufferLength);
      for i:=0 to bufferlength-1 do
      begin
        //rbuf[0],..rbuf
      end; 
    end;
      

  2.   

    把读出来的数值显示在memo中,要和电子屏上的一样
    那么begin ... end;中要写什么
    还有就是除了要设置上面的参数外还需要设置什么参数吗??
      

  3.   

    在界面上放一个Memo就可以看到接收到的数据了
    还要注意流控的问题
    function HexStrToStr(const S:string):string;
    var
      t:Integer;
      ts:string;
      M,Code:Integer;
    begin
      t:=1;
      Result:='';
      while t<=Length(S) do
      begin
        while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
          inc(t);
        if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
          ts:='$'+S[t]
        else
          ts:='$'+S[t]+S[t+1];
        Val(ts,M,Code);
        if Code=0 then
          Result:=Result+Chr(M);
        inc(t,2);
      end;
    end;procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
       i,k:integer;
       s, str1:string ;
    begin
      SetLength(Str1,BufferLength);
      move(buffer^,pchar(Str1)^,bufferlength);
      if length(trim(Str1)) <= 0 then Exit;
      for i := 1 to length(Str1) do
        s := s + inttohex(ord(Str1[i]), 2);
      ReturnStr:=HexStrToStr(s);  Memo1.Lines.Add('收到'+HexStrToStr(s));
    end;
      

  4.   

    procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
       i,k:integer;
       s, str1:string ;
    begin
      SetLength(Str1,BufferLength);
      move(buffer^,pchar(Str1)^,bufferlength);
      if length(trim(Str1)) <= 0 then Exit;
      for i := 1 to length(Str1) do
        s := s + inttohex(ord(Str1[i]), 2);
      Memo1.Lines.Add('收到'+HexStrToStr(s));
    end;
      

  5.   

    procedure Tfrmmain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      rbuf:array of byte;
      i:   integer;
      str: string;
    begin
      setLength(rbuf, BufferLength);
      move(Buffer^, PChar(rbuf)^, BufferLength);
      str:='';
      for i:=0 to bufferlength-1 do
      begin
        str:=str+inttostr(rbuf[i]);
      end; 
      memo1.lines.add(str);
    end;
      

  6.   

    function HexStrToStr(const S:string):string;
    var
      t:Integer;
      ts:string;
      M,Code:Integer;
    begin
      t:=1;
      Result:='';
      while t<=Length(S) do
      begin
        while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
          inc(t);
        if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
          ts:='$'+S[t]
        else
          ts:='$'+S[t]+S[t+1];
        Val(ts,M,Code);
        if Code=0 then
          Result:=Result+Chr(M);
        inc(t,2);
      end;
    end;
    procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
       i,k:integer;
       s, str1:string ;
    begin
      SetLength(Str1,BufferLength);
      move(buffer^,pchar(Str1)^,bufferlength);
      if length(trim(Str1)) <= 0 then Exit;
      for i := 1 to length(Str1) do
        s := s + inttohex(ord(Str1[i]), 2);
      Memo1.Lines.Add('收到'+HexStrToStr(s));
    end;
    不加这个函数HexStrToStr
    你可能看到的是乱码
      

  7.   

    接受格式要怎么设置
    我没有设置接受格式
    只是设置了comm的
    波特率:1200
    偶校验
    停止位1
    数据位数7
      

  8.   

    将这些属性这样设置就行了软硬全关了
       DtrControl = DtrDisable 
        DsrSensitivity = False
        TxContinueOnXoff = False
        Outx_XonXoffFlow = False
        Inx_XonXoffFlow = False
        RtsControl = RtsDisable