TDengine助力蓝深远望电机物联网监测预警与预测性维护

2022-05-24 00:00:00 查询 数据 业务 设备 电机
随着科技的发展与人民生活水平的提高,电机在工业生产和人民生活中应用越来越广泛,如工业机器、空调、电梯等。电机的维护成为影响生产效率和生产安全的一项重要事宜。而且在一些环境恶劣的场所,用户更偏向于远程维护。

为了满足这些需求,我们研发了电机物联网监测预警与预测性维护平台。该平台通过传感器、物联网关,采集各电机设备的运行数据以及频谱波形数据,结合大数据建模分析,能够及时发现潜在隐患,实现预测性维护。

一.

现状与痛点



电机物联网监测数据类型多、采集频率高,在项目总体设计的初期,我们打算采用传统关系型数据库进行存储。当设备数量较少时(低于100台),基于传统关系型数据库的计算函数、多表关联等处理方式,能够满足业务要求。但是考虑到未来接入的电机数量会越来越多(5000台以上),设备的测点也会越来越多,平台问题也就会越发严峻。具体可以归纳为如下两个方面。

  • 扩容实施难

采用传统的关系型数据库,局限于传统的库表设计模式,每新增一个电机设备接入,必须针对这个电机设备建立一张新的数据表,这个大大增加了接入设备时的工作量;同时,随着平台接入的电机设备越来越多,数据库表不断增加,传统数据库的管理和备份成本不断提高,无法做到水平扩容。

  • 业务开发难

伴随着业务的不断发展,大量的电机设备接入平台,各种聚合分析统计需求持续增加,由于传统关系型数据库的特点,导致各种跨库跨表的查询操作激增,业务数据耦合度增大,系统开发的难度也随之提升,同时对平台整个的响应速度和稳定性也会造成很大隐患。

二.

为什么选择TDengine



为了适应未来业务发展需求,避免上述难点与困境,我们决定选择一款时序数据库产品。在调研了多款产品之后,TDengine引起了我们的注意,它的如下几个特点非常适合我们的场景:

  • 高性能:数据读写速度非常高;
  • 集群化:可以集群化部署,支持多副本,支持水平扩展;
  • 安装便捷: 官网文档齐全,按照文档很容易就能完成安装部署;
  • 开源:开源,而且社区非常活跃,很多问题都可以在社区找到答案;
  • 使用简单:支持使用类SQL查询语言来插入或查询数据。

于是我们马上做了各种验证,结果表明,TDengine完全符合我们的业务需求。

引入TDengine之后,平台整体的数据架构如下图所示。


三.

TDengine存储模型设计



TDengine里有一个特殊的概念:超级表,每种数据采集类型对应一个超级表。超级表只负责存储这种类型的数据,同时数据存储采用横表存储。


我们将电机设备的测点幅值超级表设计成如下结构:

CREATE STABLE IF NOT EXISTS general_view_escalator (ts TIMESTAMP, elect_machine_one FLOAT, reducer_machine_one FLOAT, bottom_bolt_one FLOAT, elect_machine_two FLOAT, reducer_machine_two FLOAT, bottom_bolt_two FLOAT, left_main_drive FLOAT, right_main_drive FLOAT, left_step_chain FLOAT, right_step_chain FLOAT, up_main_drive_noise FLOAT, down_step_chain_work_noise FLOAT, left_step_chain_extend FLOAT, right_step_chain_extend FLOAT, left_handrail_temperature FLOAT, right_handrail_temperature FLOAT, env_temperature FLOAT, elect_machine_temperature FLOAT, reduction_gearbox_one_oil FLOAT, reduction_gearbox_two_oil FLOAT, rmd FLOAT) TAGS (line_id BINARY(20), site_id BINARY(20), elevator_code BINARY(20));

波形超级表设计如下架构:

CREATE STABLE IF NOT EXISTS waveform_view_escalator (ts TIMESTAMP, vals BINARY(16000), samplehz INT, len INT, ratio INT) TAGS (line_id BINARY(20), site_id BINARY(20), elevator_code BINARY(20), measuring_id BINARY(20));

TDengine还有另外一个概念:子表。每台电机设备的数据对应一张子表,它可以在插入数据时动态创建。这种操作模式可以省去创建子表的业务环节,大大降低了业务复杂度。

四.

用到的TDengine特性



1.

数据订阅(Publisher/Subscriber)

在我们的业务场景中有一类数据叫预警、报警事件告警数据,直接使用TDengine的数据订阅功能,可以优雅快速地实现这一功能。


2.

缓存(Cache)

在我们的业务场景中,需要显示每台电机设备的新测量数据(如幅值、频谱等),直接使用TDengine提供的缓存(Cache)功能,创建数据库时设置参数cachelast=1,将每张表的后一条记录缓存,应用程序可以通过last_row函数快速获取当前的实时数据,进行动态数据刷新显示。


3.

其它有用功能

比如采样查询、多表聚合查询、流式计算等,可以满足我们多种业务场景的需求。

时域波形采样查询

包络图采样查询

波形多表聚合查询

幅值流式计算


原来项目中有很多需要在程序中处理的计算工作,现在全部由TDengine承担,在分担程序的计算压力的同时,还可以实现聚合结果的持久化存储,支持历史数据快速查询。


五.

总结



TDengine作为一款新的产品,我们在使用过程中遇到了一些困难和挑战。不过在同事们的支持下,在涛思数据工程师们的热心支持下,我们还是相对顺利地完成了项目的上线。

目前平台的状态是,当前设备接入300台,每台设备19个测点,数据采集频率达到 1秒钟,存储的数据维度更精细了,能为平台的智能诊断、智能分析服务提供更准确的数据支持,同时各业务场景下的计算查询性能也非常,满足了项目的实际需求。


作者介绍:

李凯,蓝深远望大数据研发组负责人,2015年起从事大数据研发,2020起从事电机大数据平台运维研发。

来源 https://www.modb.pro/db/237798

相关文章