【matlab进阶学习-6】 读取log数据data.txt文件,并做处理,导出报告/表格/图表

原始文件

原始文件格式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);

生成的目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/269575.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go学习之反射知识

反射 文章目录 反射1、反射的使用场景1&#xff09;结构体标签的应用2&#xff09;使用反射机制编写函数的适配器&#xff08;桥连接&#xff09; 2、反射的基本介绍-1.基本介绍-2.反射的图解-3.反射重要的函数和概念 3.反射快速入门-1.请编写一个函数&#xff0c;演示对&#…

锂电3V升12V1A升压芯片WT3209

锂电3V升12V1A升压芯片WT3209 WT3209是一款高功率密度全集成BOOST升压转换器&#xff0c;具备高效能解决方案。3V升12V1A,5V升12V1A WT3209内部集成的功率MOSFET管导通电阻为上管13mΩ和下管11mΩ&#xff0c;具备2A开关电流能力&#xff0c;并且能够提供高达12.6V的输出电压。…

Java - Math类的常用方法及练习

目录 1.1 概述 1.2 常用方法 ❓面试题&#xff1a;为啥Math.round(-1.5)-1? 1.1 概述 java.lang.Math 类包含用于执行基本数学运算的方法&#xff0c;如初等指数、对数、平方根和三角函数。类似这样的工具类&#xff0c;其所有方法均为静态方法&#xff0c;并且不会创建对象…

基于PaddleNLP的深度学习对文本自动添加标点符号(一)

前言 目前以深度学习对文本自动添加标点符号研究很少&#xff0c;已知的开源项目并不多&#xff0c;详细的介绍就更少了&#xff0c;但对文本自动添加标点符号又在古文识别语音识别上有重大应用。 基于此&#xff0c;本文开始讲解基于PaddleNLP的深度学习对文本自动添加标点符号…

论文阅读——ScanQA

ScanQA: 3D Question Answering for Spatial Scene Understanding 输入&#xff1a;点云P和问题Q&#xff0c;输出&#xff1a;答案A 点云p由三维坐标点组成。本文模型使用额外的点云特征&#xff1a;点云高度、颜色、法线和多视图图像特征&#xff0c;这些特征将 2D 外观特征投…

链游成为蓝海,潮游世界开创未来新时代

区块链、元宇宙浪潮来袭&#xff0c;为数字世界开启崭新的大门&#xff0c;一场链游模式的范式革命正在发生&#xff01; 未来&#xff0c;元宇宙中&#xff0c;链游将成为中坚力量。 潮游世界抢占时代先机&#xff0c;利用区块链技术的去中心化和数字资产的不可替代性&#x…

PyQt6 QToolBar工具栏控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计44条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

基于Qt的蓝牙Bluetooth在ubuntu实现模拟

​# 前言 Qt 官方提供了蓝牙的相关类和 API 函数,也提供了相关的例程给我们参考。笔者根据 Qt官方的例程编写出适合我们 Ubuntu 和 gec6818开发板的例程。注意 Windows 上不能使用 Qt 的蓝牙例程,因为底层需要有 BlueZ协议栈,而 Windows 没有。Windows 可能需要去移植。笔者…

Linux shell编程学习笔记35:seq

0 前言 在使用 for 循环语句时&#xff0c;我们经常使用到序列。比如&#xff1a; for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i * 2 $(expr $i \* 2)"; done 其中的 1 2 3 4 5 6 7 8 9 10;就是一个整数序列 。 为了方便我们使用数字序列&#xff0c;Linux提供了…

【Netty的线程模型】

Netty的线程模型 Netty的线程模型知识拓展单Reactor单线程模型单Reactor多线程模型主从Reactor模型 Netty的线程模型 Netty通过Reactor模型基于多路复用器接收并处理用户请求的&#xff0c;多路复用IO模型参考&#xff1a; 多路复用IO模型: 操作系统的IO模型有哪些&#xff1f…

IT圈茶余饭后的“鄙视链” C,C++,Java,Python

目录 C语言的自尊心 C语言的历史与地位 C语言的支持者心态 鄙视链的表现 自尊心的盲点 C的复杂之美 多范式编程的复杂性 高度的控制权 模板元编程的奇妙 面向对象的强大 Java的跨平台与舒适感 跨平台性的优势 舒适的开发体验 对其他语言的轻蔑 面向企业级应用的自…

HTML中常用表单元素使用(详解!)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中常用表单元素使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可以在评论区留言 …