和之前相比,增加数据处理和显示功能
(matlab的速度,比起调试助手,慢了一个数量级。Labview 也不行。看来关键时刻还是C++ 靠谱)
***
%程序说明:读取采集的卡,转化,显示
% 按照下面的IP地址建立一个服务端,0.0.0.0地址可以监听所有的请求的IP地址,所以就不用再写客户端的IP了
tcpip_server= tcpip('0.0.0.0',6000,'NetworkRole','server');
%%同理,接收端也要设置个缓冲区才能存下发过来的数据。
tcpip_server.InputBuffersize=512;
%打开服务器,直到建立一个TCP连接才返回;
fopen(tcpip_server);
%发送给采集卡的启动指令
fwrite(tcpip_server,"com_start_ch1");
disp("开始数据采集");
%读取数据。参数’tcpip_server.BytesAvailable/8‘代表着读取几个数据
xunhun_cishu=0;
A=[48];
try_times=1000;
for i=1:try_times
pause(0.005);%每次读取之前等待0.02s,随意设置
try %因为fread()在缓冲区没有数据的时候读取会报错,因此用try—catch语句忽略这种错误,直到读取到数据。
dataReceive=fread(tcpip_server, tcpip_server.BytesAvailable, "char");
B=transpose(dataReceive);%数组转置
%disp(B);
xunhun_cishu=xunhun_cishu+1;
A = [A B];%数组拼接
catch
%gsz_ValuesReceived= tcpip_server.ValuesReceived%查看读取出的数据数量,如果没有读到,返回0;
end
end
disp("开始数据处理");
xiabiao_tmp=1;
double_shuzu_gsz=[0.0];
for j=1:length(A)
if 10==A(j)
double_shuzi=A(1,xiabiao_tmp:j);%提起原始十进制数字
char_tmp='';
for m=1:length(double_shuzi)
char_tmp=[char_tmp,char(double_shuzi(m))];%转成ASCII码数组
end
% disp(char_tmp);
if length(char_tmp)<10
string_tmp=string(char_tmp);%char(里面是ASCII)转成String
double_tmp=str2double(string_tmp);%String 强制转成double 数据
double_shuzu_gsz=[double_shuzu_gsz double_tmp];
end
xiabiao_tmp=j+1;
end
end
subplot(2,2,1)
plot(double_shuzu_gsz)
title("原始数据 加速度");
diff_double_shuzu_gsz=diff(double_shuzu_gsz);
subplot(2,2,2);%在各个分块位置创建坐标区
plot(diff_double_shuzu_gsz);
title("原始数据二次微分曲线-加速度");
fclose(tcpip_server);
后记:程序还有不完善的地方,不过matlab 本身就是做测试的,所以 到此为此了
正常运作的代码,肯定要到C++里面去实现了