前几天发贴咨询Delphi串口采集问题,大家很热心,给予了我很大帮助。详见
http://topic.csdn.net/u/20090714/08/0afb0f58-8f6e-4962-a1b7-9e72101311c1.html?1651240418我现在需要双通道实时循环采集,也就是数据是比如 12 34 22 34,这算是一组,其中12中的1代表1通道号,234代表数据。22中的2代表2通道号,234代表数据,如此循环。请问大家程序应该如何组织,谢谢!!!

解决方案 »

  1.   


    两个字节中的高字节的高4位代表通道号,低4位和低字节一共12位代表数据。但是需要实时采集双通道数据,因此数据格式是:1X XX 2X XX 1X XX 2X XX......,其中的1和2分别代表1通道和2通道,XXX代表数据!
      

  2.   

    其实你的上个帖子里面已经有人讲得很清楚了
    假设getarray为你接受的数据
      getarray[0]:=#$12;
      getarray[1]:=#$34;
      getarray[2]:=#$22;
      getarray[3]:=#$34;
      lane:=(ord(getarray[2]) and $f0) shr 4;    //取出高4位 
      edit1.Text:=inttostr(lane);
      data:=inttohex((ord(getarray[2]) and $0f)*256+ord(getarray[3]),3);  //取出数据
      edit2.Text:=data;
      

  3.   

    根据通信帧的格式来读取数据,比如你的一帧数据一共有多少个byte,
    读出来放在一个盏中,比如ReSorceBuf: array [0..30] of Integer;
    那么你的接收数据将是ReSorceBuf[0] := 1;ReSorceBuf[1] := 2;
    ReSorceBuf[2] := 3;ReSorceBuf[3] := 4;
    这样通过移位就可得出了。上面是高位在前,具体看你应用协议
    tmp := ReSorceBuf[1] shl 16 + ReSorceBuf[2] shl 8 + ReSorceBuf[3];
    tmp即为你收的一通道数据