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

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

工业物联网场景中,故障分析是一个关键环节。设备发生故障时,需快速定位原因。实时采集的流式数据和操作日志记录了设备当前的运行状态,如何根据这些数据快速定位故障发生原因是一个值得研究的问题。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

相关文章

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

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

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

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2