Matlab包头数据包尾,数据包完整性求助!!1

a=textread('d:/matlab10.txt','%s'); %以字符串形式读取数据文件到a矩阵

b=hex2dec(a); %将十六进制转换成十进制

if b(1)~=126 %若第一个数据包出错,不是以7E开头,那么将第一个数据包信息删除

bi=find(b==126);

b(1:bi(1))=[];

end

bi=find(b==126);

if bi(2)-bi(1)==1 %当存在两个7E开头的情况时,要把第一个7E删掉

b(bi(1))=[];

end

i=1;

while(1) %当开头的数据包正确后,剩下的问题就是判断中间段数据的正确性

bl=find(b==126);

n=size(bl,1);

if i==n %无限循环的跳出条件是把所有的7E都判断过一遍

break;

end

z=bl(i+1)-bl(i); %用z记录相邻两个7E的距离

m1=mod(i,2); %用m1记录当前7E的序数的奇偶性

if z==8||z==7 %如果出现数据位或者是序号位刚好是7E的情况,我们删除这组数据

b(bl(i):bl(i+2))=[];

continue

end

if ((m1==1)&&(z~=12)) %第一种错误情况是,当前7E是奇数序列时,与下一个7E位置差不是12

b(bl(i):bl(i+1))=[];

continue

else if ((m1==0)&&(z~=1)) %第二种错误情况是,当前7E是偶数序列时,与下一个7E位置差不是1

if (bl(i+2)-bl(i+1)==12)

b((bl(i)+1):(bl(i+1)-1))=[]; %在第二种情况下还包括两种错误,一种是在两个正常的数据包之间多了几个字节

i=i+1;

continue

else

b((bl(i)+1):bl(i+1))=[]; %另一种错误是,包的发送产生了漏发,丢失了正常情况下的7E和部分包头

i=i+1;

continue

end

end

end

i=i+1;

end

c=size(b,1); %统计新的数据文件的长度

m=mod(c,13); %对13取余,若余数不是0,则证明文件不是以7E结束要修改

if m==0

A=reshape(b,13,[]);

else

b((c-m+1):c)=[]; %将多余的数据删除

A=reshape(b,13,[]); %由于数据是按列整定,所以需要将数组b先整定成13行

end

A=A';%然后再转置得到13列的数据包矩阵

毕业设计是无线传感器温度的采集,运行到b就变成无穷大了,求大神伸出援手啊!!!!!

[本帖最后由 wery1987 于 2011-5-21 21:06 编辑]

a70cbf5f56cb187f20fb09bae08ed3de.gif

2011-5-21 21:06 上传

点击文件名下载附件

1.87 KB, 下载次数: 14

数据包

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值