TDengine 在水电厂畸变波形分析及故障预判系统中的应用

2024-03-17 22:58

本文主要是介绍TDengine 在水电厂畸变波形分析及故障预判系统中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:深圳双合电机监测和故障预测产品研发团队

小 T 导读:深圳双合电气股份有限公司成立于 1993 年,是国家级高新技术企业和广东省专精特新企业。公司致力于电力及工企业系统应用解决方案及相关智能监测设备的研究、开发、生产与实施,拥有面向电力系统、发电、石化、冶金、钢铁等行业的故障诊断及预警系统系列解决方案。

https://github.com/taosdata/TDengine

 

一、项目背景

水电厂对重要主机设备已配备基于生产运行控制的计算机监控系统和机组稳定性监测分析系统,主要从振动、气隙等状态量对主机设备的运行状态进行监测和评估;同时水电厂对水轮发电机组装设了故障录波器,用于记录机组异常和故障时的波形及动作情况,但这些监测手段仅从部分角度对机组状态进行评估,未能从多维综合的角度评估机组的安全运行情况。此外,对故障录波器记录的大量机组的电气及保护开关动作信息,未能挖掘数据的深入价值。

基于现有系统的不足,用户提出了本项目建设需求,并基于深圳双合丰富的系统方案解决能力,将本项目交给我司建设。

二、主要挑战

本项目中,用户提出的最基本,也最核心的需求是将全厂的电力系统各元件纳入系统的监测,并存储高采样率的原始信号数据。有了原始数据,就可以进行各种高级应用分析。

在这个需求中,信号采样率是 10K,即每秒钟产生 1 万个浮点数据。全厂电力系统元件,初步估算有 500 个信号通道。这样 1 天即可产生 1.7T 字节数据量(10000 * 4 byte * 500 * 24 * 60 * 60)。

巨量的数据,给我们造成两个难题:一是从监测装置到系统服务器的数据传输问题;另一个就是数据存储问题。

第一个难题,基于深圳双合丰富的设备研发能力,直接通过硬件发送链路数据很快就解决了。

第二个难题,解决方案就两个:选择数据库存储或文件存储。对于数据库存储方案,如此巨量的数据,根据经验可以知道,常见的主流数据库很难支撑。而文件存储是电力系统这种类型数据通常的存储方案,于是我们将此方案报给了用户,不过他们并没有选择。一方面是连续、巨量的原始采样数据存储成文件,确实会对后续的数据应用产生诸多不便;一方面是希望系统有一定的创新性。

三、数据库选型和验证

用户反对文件存储方案,逼我们又回到数据库存储方案上。我们就把目光转向了新兴的数据库。

经过反复对比,涛思数据开发的 TDengine 时序数据库优异的性能指标吸引了我们。我们对数据库有三个最关心的核心性能指标(写入能力、查询效率、存储能力)。在正式引入 TDengine 之前,我们对这三个指标进行了测试验证。

我们建了 10 个数据表,每个表 50 个数据列,数据库采用单机模式。然后编写模拟程序每张表每秒产生 1 万行记录插入到这 10 张表中,并通过 SQL 语句

select count(*) from tablename where ts>now -1s

来验证当前(1 秒以内)产生的数据是否及时被写入了数据库。

如果数据来不及写入数据库,数据就会慢慢堆积起来。这样最新的数据也就无法在数据库中查到。为了检查是否存在堆积现象,我们也测试了程序运行多天之后执行该 SQL,结果是当前最新 1 秒内的数据也能在数据库里查到,这说明堆积的数据不超过 1 秒。也就表明,数据库及时写入了数据,没有任何延迟。

后来我们又将产生的数据量翻倍,测试结果一样,说明 TDengine 数据库的写入能力非常强悍。

而查询效率的验证则相对简单。我们在已经有了几十亿条记录的表中随意查询几十万条记录,查询时间均没超过 1 秒,说明 TDengine 数据库查询效率也极其强悍。

再就是对数据库存储能力的验证。根据推算,我们 1 天产生 1.7T 的数据。而我们用 du –sh * 命令去查看 TDengine 数据库的数据目录,24 小时之后再去查看,发现数据增量约是 1.7T 的 30%左右。这说明 TDengine 的压缩能力也是比较优异的。

基于上述三个性能指标的优异表现,我们很快决定将 TDengine 数据库正式引入项目。

四、TDengine 使用体验

正式使用 TDengine 数据库后,我们发现 TDengine 的 C++和 Java 接口都简单清晰,SQL 语法与标准 SQL 基本一样,学习成本几乎为 0,使用 TDengine 数据库没有给项目带来额外的工作量和难度。

最终,TDengine 数据库在该项目中顺利投入使用,在现场运行环境的表现,如同我们的验证测试一样,拥有优异的写入能力和快速的查询能力,可以有力地支撑系统对原始信号数据进行进一步的分析与应用。

在该项目中,我们只把高采样的连续采样数据存入 TDengine 数据库中,其它离散型时序数据没有存到 TDengine 数据库,还是放在 MySQL 这样的传统数据库中。这种离散型的时序数据,虽然它的时间间隔很大(比如 3 分钟才产生一个数据),但是由于工业领域数据的特殊性,使得传统的行式数据库特别不适应工业数据,数据库模型特别难设计。

比如工业生产系统中,有的设备产生电压、频率数据;有的产生电流、功率数据;有的产生压力、温度数据。这些数据类型各占一列放在同一张表中,必定造成每一行都有大量的空列,对数据库的性能影响很大。

另一个方案就是各个数据独立占一行,我们实际系统中就是这么设计的,每一行只有两个有效核心列:时间、值。这种设计会造成大量重复的时间数据,数据行数成百、成千倍的增加,同样对数据库的性能影响也很大,它唯一给系统带来的好处是扩展灵活。

因此,传统行式数据库在工业领域是很难设计出完美方案的。

而像 TDengine 数据库这样的列式数据库则可以完美解决工业领域里面的这些问题。我们可以使用宽表把所有的数据放入同一个表中,由于是列式数据库,行中的空列对数据库性能没有丝毫影响。也可以把不同的分类数据放在同一个模型中(但实际表可能有多个),然后用 BigTable 技术将多个表的数据汇聚到一个大表中,提升查询效率。

五、未来规划

TDengine 数据库是为时序数据而生的,因此,未来我们的系统,离散的时序数据也将逐步放入 TDengine 数据库。我们准备利用 TDengine 的技术特性,重新设计数据库模型,使这部分数据的写入和查询效率产生翻天覆地的变化。


点击查看活动详情,iPhone 13 Pro 等你带回家!

 

这篇关于TDengine 在水电厂畸变波形分析及故障预判系统中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820448

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹