前几天发贴咨询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代表数据,如此循环。请问大家程序应该如何组织,谢谢!!!
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代表数据,如此循环。请问大家程序应该如何组织,谢谢!!!
两个字节中的高字节的高4位代表通道号,低4位和低字节一共12位代表数据。但是需要实时采集双通道数据,因此数据格式是:1X XX 2X XX 1X XX 2X XX......,其中的1和2分别代表1通道和2通道,XXX代表数据!
假设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;
读出来放在一个盏中,比如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即为你收的一通道数据