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

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

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

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能