【matlab进阶学习-6】 读取log数据data.txt文件,并做处理,导出报告/表格/图表
2023-12-13 07:00:57
原始文件
原始文件格式txt,每一行对应一个数据,数据之间由逗号分割开
对应意思
时刻,电压,电流,功率,容量,,电流,功率,,RTC时间,状态1,状态2,状态3,电量,电压,电流,故障码,工作状态,电机电流1,电机电流2,电机电流3
需求
💡
1,打开data 表格
2,删除第一列中的时间重复项,建立新表格,并保存输出
3,取出所有表格中的时间,电压,电流,容量,状态,led灯 建立新的表格,并生成图表
4,计算状态为1时候的带刀盘工作时间 worktime,
计算状态为2时的回归时间 backtime,
5,计算工作时,行走(0mA>cur >-500mA) 平均电流,最小电流,电流众数,电流中位数 walk_cur_avr min mode midian
计算工作时,切割(cur <-500mA ) 平均电流,最小电流,电流众数,电流中位数 walk_cur_avr min mode midian
6,将电量对应的最大最小电压显示出来
7,将4,5导出data.txt 报告
1,打开data 表格
clear;clc;
data_m = readtable('data.txt',"Delimiter",',');
%Delimiter 分隔符
%, 以逗号风格
2,删除第一列中的时间重复项,建立新表格,并保存输出
filename = 'data_report.xlsx';
writetable(data_m, filename, 'Sheet', 'data_init');
%将data_m 数据写入文件名未data_report.xlsx的表格的data_init中
[data_d,n] = unique(data_m(:,1));%删除第一列中的重复项,其他列对应删除 %data_d,n,唯一列的索引
data_only=data_m(n,:);
%filename = 'data_only.xlsx';
writetable(data_only, filename, 'Sheet', 'data_only');
3,取出所有表格中的时间,电压,电流,容量,状态,led灯 建立新的表格,并生成图表
data_time = table2array(data_only(:,1));
data_vol = table2array(data_only(:,2));
data_cur = table2array(data_only(:,3));
data_state = table2array(data_only(:,12));
data_led = table2array(data_only(:,14));
%读取时间,电压,电流,状态,led,并改为矩阵格式
data_led_num =[];
for i =1:length(data_led)
a=cell2mat(data_led(i)); %提取每一行的数据,并将cell型转成mat型
b=str2double(a(4)); %提取字符串的第四个数
data_led_num=[data_led_num;b]; %保存成新的表格
end
plot(data_time,data_vol,data_time,data_cur,data_time,data_state.*10000,data_time,data_led_num*10000)
xlabel('time')
saveas(gcf,'picture.png'); % 将图形导出为PNG格式
%生成图表
%添加x轴
%保存图片格式
4,计算状态为1时候的带刀盘工作时间 worktime,计算状态为2时的回归时间 backtime,
worktime =floor( sum(data_state==1)/60)
backtime =floor( sum(data_state==2)/60)
%状态1的逻辑数求和,除以60 秒转成分钟,floor 取整
5,计算工作时,行走(0mA>cur >-500mA) 平均电流,最小电流,电流众数,电流中位数 walk_cur_avr min mode midian
计算工作时,切割(cur <-500mA ) 平均电流,最小电流,电流众数,电流中位数 walk_cur_avr min mode midian
format long g
walk_index = find(data_cur>-500 & data_cur<0); %找出-500mA-0mA 的索引
blake_index = find(data_cur<-500 );%找出<-500mA 的索引
data_cur_walk = data_cur(walk_index); %提取行走电流
data_cur_blake = data_cur(blake_index);%提取切割电流
disp("行走电流数据")
data_cur_walk_min = min(data_cur_walk)%最小值
data_cur_walk_avr = floor(mean(data_cur_walk)) %平均值
data_cur_walk_mode = mode(data_cur_walk)%众数
data_cur_walk_median = median(data_cur_walk)%中位数
disp("切割电流数据")
data_cur_blake_min = min(data_cur_blake)
data_cur_blake_avr =floor( mean(data_cur_blake))
data_cur_blake_mode = mode(data_cur_blake)
data_cur_blake_median = median(data_cur_blake)
6,将电量对应的最大最小电压显示出来
disp_led_6_index = find(data_led_num==6);
disp_led_5_index = find(data_led_num==5);
disp_led_4_index = find(data_led_num==4);
disp_led_3_index = find(data_led_num==3);
disp_led_2_index = find(data_led_num==2);
disp_led_1_index = find(data_led_num==1);
%提取 各指示灯的电量索引
disp_vol_6_arr = data_vol(disp_led_6_index);
disp_vol_5_arr = data_vol(disp_led_5_index);
disp_vol_4_arr = data_vol(disp_led_4_index);
disp_vol_3_arr = data_vol(disp_led_3_index);
disp_vol_2_arr = data_vol(disp_led_2_index);
disp_vol_1_arr = data_vol(disp_led_1_index);
%提取各指示灯的电压
disp_vol_6_arr_max = max(disp_vol_6_arr);
disp_vol_6_arr_min = min(disp_vol_6_arr);
%计算最大最小值
disp_vol_5_arr_max = max(disp_vol_5_arr);
disp_vol_5_arr_min = min(disp_vol_5_arr);
disp_vol_4_arr_max= max(disp_vol_4_arr);
disp_vol_4_arr_min = min(disp_vol_4_arr);
disp_vol_3_arr_max = max(disp_vol_3_arr);
disp_vol_3_arr_min = min(disp_vol_3_arr);
disp_vol_2_arr_max = max(disp_vol_2_arr);
disp_vol_2_arr_min = min(disp_vol_2_arr);
disp_vol_1_arr_max = max(disp_vol_1_arr);
disp_vol_1_arr_min = min(disp_vol_1_arr);
disp_vol_6_worktime = floor(sum(data_led_num==6)/60)
disp_vol_5_worktime = floor(sum(data_led_num==5)/60)
disp_vol_4_worktime = floor(sum(data_led_num==4)/60)
disp_vol_3_worktime = floor(sum(data_led_num==3)/60)
disp_vol_2_worktime = floor(sum(data_led_num==2)/60)
disp_vol_1_worktime = floor(sum(data_led_num==1)/60)
%计算工作时间
7,将4,5导出data.txt 报告
fileID = fopen('report.txt','w');
fprintf(fileID,'%s\n', '----report----');
fprintf(fileID,'%s\n', '工作时长');
fprintf(fileID,'带刀盘切割工作时长:%d 分钟\n', worktime);
fprintf(fileID,'触发回归后工作时长:%d 分钟\n', backtime);
fprintf(fileID,'%s\n', ' ');
fprintf(fileID,'%s\n', '行走电流');
fprintf(fileID,'行走最小电流:%d mA\n', data_cur_walk_min);
fprintf(fileID,'行走平均电流:%d mA\n', data_cur_walk_avr);
fprintf(fileID,'行走众数电流:%d mA\n', data_cur_walk_mode);
fprintf(fileID,'行走中位数电流:%d mA\n', data_cur_walk_median);
fprintf(fileID,'%s\n', ' ');
fprintf(fileID,'%s\n', '切割电流');
fprintf(fileID,'切割最小电流:%d mA\n', data_cur_blake_min);
fprintf(fileID,'切割平均电流:%d mA\n', data_cur_blake_avr);
fprintf(fileID,'切割众数电流:%d mA\n', data_cur_blake_mode);
fprintf(fileID,'切割中位数电流:%d mA\n', data_cur_blake_median);
fprintf(fileID,'%s\n', ' ');
fprintf(fileID,'%s\n', 'LED灯对应电压及工作时长');
fprintf(fileID,'LED=6 :(%d mV~%d mV),%d 分钟\n', disp_vol_6_arr_max,disp_vol_6_arr_min,disp_vol_6_worktime);
fprintf(fileID,'LED=5 :(%d mV~%d mV),%d 分钟\n', disp_vol_5_arr_max,disp_vol_5_arr_min,disp_vol_5_worktime);
fprintf(fileID,'LED=4 :(%d mV~%d mV),%d 分钟\n', disp_vol_4_arr_max,disp_vol_4_arr_min,disp_vol_4_worktime);
fprintf(fileID,'LED=3 :(%d mV~%d mV),%d 分钟\n', disp_vol_3_arr_max,disp_vol_3_arr_min,disp_vol_3_worktime);
fprintf(fileID,'LED=2 :(%d mV~%d mV),%d 分钟\n', disp_vol_2_arr_max,disp_vol_2_arr_min,disp_vol_2_worktime);
fprintf(fileID,'LED=1 :(%d mV~%d mV),%d 分钟\n', disp_vol_1_arr_max,disp_vol_1_arr_min,disp_vol_1_worktime);
fclose(fileID);
生成的目录
文章来源:https://blog.csdn.net/cengqiu4314/article/details/134850927
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!