Great_data=>Copy_Data=>Chart_RealTime=>UI_All

Great_data

--------------------

import csv
import os
import random
from datetime import datetime
import logging
import time

# 配置日志记录
logging.basicConfig(filename='D:/_Study/Case/Great_Data/log.txt',
                    level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')

def 记录日志(消息):
    logging.info(消息)
    print(消息)

def 生成随机记录():
    # 生成随机数据
    aX_ICM_1 = random.uniform(-0.29969177, 0.29969177)
    aY_ICM_1 = random.uniform(0.6930143, 2.29969177)
    aZ_ICM_1 = random.uniform(-0.6866665, 0.69969177)
    timestamp = datetime.now().strftime("%Y/%m/%d %H:%M:%S:%f")[:-3]  # 格式化时间戳

    aX_MPU_1 = random.uniform(-0.38232422, 0.69969177)
    aY_MPU_1 = random.uniform(0.5595703, 0.79969177)
    aZ_MPU_1 = random.uniform(0.7294922, 2.7294922)

    # 数据记录列表
    record = [
        aX_ICM_1,
        aY_ICM_1,
        aZ_ICM_1,
        timestamp,
        aX_MPU_1,
        aY_MPU_1,
        aZ_MPU_1
    ]
    return record

def 追加到CSV(文件路径, 记录, 表头=None):
    # 尝试写入CSV文件
    try:
        if not os.path.exists(文件路径):
            # 如果文件不存在,则创建新文件并写入表头
            with open(文件路径, mode='w', newline='', encoding='utf-8') as 文件:
                writer = csv.writer(文件)
                if 表头:
                    writer.writerow(表头)
                writer.writerow(记录)
        else:
            # 否则追加记录
            with open(文件路径, mode='a', newline='', encoding='utf-8') as 文件:
                writer = csv.writer(文件)
                writer.writerow(记录)
        记录日志(f"记录已追加到 {文件路径}")
    except PermissionError:
        记录日志("权限拒绝:请确保目录可访问,并尝试以管理员身份运行脚本。")
    except Exception as e:
        记录日志(f"写入CSV时发生错误:{e}")

# 定义文件路径
基础目录 = 'D:/_Study/Case/Great_Data/Data'
os.makedirs(基础目录, exist_ok=True)  # 创建目录(如果不存在)

# 文件名称模板
文件名模板 = 'AA@BB@{index}@{time}.csv'
文件索引 = 0

# 获取所有符合条件的文件
文件列表 = []
for 文件名 in os.listdir(基础目录):
    if 文件名.startswith('AA@BB@'):
        文件路径 = os.path.join(基础目录, 文件名)
        文件列表.append(文件路径)

# 按照时间戳排序文件列表
文件列表.sort(key=lambda x: int(os.path.basename(x).split('@')[2].split('.')[0]), reverse=True)

# 只保留最新的两个文件
保留文件列表 = 文件列表[:1]
删除文件列表 = 文件列表[1:]

# 删除多余的文件,并记录到日志
for 文件路径 in 删除文件列表:
    os.remove(文件路径)
    记录日志(f"{文件路径} 已被删除。")

# 如果没有文件,则创建第一个文件
if not 保留文件列表:
    文件索引 += 1
    当前时间 = datetime.now().strftime("%Y%m%d_%H%M%S_%f")[:-3]
    文件路径 = os.path.join(基础目录, 文件名模板.format(index=文件索引, time=当前时间))
    表头 = [ 'aX_ICM_1', 'aY_ICM_1', 'aZ_ICM_1', '时间戳','aX_MPU_1', 'aY_MPU_1', 'aZ_MPU_1']
    追加到CSV(文件路径, 表头, 表头=表头)
    记录日志(f"{文件路径} 已创建并写入表头。")
    保留文件列表.append(文件路径)

# 开始生成记录
记录总数 = 0
while 文件索引 <= 1:
    for 文件路径 in 保留文件列表:
        if 记录总数 >= 10:
            文件索引 += 1
            if 文件索引 > 1:
                记录日志("所有文件均已达到最大行数。")
                break
            当前时间 = datetime.now().strftime("%Y%m%d_%H%M%S_%f")
            文件路径 = os.path.join(基础目录, 文件名模板.format(index=文件索引, time=当前时间))
            表头 = [ 'aX_ICM_1', 'aY_ICM_1', 'aZ_ICM_1', '时间戳','aX_MPU_1', 'aY_MPU_1', 'aZ_MPU_1']
            追加到CSV(文件路径, 表头, 表头=表头)
            记录日志(f"{文件路径} 已创建并写入表头。")
            保留文件列表.append(文件路径)
            记录总数 = 0

        记录 = 生成随机记录()
        追加到CSV(文件路径, 记录)
        记录总数 += 1
        记录日志(f"当前 {文件路径} 总行数为:{记录总数}")
 
    if 文件索引 > 2:
        break

记录日志("处理完成。")

print("Task completed. Will reboot in 3 minutes.")
time.sleep(180)  # 等待180秒
print("Rebooting now...")
os.system('sudo reboot')

'''
[Unit]
Description=Great Data Service
After=network.target

[Service]
User=pi
WorkingDirectory=/home/pi/Great_Data
ExecStart=/usr/bin/python3 /home/pi/Great_Data/Great_data.py

[Install]
WantedBy=multi-user.target

'''

-------------------

Copy_Data

-------------------

import pyautogui
import time
import os
import shutil

#10 秒计时后开始运行
pyautogui.countdown(3)


#到达位置鼠标左键单击
pyautogui.click(1154,1038,button='left')#任务栏图标
time.sleep(0.1)
pyautogui.click(1158,910,button='left')#VNC程序
time.sleep(0.1)
pyautogui.click(659,65,button='left')#PI程序
time.sleep(0.1)##
pyautogui.click(1285,366,button='left')#MENU 菜单
time.sleep(0.1)
pyautogui.click(1170,486,button='left')#File Transfer
time.sleep(0.1)
pyautogui.click(743,677,button='left')#SendFile
time.sleep(0.1)
pyautogui.click(953,498,button='left')#File选择
time.sleep(0.1)
pyautogui.click(1039,615,button='left')#OK
time.sleep(0.1)
pyautogui.click(1039,616,button='left')#桌面路径
time.sleep(0.1)
pyautogui.click(1002,762,button='left')#确定
time.sleep(0.1)
pyautogui.click(1298,300,button='left')#X1
time.sleep(0.1)
pyautogui.click(1190,373,button='left')#X2
time.sleep(0.1)
pyautogui.click(1295,333,button='left')#X3
time.sleep(0.1)

pyautogui.click(1157,1037,button='left')##VNC程序
time.sleep(0.1)
pyautogui.click(1465,874,button='left')#Close File Transfere
time.sleep(0.1)

#到达位置鼠标左键双击
pyautogui.doubleClick(x=1298, y=301, button="left")
time.sleep(1.2)
#pyautogui.click(922,68,button='left')
#time.sleep(1)

#存储截图
im = pyautogui.screenshot()
im.save(r'D:\GGY\屏幕截图.png')

#####获取最新文件,并单独复制至处理文件夹

# 定义源目录和目标目录
src_dir = r'C:\Users\Administrator\Desktop\Great_Data\Data'
dst_dir = r'C:\Users\Administrator\Desktop\Great_Data\Data\Send'
# 如果目标目录不存在,则创建之
if not os.path.exists(dst_dir):
    os.makedirs(dst_dir)

# 获取目录下所有的文件及其修改日期,并找到最新的那个
files = [os.path.join(src_dir, f) for f in os.listdir(src_dir) if os.path.isfile(os.path.join(src_dir, f))]
files.sort(key=lambda x: os.path.getmtime(x), reverse=True)

# 检查是否找到了文件
if files:
    latest_file = files[0]
    print(f'Copying the latest file: {latest_file}')
    shutil.copy2(latest_file, dst_dir)  # 使用shutil.copy2来保持元数据
else:
    print('No files found in the directory.')

#####获取最新文件,并单独复制至处理文件夹    

#填入参数, 第一参数是输入内容,第二个参数是每个字符间的间隔时间;
#pyautogui.moveTo(1241,311)
#count=(r'd:\aa')
#for c in str(count):
#    pyautogui.keyDown(c)

#填入参数, 第一参数是输入内容,第二个参数是每个字符间的间隔时间;
#pyautogui.click(915,87,button='left')
#time.sleep(2)
#pyautogui.click(364,284,button='left')
#count=(2  )
#for cc in str(count):
#    pyautogui.keyDown(cc)
    

#实时显示坐标
#pyautogui.displayMousePosition()
'''
import pyautogui
import time
#10 秒计时后开始运行
pyautogui.countdown(3)

#实时显示坐标d:\aa
while True:
    x,y=pyautogui.position()
    print('Pos:',(x,y))

'''

-------------------

Chart_RealTime
 

-------------------

import os
import pygame
import pandas as pd
import glob
import logging
from pygame.locals import *

# 配置日志记录
log_path = r'D:\Tim_Study\Case\Chart_RealTime\log.txt'
logging.basicConfig(filename=log_path, level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 初始化pygame
pygame.init()

# 设置窗口大小和标题
WINDOW_WIDTH = 1920
WINDOW_HEIGHT = 1080
WINDOW_TITLE = "Pump PHM"
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption(WINDOW_TITLE)

# 定义颜色
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
ORANGE = (255, 165, 0)
PURPLE = (128, 0, 128)
BROWN = (139, 69, 19)  
BLACK = (0, 0, 0)

# 源目录路径
source_dir = r'C:\Users\Administrator\Desktop\Great_Data\Data\Send'

# 查找目录下的所有CSV文件
csv_files = glob.glob(os.path.join(source_dir, '*.csv'))

if not csv_files:
    print("未找到CSV文件,请检查目录路径是否正确。")
else:
    # 用于绘制图表的数据
    data = []

    # 定义处理时间戳的函数
    def process_timestamp(ts):
        try:
            if ':' in ts:
                ts, microseconds = ts.rsplit(':', 1)
       

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

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

相关文章

代码随想录Day 51|题目:99.岛屿数量、100.岛屿的最大面积

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 题目一&#xff1a;99. 岛屿数量思路深度优先搜索DFS广度优先搜索BFS 题目二&#xff1a;100. 岛屿的最大面积DFSBFS 总结 题目一&#xff1a;99. 岛屿数量 99. 岛屿数量 (kamacoder.com) 思路 …

Tomcat服务器—Windows下载配置详细教程

一、关于 1.1 简介 Tomcat是一个开源的Java Servlet容器和Web服务器&#xff0c;由Apache软件基金会维护。它实现了Java Servlet和JavaServer Pages (JSP) 规范&#xff0c;用于运行Java Web应用程序。Tomcat支持多种Java EE功能&#xff0c;并提供了高效的性能和可扩展性&am…

华为OD机试 - 分解正整数 - 数学推导(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

Redisson实现分布式锁(看门狗机制)

目录 可重入锁&#xff1a; 锁重试和看门狗机制&#xff1a; 主从一致性&#xff1a; 首先引入依赖&#xff0c;配置好信息 3.使用Redisson的分布式锁 可重入锁&#xff1a; 可重入锁实现是通过redsi中的hash实现的&#xff0c;key依旧是业务名称加id&#xff0c;然后第一个…

如何成立一家自己的等级保护测评机构?需要哪些条件?有哪些要求?

给大家的福利&#xff0c;点击下方蓝色字 即可免费领取↓↓↓ &#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 各省、自治区、直辖市公安厅、局网络安全保卫总队&#xff0c;新疆生产建设兵团公安局网络安…

【高分系列卫星简介——高分一号(GF-1)】

高分一号卫星&#xff08;GF-1&#xff09; 高分一号&#xff08;GF-1&#xff09;是中国高分辨率对地观测系统&#xff08;简称“高分专项”&#xff09;的第一颗卫星&#xff0c;具有里程碑式的意义。以下是对高分一号卫星的详细介绍&#xff1a; 一、基本信息 发射时间&…

2024华为杯研究生数学建模竞赛(研赛)选题建议+初步分析

提示&#xff1a;C君认为的难度&#xff1a;DE<C<F&#xff0c;开放度&#xff1a;CDE>F。 华为专项的题目&#xff08;A、B题&#xff09;暂不进行选题分析&#xff0c;不太建议大多数同学选择&#xff0c;对自己专业技能有很大自信的可以选择华为专项的题目。后续会…

MyBatis-config.xml核心配置

MyBatis-config.xml 包含了会深深影响MyBatis行为的设置和属性信息&#xff0c;配置文档的顶层结构如下 environments&#xff08;环境配置&#xff09; environments用于配置数据库的URL信息&#xff0c;MyBatis-config可以动态配置多个数据源&#xff0c;用于连生产、预发、…

用 HTML + JavaScript DIY 一个渐进式延迟法定退休年龄测算器

为减轻社会和个人因退休年龄变化带来的冲击&#xff0c;近日&#xff0c;全国人民代表大会常务委员会正式发布了关于实施渐进式延迟法定退休年龄的重要决定。 根据该决定&#xff0c;我国将同步启动对男、女职工法定退休年龄的延迟计划。这一调整将采取渐进式的方式进行&#…

RabbitMQ 高级特性——发送方确认

文章目录 前言发送方确认confirm 确认模式return 退回模式 常见面试题 前言 前面我们学习了 RabbitMQ 中交换机、队列和消息的持久化&#xff0c;这样能够保证存储在 RabbitMQ Broker 中的交换机和队列中的消息实现持久化&#xff0c;就算 RabbitMQ 服务发生了重启或者是宕机&…

Nginx实用篇:实现负载均衡、限流与动静分离

Nginx实用篇&#xff1a;实现负载均衡、限流与动静分离 | 原创作者/编辑&#xff1a;凯哥Java | 分类&#xff1a;Nginx学习系列教程 Nginx 作为一款高性能的 HTTP 服务器及反向代理解决方案&#xff0c;在互联网架构中扮演着至关重要的角色。它…

Acwing DFS

DFS&#xff1a;深度优先搜索 DFS与BFS的对比 DFS使用栈来实现&#xff0c;BFS使用队列来实现 DFS所需要的空间是 O ( h ) O(h) O(h),而BFS需要的空间是 O ( 2 h ) O(2^h) O(2h),其中h是树的高度&#xff1b; DFS不具有最短路的特性&#xff0c;BFS有最短路的特性 DFS回溯…

102.SAPUI5 sap.ndc.BarcodeScannerButton调用摄像头时,localhost访问正常,使用IP访问失败

目录 原因 解决办法 1.修改谷歌浏览器的setting 2.在tomcat中配置https访问 参考 使用SAPUI5的sap.ndc.BarcodeScannerButton调用摄像头时&#xff0c;localhost访问正常&#xff0c;使用IP访问时&#xff0c;一直打不开摄像头&#xff0c;提示getUserMedia()问题。 原因…

2024 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|大数据驱动的地理综合问题|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; CS团队倾注了大量时间和心血&#xff0c;深入挖掘解…

elasticsearch同步mysql方案

文章目录 1、1. 使用数据库触发器2. 使用定时任务3. 监听MySQL二进制日志&#xff08;binlog&#xff09;4. 使用数据管道5. 使用第三方工具或服务6. 编写自定义脚本注意事项 2、1. 使用Logstash步骤&#xff1a;示例配置&#xff1a; 2. 使用Debezium步骤&#xff1a; 3. 自定…

828华为云征文 | 解锁企业级邮件服务,在华为云fFlexus x实例上部署Mailcow开源方案

前言 华为云Flexus X实例携手Mailcow开源邮件方案&#xff0c;为企业打造了一个既高效又安全的邮件服务解决方案。Flexus X实例的柔性算力与高性能&#xff0c;是这一方案的坚实基石。它提供CPU内存的灵活定义&#xff0c;以经济型价格实现旗舰级性能&#xff0c;确保邮件服务的…

云计算课程作业1

作业1 Xmanager连接 rhel连接 作业2 首先确认你的虚拟机设置的是NAT 1-3 然后打开这篇blog&#xff0c;并完成第一步和第二步 因为我们是NAT&#xff0c;所以不需要连接网桥&#xff0c;即跳过第三步&#xff0c;但是这里ping一下测试网络连接 2- 如果到这里你发现提示yum…

Stylized Smooth Clouds 卡通风格化云朵包

下载:​​Unity资源商店链接资源下载链接 效果图:

828华为云征文|Flexus X实例Docker+Jenkins+gitee实现CI/CD自动化部署-解放你的双手~

目录 前言 实验步骤 环境准备 安装Portainer 拉取镜像 更换镜像源 启动容器 安装jenkins 拉取镜像 获取管理员密码 新建流水线项目 Portainer配置 gitee配置WebHooks 构建 修改代码&#xff0c;自动部署 前言 &#x1f680; 828 B2B企业节特惠来袭&#xff0c;…

如何通过蜂巢(容器安全)管理内部部署数据安全产品与云数据安全产品?

本文将探讨内部部署和云数据安全产品之间的主要区别。在思考这个问题之前&#xff0c;首先了解内部部署和云数据安全产品之间的主要区别。 内部部署数据安全产品意味着管理控制台位于企业客户的内部部署&#xff0c;而德迅云安全则在云中托管云数据安全产品。德迅云安全供应商通…