工业设备故障诊断解决方案 | 流数据实时采集、存储与回放

本文主要是介绍工业设备故障诊断解决方案 | 流数据实时采集、存储与回放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工业物联网场景中,故障分析是一个关键环节。设备发生故障时,需快速定位原因。实时采集的流式数据和操作日志记录了设备当前的运行状态,如何根据这些数据快速定位故障发生原因是一个值得研究的问题。DolphinDB 历史数据回放框架为故障分析提供了一套有效的解决方案,通过这一框架,能够复现故障发生时刻场景,从而帮助工程师们更好地进行设备故障分析。

近年来,随着物联设备、新技术和新应用不断发展,积累了海量的联网监测数据和离线采集的文件数据,这些数据是物联网行业,特别是故障分析领域珍贵的数据资产。故障分析需要基于这些数据按照特定的顺序进行回放处理,通过回溯历史数据,模拟真实场景,实现故障分析、数据挖掘等功能。由于物联数据回放涉及的数据量巨大,数据回放不能简单地从数据库中查询存储结果数据并进行回放处理,因此需要构建一种高效的流式回放处理能力的数据回放平台。

高效地存储海量历史数据、快速地从海量历史数据中精确查找目标数据、将数据严格地按照时间先后顺序进行回放、并以流式呈现海量的目标历史数据,是构建一个历史数据回放平台要考虑的关键问题。

DolphinDB 历史数据回放框架由分布式存储引擎、数据回放工具、流计算框架三大组件构成,基于这一数据回放框架,可以搭建一个轻量式数据回放平台,助力设备故障诊断与分析。

图1 DolphinDB 历史数据回放框架

1. DolphinDB 数据回放功能介绍

1.1 回放功能相关函数

DolphinDB 历史数据回放功能通过 replay 函数实现。replay 函数按时间顺序将一个或多个数据表或数据源列表回放到数据表,以模拟实时数据写入。根据 replayRate 参数和 absoluteRate 参数的不同取值,支持指定每秒记录数、指定时间跨度回放加速倍数、全速回放三种回放模式;根据输入表到输出表的映射关系,支持 1 对 1单表回放,N 对 N 多表回放和 N 对 1 异构回放三种回放形式。

replay(inputTables, outputTables, [dateColumn], [timeColumn], [replayRate], [absoluteRate=true], [parallelLevel=1])
  • inputTables:指定数据的回放形式。inputTables 为一个表对象时,为1 对 1 回放;inputTables是多个表对象时,为N对N回放;inputTables为一个字典时,为N对1回放。
  • outputTables:指定数据的回放形式。outputTables 为一个表对象时,为1 对 1 回放或N对1异构回放;outputTables是多个表对象时,为N对N回放。
  • replayRate:表示数据回放速度。若absoluteRate为true,replayRate表示每秒回放的数据条数;若absoluteRate为false,依照数据中的时间戳加速replayRate倍回放;若replayRate未指定或为负,以最大速度回放。
  • absoluteRate:为true时表示replayRate为每秒回放的记录数;为false时表示依照数据中的时间戳加速replayRate倍回放。

replayDS 根据时间维度将源数据划分为若干个小的数据源,实现对数据源的进一步切分。

replayDS(sqlObj, [dateColumn], [timeColumn],[timeRepartitionSchema])
  • sqlObj:SQL查询元代码,表示回放的数据,如<select * from loadTable("dfs://source", "source")>。SQL查询的表对象是DFS表,且至少有一个分区列为DATE类型。
  • dateColumn:日期列。若不指定,默认第一列为日期列。replayDS函数默认日期列是数据源的一个分区列,并根据分区信息将原始SQL查询拆分为多个查询。

关于 replayreplayDS 函数的详细介绍可参考 replay用户手册、replayDS用户手册。

1.2 1 对 1 单表回放

1 对 1 单表回放适用于所有数据存放在一张表中的场景。当数据量较小时,可以将需要回放的数据读取到一张内存表中,然后将内存表作为数据源进行回放。

当数据量较大时,可使用replayDS函数将输入表划分为多个较小的数据源,再使用replay函数从数据源中读取数据并回放到流数据表中。

1 对 1 单表回放并不能满足所有的回放要求。在实际应用中,故障诊断往往涉及到传感器数据和操作日志数据,在进行故障分析时,需要将两类同时回放,这时便有了多表回放的需求。

1.3 N 对 N 多表回放

N 对 N 多表回放是一种将多个输入表同步回放到多个对应目标表的模式。在 N 对 N 的模式中,不同表在同一秒内的两条数据写入目标表的顺序可能和数据中的时间先后顺序不一致。此外,若采用不同的线程对下游的 N个目标表进行订阅消费,也很难保证表与表之间的数据被处理的顺序关系。因此,N 对 N 回放不能保证整体上最严格的时序。

故障分析领域中不同类型的数据产生是有先后顺序的,比如传感器数据和操作日志,所以在对多个数据源回放时要求每条数据都严格按照时间顺序注入目标表,为此我们需要解决以下问题:

  • 不同结构的数据如何统一进行排序和注入以保证整体的顺序?
  • 如何保证对多表回放结果的实时消费也是严格按照时序进行的?

1.4 N 对 1 异构回放

针对上述 N 对 N 多表回放存在的问题,DolphinDB 进一步增加了 N 对 1 异构回放,支持将多个不同表结构的数据表写入同一张异构流数据表中,从而实现了严格按时间顺序的多表回放。

与 N 对 N 多表回放不同,N 对 1 异构回放将多个具有不同表结构的数据源回放到同一个输出表中,其中输出表为一张异构流数据表,至少包含三列:数据时间列、数据标识列和序列化后的数据。此外,N 对 1 异构回放对多个数据源进行全局排序,因此所得的输出表是严格的时间顺序。

若要对异构流数据表进行数据处理操作,如指标计算等,则需要将二进制格式的消息内容反序列化为原始结构的一行记录。DolphinDB 在脚本语言以及在 API 中均支持了对异构流数据表的解析功能。脚本支持流数据分发引擎 streamFilter 对异构流数据表进行反序列化以及反序列后结果的数据处理;同时,各类 API 在支持流数据订阅功能的基础上,扩展支持了在订阅时对异构流数据表进行反序列化。

2. 数据回放应用:数控机床异常诊断

在现代化的制造业环境中,数控机床以其精准、高效和自动化的特性,显著提升了生产效率和产品质量,扮演着核心角色。

当数控机床运行时,其内置的传感器会持续采集各种设备状态数据。这些数据包括机床运行速度、主轴转速、刀具磨损状况、冷却液温度和压力、电机负载以及系统电力消耗等关键参数。这些实时数据会存储到数据库中,作为技术人员深入的分析的参考依据。

一旦数控机床发生故障,如刀具破损、电机过热或系统错误等,设备会立即触发警报,并将相应的数据记录到故障信息表中。故障信息表会详细记录故障发生的时间、故障类型等关键信息,为后续的故障诊断和维修工作提供重要的线索。

为了确保操作的合规性和可追溯性,每当操作员在数控机床上进行操作,如程序更改、刀具更换或生产参数调整等,系统会自动记录相关的操作信息到操作日志表中。这类日志详细记录了操作的时间、操作内容等详细情况,便于在出现问题时进行快速的责任追溯和问题排查。

通过这些详细的设备状态、异常状态信息和操作日志,工厂的技术人员和管理人员可以全面、准确地了解数控机床的运行状态和工作效率,及时发现并解决问题,从而确保生产的稳定性和效率。同时,这些数据也为设备的维护、升级和优化提供了重要的数据支持。

2.1 数据说明

数控机床传感器每秒采集温度、振幅、液压等关键信息,表结构如下表所示:

字段名称数据类型字段描述
timeTIMESTAMP采集时间戳
deviceIdSYMBOL机床编号
tempDOUBLE温度
ampDOUBLE振幅
hydraDOUBLE液压

操作日志表记录了操作员对机床的操作内容,表结构如下表所示:

字段名称数据类型字段描述
timeTIMESTAMP操作发生时间
deviceIdSYMBOL机床编号
operatorIdSYMBOL员工编号
actionTypeSYMBOL操作类型

故障信息表记录异常发生的开始时间、持续时长等信息,表结构如下表所示:

字段名称数据类型字段描述
timeTIMESTAMP异常开始时间
deviceIdSYMBOL机床编号
persistTimeFLOAT异常持续时间

操作员的不当操作可能会引发机床故障,当故障发生后,分析人员需要第一时间了解故障是由哪些操作导致的,以便于后续的故障诊断和分析;同时,机床的温度、液压等指标也与操作类型相关,分析操作类型与机床状态指标的相关性也是故障诊断和分析中的重要一环。

本文所使用的数据仿真脚本详见附录4.1。

2.2 总体解决方案

针对机床故障异常诊断分析,DolphinDB 解决方案如下:

故障发生后,将故障信息表和操作日志表中的数据异构回放到流数据表中,通过 createAsofJoinEngine 流计算引擎,将故障信息和操作日志进行实时关联,了解故障是由哪些操作引起的;并实时地回放传感器采集的机床状态数据,以便分析机床各项指标与操作类型的关系。

2.3 故障诊断分析

(1)接口说明

为了便于机床故障诊断分析,本文将 DolphinDB 数据回放框架封装成了 replayIoT 函数,见附录4.2。用户通过 json 配置便能实现倍数回放、多表回放等复杂功能。对于单表回放,函数使用说明如下:

{     "dbName":目标库,必选,       "tbName":目标表,必选,     "deviceColumn":设备名称列,必选,      "dateColumn":数据时间列,可选,     "deviceId":需要回放的设备,可选,     "selectColumn":需要回放的设备,可选     "timeBegin":回放开始时间,可选,     "timeEnd":回放结束时间,可选,     "replayRate":回放倍率,可选,     "sampleRate":采样频率,可选,     "jobName":回放任务名称,必选 }

多表回放数据接口使用说明如下:

 {     "leftTable":{左表参数         "dbName":目标库,必选,         "tbName":目标表,必选,         "deviceColumn":设备名称列,必选,         "dateColumn":数据时间列,可选,         "deviceId":需要回放的设备,可选,         "timeBegin":回放开始时间,可选,         "timeEnd":回放结束时间,可选     },     "rightTable":{右表参数         "dbName":目标库,必选,         "tbName":目标表,必选,         "deviceColumn":设备名称列,必选,         "dateColumn":数据时间列,可选,         "deviceId":需要回放的设备,可选,         "timeBegin":回放开始时间,可选,         "timeEnd":回放结束时间,可选     },     "matchColumn": 左表右表连接列,必选,     "replayRate":回放倍率,可选,     "sampleRate":采样频率,可选,     "jobName":回放任务名称,必选 }

回放的实时流式数据会注入到名为 jobName 的共享流表中,用户可以订阅该表进实时分析。

(2)诊断与分析

通过以下 json 配置,开始异常信息与操作日志的关联回放任务:

args1 = ' {     "leftTable":{         "dbName":"dfs://test_anomaly",         "tbName":"anomaly",         "dateColumn":"ts",         "deviceId":"device0001",         "deviceColumn":"deviceId",         "timeBegin":2024.01.01T00:00:00.000,         "timeEnd":2024.01.01T02:00:00.000     },     "rightTable":{         "dbName":"dfs://test_log",         "tbName":"log",         "dateColumn":"ts",         "deviceId":"device0001",         "deviceColumn":"deviceId",         "timeBegin":2024.01.01T00:00:00.000,         "timeEnd":2024.01.01T02:00:00.000     },     "matchColumn": ["deviceId"],     "jobName":"warnAndLogStream",     "replayRate":50 } ' replayIoT(args1)

回放结果如下表所示:

从上述结果可知,F1、F2、F3三种操作可能会导致机床发生故障,因此在实际生产中,操纵员需要谨慎进行F1、F2、F3这三种类型的操作。

通过以下 json 配置,开始机床各项指标数据的回放任务:

args2 = ' {     "dbName":"dfs://test_state",       "tbName":"state",     "deviceColumn":"deviceId",      "dateColumn":"ts",     "deviceId":["device0001"],     "timeBegin":2024.01.01T00:00:00.000,     "timeEnd":2024.01.01T02:00:00.000,     "replayRate":50,     "sampleRate":60s,     "jobName":"stateStream" } ' replayIoT(args2)

回放结果如下表所示:

借助 DolphinDB Dashboard 功能,可将上述回放的机床各项指标进行实时的可视化展示,可视化结果如下图所示:

从上图可知,机床正常运行时,温度、液压和振幅曲线是规律的三角函数曲线。当故障发生后,温度、液压和振幅会明显偏低或偏高。从结果上来看,进行F1操作时,机床温度、振幅低于平均水平,液压高于平均水平,导致机床发生故障;进行F2操作时,机床温度、振幅高于平均水平,导致机床发生故障;进行F3操作时,机床振幅、液压低于平均水平,导致机床发生故障。

3. 小结

本教程以数控机床故障诊断为例,详细介绍了如何利用 DolphinDB 的历史数据回放功能分析设备故障。DolphinDB 的历史数据回放功能在很多领域可以发挥其价值。例如,在无人机飞行状态监测中,回放功能可以帮助用户重现飞行状态,便于排查故障;在无线电检测中,通过回放大规模的监测数据,实现多维度瀑布图回放、占用度趋势分析及信号模拟等功能。DolphinDB 的历史数据回放功能可以为企业提供强大的数据分析能力,有助于提高故障排查效率和优化业务决策。

4. 附录

4.1数据仿真脚本

4.2 数据回放框架接口 replayIoT

4.3 数据回放框架的详细介绍,请移步:replay (dolphindb.cn)

4.4 分布式存储引擎的详细介绍,请移步:TSDB 存储引擎详解 (dolphindb.cn)

4.5 流计算框架的详细介绍,请移步:流数据功能应用 (dolphindb.cn)

这篇关于工业设备故障诊断解决方案 | 流数据实时采集、存储与回放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个