【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);

生成的目录

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是电商价格监控

电商价格监控是一种系统爬取数据后的实现动作&#xff0c;比起含义&#xff0c;其实更应该关注为什么要做电商价格监控&#xff0c;电商价格监控的执行前提是品牌要治理渠道&#xff0c;需要将电商平台的低价链接打击干净&#xff0c;那就需要先对低价链接进行确认、筛选&#…

YOLOv8改进 | 2023主干篇 | 利用轻量化卷积优化PP-HGNetV2改进主干(全网独家创新)

一、本文介绍 Hello&#xff0c;大家好&#xff0c;上一篇博客我们讲了利用HGNetV2去替换YOLOv8的主干&#xff0c;经过结构的研究我们可以发现在HGNetV2的网络中有大量的卷积存在&#xff0c;所以我们可以用一种更加轻量化的卷积去优化HGNetV2从而达到更加轻量化的效果&#…

AspNetCore 中使用 Knife4jUI 更加友好的Swagger界面

&#x1f680;介绍 aspnetcore.knife4j是一个基于.NET Core平台的Swagger UI库&#xff0c;它提供了API文档的生成和管理功能。这个库的前身是swagger-bootstrap-ui&#xff0c;在Java项目中广泛使用&#xff0c;由于其优秀的界面和易用性被许多开发者所推崇。现在&#xff0c…

探索Nginx的奥秘--从代理到负载均衡的艺术实践

文章目录 &#x1f33a;Nginx的引入&#x1f33a;&#x1f33a;深刻理解正向代理与反向代理&#x1f33a;&#x1f339;Reverse proxy&#x1f339;&#x1f339;正向代理与反向代理的区别&#x1f339;&#x1f339;反向代理为什么叫反向代理&#x1f339;&#x1f339;负载均…

MySQL和Redis有什么区别?

目录 一、什么是MySQL 二、什么是Redis 三、MySQL和Redis的区别 一、什么是MySQL MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是最流行的数据库之一。MySQL以其高性能、可靠性和易用性而闻名&#xff0c;广泛应用于各种Web应用程序…

27系列DGUS智能屏发布:可实时播放高清模拟信号摄像头视频

针对高清晰度的模拟信号摄像头视频画面的显示需求&#xff0c;迪文特推出27系列DGUS智能屏。该系列智能屏可适配常见的AHD摄像头、CVBS摄像头&#xff0c;支持单路1080P高清显示、两路720P同屏显示&#xff08;同一类型摄像头&#xff09;。用户通过DGUS简单开发即可实现摄像头…

【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找&#xff0c;向量只会在尾部增加删除。 题目 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你一个二维整数数组 tasks &#xff0c;其中 ta…

万界星空科技MES系统中的生产调度流程

MES系统生产调度的目标是达到作业有序、协调、可控和高效的运行效果&#xff0c;作业计划的快速生成以及面向生产扰动事件的快速响应处理是生产调度系统的核心和关键。 为了顺利生成作业计划&#xff0c;需要为调度系统提供完整的产品和工艺信息&#xff0c;MES系统生成作业计…

Flutter打包iOS苹果IPA应用有哪些优势?如何实现?

Hello各位小伙伴们各位开发者们好&#xff0c;我是咕噜铁蛋&#xff01;&#xff0c;经常和移动应用开发相关的话题打交道的伙伴们都知道。在开发移动应用时&#xff0c;选择合适的打包方式对于应用的发布和分发至关重要。在今天这篇文章中&#xff0c;我将和大家聊聊Flutter打…

【小沐学Python】Python实现语音识别(Whisper)

文章目录 1、简介1.1 whisper简介1.2 whisper模型 2、安装2.1 whisper2.2 pytorch2.3 ffmpeg 3、测试3.1 命令测试3.2 代码测试&#xff1a;识别声音文件3.3 代码测试&#xff1a;实时录音识别 4、工具4.1 WhisperDesktop4.2 Buzz4.3 Whisper-WebUI 结语 1、简介 https://gith…

基于QTreeWidget实现多级组织结构

基于QTreeWidget实现多级组织结构以及带Checkbox的选择树 采用基于QWidgetMingw实现的原生的消息气泡 通过QTreeWidget控件实现的多级组织结构树。 基于QTreeWidget实现多级组织结构代码已上传到【https://gitee.com/duyanjun/bubbleChat.git】 目录 基于QTreeWidget实现多级组…

浅谈微服务架构的演进

本文将介绍微服务架构和相关的组件&#xff0c;介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景&#xff0c;因此不会涉及具体如何使用组件等细节。 要理解微服务&#xff0c;首先要先理解不是微服务的那些。通常跟微服务相对…

Redis系列之简单实现watchDog自动续期机制

在分布锁的实际使用中&#xff0c;可能会遇到一种情况&#xff0c;一个业务执行时间很长&#xff0c;已经超过redis加锁的时间&#xff0c;也就是锁已经释放了&#xff0c;但是业务还没执行完成&#xff0c;这时候其它线程还是可以获取锁&#xff0c;那就没保证线程安全 项目环…

【Unity学习笔记】光照简介

本节主要是简单介绍一些常见的光照组件和渲染设置。 文章目录 灯光类型平行光Directional Light点光源Point Light聚光灯Spot Light面积光 Area Light 阴影设置全局光照明光照模式直接光照与间接光照Mixed Lighting 光照探针Light Probe Group光照探针组 反射探针 灯光类型 在…

使用 Python 实现简单的爬虫框架

爬虫是一种自动获取网页内容的程序&#xff0c;它可以帮助我们从网络上快速收集大量信息。在本文中&#xff0c;我们将学习如何使用 Python 编写一个简单的爬虫框架。 一、请求网页 首先&#xff0c;我们需要请求网页内容。我们可以使用 Python 的 requests 库来发送 HTTP 请…

CLEAR MOT评估指标

错误正样本&#xff08;False Positive&#xff0c;FP&#xff09;&#xff1a;整个视频中被预测为正的负样本数。 错误负样本&#xff08;False Negatives&#xff0c;FN&#xff09;&#xff1a;整个视频中被预测为负的正样本数。 IDs&#xff1a;跟踪过程中目标ID切换总数。…

springcloud微服务篇--2.微服务之间的调用

一、微服务案例需求1&#xff1a; 根据订单id查询订单的同时&#xff0c;把订单所属的用户信息一起返回 1、新建订单项目&#xff0c;用户服务。 2.RestTemplate实现微服务之间的访问。 在order-service的OrderApplication中注册RestTemplate 注入调用&#xff1a; Autowire…

【ModBus进阶日记】①ModBus协议栈解析

关注星标公众号&#xff0c;不错过精彩内容 文章目录 前言一、ModBus简介二、ModBus协议概述2.1 ModBus RTU主机框架2.2 ModBus RTU从机框架 三、ModBus帧描述四、ModBus RTU模式的报文断帧五、ModBus字节序六、ModBus事务处理流程七、ModBus异常响应八、ModBus功能码定义九、…

如何实现nacos的配置的热更新

我们在使用nacos进行修改配置后&#xff0c;需要微服务无需重启即可让配置生效&#xff0c;也就是使配置进行热更新我们可以采用下面的两种方式进行配置的热更新操作 方式一&#xff1a;在Value所注入的变量的类上添加注解RefreshScope RestController RequestMapping("/o…

Local Color Distributions Prior for ImageEnhancement

图1&#xff1a;给定同时具有过曝光&#xff08;背景窗口&#xff09;和欠曝光&#xff08;前景人物&#xff09;的输入图像&#xff08;a&#xff09;&#xff0c;现有方法不能很好地处理这两个问题。虽然&#xff08;b&#xff09;在背景上表现更好&#xff0c;但前景仅略微变…