
智能化井下仪器在线监测与控制系统
项目背景
- 背景:智能终端实验室(大三)
- 时间:2023.08~2024.05
- 合作企业:湖北三赫智能科技有限公司
塔里木油田在油气探测过程中面临钻头异常损坏问题,导致开采成本显著增加、作业周期不可控。传统人工监测方式存在响应滞后、数据分析粒度粗等问题,需智能化解决方案。
基于PyQt5的Windows终端开发
技术栈:PyQt5 + Bleak + Matplotlib + Websocket 等
开发难点与解决方案
-
多设备实时数据采集
- 难点:需要大量蓝牙传感器进行数据实时采集,数据传输速率高(每秒10个点),多设备响应时间不一致,影响算法效率及页面渲染效果。由于GIL全局解释器锁,多线程无法并行运行,而多进程资源消耗大。
- 解决方案:采用协程机制,将蓝牙采集模块独立为一个进程,每个传感器数据采集任务创建协程,通过事件循环调度,确保数据采集的高效性和实时性。
-
算法实时分析
- 难点:算法需处理大量数据点并实时报警,使用线程存在性能瓶颈,多进程间数据通信复杂且频繁。
- 解决方案:将算法模块用C语言编写,通过Cython编译为共享模块(.so文件),在Python中调用,显著提升运行效率。
-
内存泄露检查
- 难点:程序内存泄露排查困难,守护进程导致程序无法正常退出,难以定位问题。
-
解决方案:使用
memory_profiler
模块进行内存分析,结合Matplotlib可视化排查,发现蓝牙进程未有效关闭,持续采集数据导致内存泄露。通过优化进程管理解决问题。
-
TCP粘包问题
- 难点:与绞车的Socket通信中,因数据传输速率问题导致TCP粘包,macOS开发环境下未出现,打包后运行时出现问题。
- 解决方案:为TCP数据包添加包头、包尾及包长标识,解决粘包问题,并通过校验确保数据完整性。
基于Tornado与SpringBoot的后端开发
技术栈:Tornado + Redis + MySQL + HDFS + JeecgBoot 等
-
MySQL与Redis的一致性问题
- 难点:Redis作为缓存时,MySQL与Redis数据不一致,导致前端页面显示错误。
- 解决方案:对实时性要求高的数据采用主动更新策略,Redis更新时同步更新MySQL;对实时性要求低的数据采用过期缓存机制,确保数据一致性。
-
分布式数据存储
- 难点:Windows终端采集的大量数据文件、日志文件等存储和处理难度大。
- 解决方案:搭建HDFS分布式文件存储系统,结合MapReduce对大数据文件进行高效处理。
-
系统更新
- 难点:网络不稳定时,Windows终端更新易中断,影响用户体验。
- 解决方案:通过心跳机制判断网络状态,采用断点续传方式更新,提升用户体验。
项目成果
- 成功解决塔里木油田钻头异常损坏问题,降低开采成本,提高作业效率。
- 通过JeecgBoot框架搭建后台管理系统,提供数据可视化、数据管理、数据统计等功能。
- 构建分布式数据存储与处理系统,支持大规模数据文件的高效管理。
- 为企业提供内部通信的APP,便于对企业对一线开发情况的跟踪和沟通。