TDEngine在煤矿综采管控平台中的应用

news2024/9/27 10:44:41

一、行业背景

智能综采管控平台,是将煤矿综采工作面传感器数据采集,通过可视化界面展示。实现综采工作面的透明化展示,并基于历史的传感器数据进行机器学习的训练,了解工作面周期来压,设备故障检测等数据应用。因此针对于综采工作面的数据采集具有很深刻的应用。

二、现状

综采工作面是井工煤矿采煤的最重要的系统,是煤矿主要关注的系统之一,同时也是井工煤矿最危险的区域。因此针对于综采工作面的可视化,已经相关的研究是十分重要的。下面我将介绍煤矿综采工作面的相关数据情况。

数据种类

煤矿综采工作面一般由以下几个部分组成:液压支架系统,采煤机,刮板机系统,运输机,转载机、破碎机、乳化泵、清水泵等一系列设备及其系统组成。其中:

  1. 液压支架系统主要用于支护整个工作面,我们需要采集其中的压力等一系列的传感器,其中压力数据可以用于研究周期来压等一系列研究
  2. 采煤机系统主要是用于割煤,我们同时要采集其中数据,针对于采煤机工况数据进行设备故障检测等功能。
  3. 其他系统类似,我就不一一赘述了。

数据量

  1. 根据实际矿山应用,综采工作面的传感器大概在12000~20000个,如果是大型煤矿其中传感器数量会更多。
  2. 按照我们现在的采集频率,我们一秒钟采集一次所有的数据,采集的内容包括:哥哥传感器的感知数据、设备的开关故障的信号、电流、电压等一系列数据。
  3. 按照上述的采集数据,我们平均一天会产生十亿条以上的原始数据。平均一天会产生原始数据50G以上。

在这里插入图片描述
上图为一天采集原始数据量截图。

数据应用

针对于数据应用有两个方面,一方面是用于管控平台的可视化展示,另一个是针对于数据进行挖掘,将数据应用于算法模型训练。

三、技术选型

针对于这个规模大数据的存储,我们针对于技术进行了选型

MySQL

MySQL作为一个十分常用的关系型数据库,其核心采用平衡树进行数据的存储,当数据量大于2000万条时,二叉树会分裂,索引会增加一层。因此当MySQL数据量大于2000万条后,其查询效率是急剧下滑的。为了应对这个情况,我们也做了一些优化措施,类似于分库分表、以及保留变化值等方式。其效果永远都不理想,因此我们放弃了MySQL的方案。

Hadoop方案

Hadoop作为一个大规模数据存储方案,常应用于大数据等解决方案,其中对于大规模数据的存储的优势十分明显。虽然Hadoop可以存储这个数据,但是其中MapReduce的查询速度还是太慢。虽然我们通过替换MapReduce的处理引擎为Spark显著提高了数据查询的效率,但是Hadoop集群的部署成本以及维护成本十分的高。我们因此放弃了Hadoop的方案

TDengine

最后我们调研了时序数据库TDengine,其中的技术优势十分适合我们

  1. TDengine的维护成本远远小于hadoop,并且还可以存储大量的数据
  2. TDengine的文档齐全,技术学习成本比较小
  3. TDengine的超级表可以实现我们不同类型的设备进行建模,通过设备子表来分别存储设备的数据
  4. TDengine采用了高性能的数据压缩格式,在不影响查询效率的情况实现了数据压缩的功能,从而减少了数据存储的成本。
  5. TDengine具有高性能的查询能力,其中毫秒级的查询速度满足管控平台的应用。

四、技术方案

数据架构

下面我将介绍系统的整体架构设计,我将分为四个部分介绍整体数据架构设计:1.设备层;2.协议层;3.数据库;4.数据应用
在这里插入图片描述

上图为整体的数据架构图,其中:

  1. 设备端:综采系统各个应用子系统,该层为数据的产生端
  2. 协议层:协议层为工业协议层,该协议层将设备端的数据进行转化和收集
  3. 数据库:该层主要存储设备端产生的数据,其中消息中间件为数据暂存
  4. 数据应用层:该层为设备端的数据应用,例如提供给管控平台使用等。

数据采集、清洗治理流程图

说完了数据的整体架构,下面我将介绍数据采集、数据清洗治理的整体的流程,我们使用的数据平台采用的lambda架构,通过历史库的数据来校准实时库数据。
在这里插入图片描述
上图为数据整体流程图,我将详细介绍各个流程中的作用

  1. 设备端产生数据,我们撰写数据采集软件,通过工业协议进行相关数据的采集
  2. 采集软件将采集的数据的数据进行处理后,发送到消息中间的同时,并将数据输出到文件中
  3. 通过Spark Streaming程序处理消息中间件的数据,一部分存储到TDEngine中,另一部分发送到Redis中。其中发送到TDEngine中的数据为实时库,该实时库主要为管控平台使用。Redis数据库通过唯一key,只保留最新的一条传感器数据,应用于大屏监控。
  4. 采集软件采集的数据文件,经过加工处理后存储到TDEngine中,该TDEngine为历史库,其主要作用是校准实时库和为算法模型训练使用。

消息中间件数据和主题设计以及数据处理方式

为了更好的进行数据数据拆分,因此我们针对于消息中间的主题进行划分,进而实现综采工作面的子系统数据的划分,具体划分规则如下:

  1. 按照设备类别创建数据主题,同一类型的数据发送到同一的消息中间件主题中
  2. 发送到消息中间件的数据字段中包含有设备编号,通过区别设备编号与消息中间件topic名称拼接,通过查询设备编号和设备子表的映射关系,实现数据的分发。该流程为Spark Streaming程序,经过该流程可以实现无效数据的过滤。
  3. 针对于Redis中的设备数据的key设计规则为:设备类别+编号+传感器标签,中间使用分隔符”|“进行拼接的方式建立唯一索引。
  4. 针对于采集软件备份的数据,我们通过定时任务(T+1)进行Spark数据处理任务的调度,通过批处理的方式来校准历史数据。

TDEngine中的数据库设计以及数据建模

为了更好的管理和查询数据,我们需要针对于传感器数据进行建模。由于TDEngine存在有超级表和子表的概念,因此我们针对于该基础下,建立了以下的数据模型。下面,我将用液压支架系统演示数据建模的。

-- 创建超级表
CREATE STABLE YYZJ (
    ts timestamp, 
    QZ_Pressure float,
    HZ_Pressure float,
    Valve01_status int, 
    Valve01_Failed int,
    ...
) TAGS (
    bracket_id int
);

-- 创建子表
CREATE TABLE YYZJ0001
USING YYZJ (
    bracket_id
) TAGS (
    1
);

其中,bracket_id用于表示设备编号。由于矿井下会存在多个液压支架,其中部署的传感器数量和数据类型一致,因此通过超级表设置液压支架数据的模型。

为了更加容易索引指定的设备,为此设计了一下的子表的名称的规则:

  1. 子表的名称采用设备类型+编号构成
  2. 其中前面四个字母设计为表示设备类型
  3. 后面的四位数据表示设备的编号

索引加速

为了更加容易的索引到指定的数据,因此我们基于MySQL建立了二级索引,其中具体的实施方式为:

  1. 通过抽离各个超级表的原始字段,建立超级表名称和字段类型的映射关系,这样可以根据超级表知道设备传感器类型信息。
  2. 通过抽离子表以及子表的编号与超级表的映射关系,这样可以通过超级表知道设备表的映射关系。
  3. 抽离设备子表与设备id的映射关系,可以通过设备id查询到设备子表。

五、展望

TDEngine 是一个十分优秀的时序数据库,我们暂时使用在综采系统的管控。希望后续随着业务的扩大,我们能更好的应用于智慧矿山的感知层数据存储。

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

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

相关文章

AIGC引领数智未来:企业架构演进的深度解析与实践路径,The Open Group 2024生态系统架构·可持续发展年度大会专题报道

随着人工智能技术的迅猛发展,特别是以ChatGPT、Sora等为代表的AIGC(人工智能生成内容)技术的爆发,我们正处于通用人工智能(AGI)时代的前夜。AIGC技术在多个领域展现出近乎甚至超越人类的能力,已…

【LeetCode】动态规划—最小路径和(附完整Python/C++代码)

动态规划—64. 最小路径和 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:3.1. 初始化:3.2. 边界条件:3.3. 填充 dp 数组:3.4. 返回结果: 4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 给定一个包含…

liunx系统虚拟机

https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 下载地址 DVD版本 安装vm软件12通过vm软件来创建一个虚拟机空间通过vm软件在创建好的虚拟机空间上,安装我们的centos操作系统使用centos你得需要将鼠标点击进入界面中,但是鼠标会消失&#xf…

杨辉三角-C语言

1.问题&#xff1a; 输出杨辉三角。 2.解答&#xff1a; 对有特点的数&#xff08;每行开头和结束的数都是1&#xff09;进行赋值&#xff0c;给中间的数进行赋值&#xff0c;把上面赋值后的二维数组&#xff0c;遍历输出。 3.代码&#xff1a; #include<stdio.h>//头…

基于SSM商铺租赁系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

使用session来实现验证码发送功能

一、什么是session&#xff1f; Session由服务器创建&#xff0c;并为每一次会话分配一个Session对象。同一个浏览器发起的多次请求&#xff0c;同属于一次会话&#xff08;Session&#xff09;。首次使用到Session时&#xff0c;服务器会自动创建Session&#xff0c;并创建Co…

大觅网之自动化部署(Automated Deployment of Da Mi Network)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革

除了调用别人的api接口使用transformer技术&#xff0c;你是否想过将大模型在浏览器中运行呢&#xff1f;尤其是WebGPU的出现&#xff0c;性能比WebGL高不少&#xff0c;很多小任务真的不再需要在一个中心运行了。 不少同学买课学python了&#xff0c;但我还是在坚持用js尝试&a…

【Linux实践】实验九:Shell流程控制语句

【Linux实践】实验九&#xff1a;Shell流程控制语句 实验目的实验内容实验步骤及结果1. 变量的定义和使用2. 条件3. 运算4. if 语句5. case 语句6. for 语句7. while 语句8. until 语句9. 遍历复制10. 计算平方 实验目的 1、掌握条件判断语句&#xff0c;如if语句、case语句。…

tomcat的安装,管理与配置

目录 Tomcat 服务部署 1.关闭防火墙&#xff0c;将安装 Tomcat 所需软件包上传到虚拟机 2.安装JDK 3.设置JDK环境变量 4.安装启动Tomcat 5.启动tomcat 6.优化tomcat启动速度 Tomcat 服务管理 systemd 管理控制 supervisor 管理控制 Tomcat 虚拟主机配置 1.创建 sun…

EE trade:黄金 999 和黄金 9999 的区别

黄金&#xff0c; 作为一种珍贵的金属&#xff0c; 一直是人们投资和收藏的对象。 在购买黄金时&#xff0c; 您可能会遇到两种纯度的黄金 —— 黄金 999 和黄金 9999。 这两种黄金有什么区别? 消费者应该如何选择呢? 一、 黄金 999 和黄金 9999 的区别 含金量&#xff1a;…

OCR 行驶证识别 离线识别

目录 正页识别 副页识别 全部识别 OCR 行驶证识别 离线识别 正页识别 副页识别 全部识别

C语言实现归并排序(Merge Sort)

目录 一、递归实现归并排序 1. 归并排序的基本步骤 2.动图演示 3.基本思路 4.代码 二、非递归实现 1.部分代码 2.代码分析 修正后代码&#xff1a; 归并过程打印 性能分析 复杂度分析 归并排序是一种高效的排序算法&#xff0c;采用分治法&#xff08;Divide and Con…

中电金信:“源启”金融级数字底座

01方案简介 金融级数字底座是中电金信依托中国电子自主安全计算产业链&#xff0c;采用新一代技术架构&#xff0c;为金融及重点行业打造的数字化新型基础设施。 “源启”面向金融等重点行业场景&#xff0c;依照系统工程方法论&#xff0c;进行全栈技术产品的验证、适配和调…

word2vector训练数据集整理(代码实现)

import math import os import random import torch import dltools from matplotlib import pyplot as plt #读取数据集 def read_ptb():"""将PTB数据集加载到文本行的列表中"""with open(./ptb/ptb.train.txt) as f:raw_text f.read()return…

【深度学习基础模型】双向循环神经网络(Bidirectional Recurrent Neural Networks, BiRNN)详细理解并附实现代码。

【深度学习基础模型】双向循环神经网络&#xff08;Bidirectional Recurrent Neural Networks, BiRNN&#xff09; 【深度学习基础模型】双向循环神经网络&#xff08;Bidirectional Recurrent Neural Networks, BiRNN&#xff09;详细理解并附实现代码。 文章目录 【深度学习…

使用 Llama 3.1 和 Qdrant 构建多语言医疗保健聊天机器人的步骤

长话短说&#xff1a; 准备好深入研究&#xff1a; 矢量存储的复杂性以及如何利用 Qdrant 进行高效数据摄取。掌握 Qdrant 中的集合管理以获得最佳性能。释放上下文感知响应的相似性搜索的潜力。精心设计复杂的 LangChain 工作流程以增强聊天机器人的功能。将革命性的 Llama …

虚幻蓝图Ai随机点移动

主要函数: AI MoveTo 想要AI移动必须要有 导航网格体边界体积 (Nav Mesh Bounds Volume) , 放到地上放大 , 然后按P键 , 可以查看范围 然后创建一个character类 这样连上 AI就会随机运动了 为了AI移动更自然 , 取消使用控制器旋转Yaw 取消角色移动组件 的 使用控制器所需的…

风扇模块(直流5V STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main.c文件 fan.h文件 fan.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 直流风扇(Fan)&#xff0c;具有高转速、大风量、低噪音、低能耗和低震动的特点&#xff0c;有DC5V和12V两种型号可供…

【HarmonyOS】Web组件同步与异步数据获取

Web组件交互同步与异步获取数据的方式示例 【html测试文件】src/main/resources/rawfile/Page04.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><script>let isEnvSupported CSS in window &&…