# DolphinDB 历史数据回放功能应用:物联网设备故障分析 工业物联网场景中,故障分析是一个关键环节。设备发生故障时,需快速定位原因。实时采集的流式数据和操作日志记录了设备当前的运行状态,如何根据这些数据快速定位故障发生原因是一个值得研究的问题。DolphinDB 历史数据回放框架为故障分析提供了一套有效的解决方案,通过 DolphinDB 历史数据回放框架,能够复现故障发生时刻场景,从而帮助工程师们更好地进行设备故障分析。 - [DolphinDB 历史数据回放功能应用:物联网设备故障分析](#dolphindb-历史数据回放功能应用物联网设备故障分析) - [1. 背景](#1-背景) - [2. DolphinDB数据回放功能介绍](#2-dolphindb数据回放功能介绍) - [2.1 回放功能相关函数](#21-回放功能相关函数) - [2.2 1 对 1 单表回放](#22-1-对-1-单表回放) - [2.3 N 对 N 多表回放](#23-n-对-n-多表回放) - [2.4 N 对 1 异构回放](#24-n-对-1-异构回放) - [3. 数据回放应用:数控机床异常诊断](#3-数据回放应用数控机床异常诊断) - [3.1 场景](#31-场景) - [3.2 数据说明](#32-数据说明) - [3.3 总体方案](#33-总体方案) - [3.4 故障诊断分析](#34-故障诊断分析) - [3.4.1 接口说明](#341-接口说明) - [3.4.2 诊断与分析](#342-诊断与分析) - [4. 总结](#4-总结) - [5. 附录](#5-附录) - [5.1 数据仿真脚本](#51-数据仿真脚本) - [5.2 数据回放框架接口 replayIoT](#52-数据回放框架接口-replayiot) ## 1. 背景 近年来,随着物联设备、新技术和新应用不断发展,积累了海量的联网监测数据和离线采集的文件数据,这些数据是物联行业,特别是故障分析领域珍贵的数据资产。故障分析需要基于这些数据按照特定的顺序进行回放处理,通过回溯历史数据,模拟真实场景,实现故障分析、数据挖掘等功能。由于物联数据回放涉及的数据量巨大,数据回放不能简单地从数据库中查询存储结果数据并进行回放处理,因此需要构建一种高效的流式回放处理能力的数据回放平台。 如何高效地存储海量历史数据、如何快速地从海量历史数据中精确查找目标数据、如何将数据严格地按照时间先后顺序进行回放、如何流式呈现海量的目标历史数据,是构建一个历史数据回放平台必须要考虑的问题。 DolphinDB 历史数据回放框架由分布式存储引擎、数据回放工具、流计算框架三大组件构成,通过历史数据回放框架,可以搭建一个轻量式数据回放平台,助力设备故障诊断与分析。 ![图1 DolphinDB 历史数据回放框架](images/faultAnalysis/1-1.png) ## 2. DolphinDB数据回放功能介绍 ### 2.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]) ``` `ionSchema])` - sqlObj:SQL 查询元代码,表示回放的数据,如\