我正在尝试使用Matlab读取一些磁场。为此,我正在使用Windows XP操作系统,我正在使用Putty从设备发送连续读取命令。当Putty运行并保存日志文件时,我正在Matlab上阅读这个日志文件。设备是HMR2300。 当我使用ASCII格式阅读时,我没有遇到任何问题。但是,我需要以二进制形式收集这些数据,这就是问题所在。 输出字符串长7个字节“Xh | Xl | Yh | Yl | Zh | Zl |” Xh =有符号字节,X轴 - X1 =低字节,X轴。
由于我有四个设备,我使用以下代码收集while循环内的所有数据:
%*****% Reading from Device 01
[D1, N] = fread(FidMag1, 7);
while (true)
MagData1 = [MagData1, D1'];
CRLF1 = find(MagData1 == 13);
CRLF1 = [0, CRLF1]';
if (CRLF1(end) ~= 7)
MagData1(1:CRLF1(end))=[];
[D1, N] = fread(FidMag1, 7);
else
break;
end
end
ttt = clock();
TimeStamp1(Count) = ttt(6) + ttt(5)*60 + ttt(4)*3600;
NoCalMagX1(Count) = int16(typecast(uint8(MagData1(1)), 'int8')) * int16(256) + (MagData1(2));
NoCalMagY1(Count) = int16(typecast(uint8(MagData1(3)), 'int8')) * int16(256) + (MagData1(4));
NoCalMagZ1(Count) = int16(typecast(uint8(MagData1(5)), 'int8')) * int16(256) + (MagData1(6));
MagData1(1:CRLF1(end))=[];
所以,之后我连续阅读设备2,3和4。
这是我的结果: Image Link
你可以在200秒之前和之后大致看到我有延迟收集数据,这是我需要解决的问题。通常当我的领域开始变化时,我开始收到延迟,我不知道如何解决它。
我尝试用我的代码做一个不同的方法,但这比第一个更差:
%*****% Reading from Device 01
if (SYNC_1)
[D1, countB] = fread(FidMag1, 7-BIB_1);
if (countB ~= 7)
for a=1:countB
temp(BIB_1+a) = D1(a);
end
end
if (flag_temp)
flag_temp = 0;
else if(find(D1 == 13) == 7)
for a=1:countB
temp(a) = D1(a);
end
end
end
BIB_1 = BIB_1 + countB;
if(BIB_1 == 7)
if (find(temp == 13) == 7)
ttt = clock();
TimeStamp1(Count_1) = ttt(6) + ttt(5)*60 + ttt(4)*3600;
NoCalMagX1(Count_1) = int16(typecast(uint8(temp(1)), 'int8')) * int16(256) + (temp(2));
NoCalMagY1(Count_1) = int16(typecast(uint8(temp(3)), 'int8')) * int16(256) + (temp(4));
NoCalMagZ1(Count_1) = int16(typecast(uint8(temp(5)), 'int8')) * int16(256) + (temp(6));
fprintf('SENSOR B\nX:%.0f Y:%.0f Z:%.0f\n\n', NoCalMagX1(Count_1), NoCalMagY1(Count_1), NoCalMagZ1(Count_1));
Count_1 = Count_1 + 1;
else
SYNC_1 = 0;
end
BIB_1 = 0;
end
end
if (~SYNC_1)
[D1, countB] = fread(FidMag1, 7-BIB_1);
BIB_1 = BIB_1 + countB;
if (BIB_1 > 0)
index = find (D1 == 13);
if(index)
BIB_1 = 7 - index(end);
if(BIB_1 == 0)
flag_temp = 1;
for a=(BIB_1+1):7
temp(a-BIB_1) = D1(a);
end
else
for a=(index+1):countB
temp(aux) = D1(a);
aux = aux + 1;
end
end
aux = 1; %temp index
SYNC_1 = 1;
else
SYNC_1 = 0;
BIB_1 = 0;
end
end
end
结果: Image Link
你们有什么想法我怎么解决这个问题?要使用ascii收集数据我的方法类似,我没有任何问题。此外,当我使用第一个代码从一个设备读取时,我也没有任何问题。我只是迷失在如何解决这个问题。