0
点赞
收藏
分享

微信扫一扫

matlab:作为TCP服务器,读取数据 V3版本

西曲风 2022-03-11 阅读 50
matlab

和之前相比,增加数据处理和显示功能

(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++里面去实现了

举报

相关推荐

0 条评论