读书人

关于串口数据提取算法有关问题?

发布时间: 2012-03-17 19:06:28 作者: rapoo

关于串口数据提取算法问题?急
现从串口取的数据,需从中取出28H到54H中间5个字节中的前4个字节,代码如下:
//数据接收消息处理函数
procedure tform1.wmcommnotify(var message:tmessage);
var
titem:tlistitem;
commstate:comstat;
dwnumberofbytesread:dword;
errorflag:dword;
inputbuffer:array[0..1024] of char; //静态数组
recstr:string;
i,n:integer;
begin ===========数据引出==============

//开始提取数据
for n:=0 to dwnumberofbytesread-1 do//dwnumberofbytesread为串口已读取字节
begin 数,在api函数readfile()中已获取
if inttohex(ord(inputbuffer[n]),2)= '28 ' then
begin
i:=0;
recstr:= ' ';
while i <4 do
begin
i:=i+1;
recstr:=recstr+inttohex(ord(inputbuffer[n+i]),2);
end;
titem:=listview1.Items.Add;
titem.caption:=datetimetostr(date()+time());
titem.SubItems.Add(recstr);
但是就是这样,前二组28H和54H之间的能正确的取出来(11022B15,11022B01)到第三组就前面1102为对的0030为错的,本应为2B05),到第四个就是发送测试包中完全没有的00301AFA本应为(11022B09),接下就如上面循环出现错误前,即两组对,半组错,一组全都一直到结束,不知是那里算法有问题,请大家帮我看一看,急啊!!

[解决办法]
哈哈,兄弟,我看不是程序有问题,是串口参数出问题吧!
[解决办法]
简单的测试一下:
把一个字串放进去试试,如果正确,就是楼上的说的可能是串口读到的数据有问题,如果不对,就是程序的问题.

[解决办法]
LZ可以先排除串口等一系列非程序问题!
然后在用例子一步一步测试。
你用的控件最好也检查一下!
[解决办法]
用串口调试器测试一下,看收到的数据是否正确,然后再分析是程序还是串口的问题

读书人网 >.NET

热点推荐