最近在做医院一台Elec 2010 (电化学发光)仪器的数据接受..每次发接受的数据解码出来都不对...请各位帮忙指导一下...
procedure TTestComFrm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
    i:integer;
    viewstring:string;
    rbuf:array[1..8] of byte;
begin
//=============================================
    viewstring:='' ;
    move(buffer^,pchar(@rbuf)^,bufferlength);
    for i:=1 to bufferlength do
    viewstring:=viewstring+ inttohex(rbuf[i],2)+'' ;
    viewstring:='接收:'+ viewstring;
    memo1.lines.add(viewstring);
    memo1.lines.add('');
end;
//=========以下是我的测试记录
我设了断点跟踪
    move(buffer^,pchar(@rbuf)^,bufferlength);
    这时的值是 0,57,1,85,0,6,0
最后得到的viewstring的值 是'05'
仪器上的输出的结果是  105 1407 CA125 18.06

解决方案 »

  1.   

    move(buffer^,pchar(@rbuf)^,bufferlength);
    换成move(buffer^,rbuf[1],bufferlength);试试
      

  2.   

    var
        iLen:integer;
    begin
       iLen := bufferlength;  move(buffer^,pchar(@rbuf)^,iLen );
        for i:=1 to iLen do

    0,57,1,85,0,6,0

      105 1407 CA125 18.06我估计,得到的值,可能是一个偏差而已,所以,
    你要多测几次,才能找出标准值
      

  3.   

    我直接move(buffer^,rbuf,bufferLength)也可以取到数据,你要了解传输协议,在对数据分析,接受时要在发送后的100-200ms后,要延时,防止数据丢失。从仪器上显示的内容看,数据不止六个字节吧