目 录
1. 概述... 2
2. 应用场景... 2
3. 设计实现... 2
1.1 自定义时钟... 3
1.2 服务驱动时钟窗口事件... 4
1.3 实时计算... 4
4. 应用效果... 5
1. 概述
iNeuOS工业互联网操作系统集成了实时窗口聚合计算和实时数据变化率计算,这是能源行业的用户在使用的过程中提出来的需求,我们对需求、框架和实现技术进行综合评审后,最终实现了这个需求。考虑到其他计算的方式,具有很好的扩展性。
能够实现的路径有很多,例如比较流行的flink、spark等框架,但是这些框架比较重,另外实现产品化应用需求有一定的技术积累和深度。我们的技术实现与iNeuOS平台的业务结合更紧密。
2. 应用场景
一般系统使用上下限来对数据进行判断,但是上下限无法准确判断数据的变化趋势。当前数据点的值与过去一般窗口时间范围的均值进行变化率计算,并且对变化率进行预警判断,就算当前数据点值在上下限范围,但是出现数据变化抖动的情况也能准确监测到。例如能源行业,用电、用水、设备振动等参数进行变化率的监测,能够准确掌握数据的细节变化。
当然,数据变化监测还有其他方式,例如复合条件逻辑推理、机器学习的数据空间判断等手段。
3. 设计实现
设计实现包括三部分:自定义时钟、驱动时钟窗口事件和实时计算。代码部分省略。
1.1 自定义时钟
一般使用时钟都是周期性事件触发,这种周期性的开始和结束取决于时钟第一次启动的时间点。
而窗口聚合计算在周期时间间隔的基础上,还要确定事件触发的时间点,例如小时窗口的均值计算,00点、01点、…、23点分别要触发时钟事件。窗口示意如下图:
CustomTimer类的Interval属性代表时钟的间隔时间和能够被整除的时间点触发,CustomTimerManager类可以增加多个不同间隔时间的时钟,并且进行管理和资源的销毁。
自定义TimerEventHandler委托事件,传递TimerEventArgs自定义类作为参数,其中包括:Interval间隔时间和EventTime当前时钟触发的时间。
代码类结构,如下图:
1.2 服务驱动时钟窗口事件
在服务实例中集成CustomTimer自定义时钟,并且在自定义事件触发委托函数中对当前设备驱动和数据点进行CPU的并行操作,提高执行过程的效率。
代码类结构,如下图:
1.3 实时计算
在设备驱动完成两个线程的操作:(1)接收时钟委托事件的触发,计算小时均值,使用AvgCalculate类完成;(2)实时数据流计算当前数据点值的变化率,使用PreCalculate类完成。这两个线程即相互独立、但是在计算过程中又有交互,涉及到线程之间数据的原子操作。
当然,在设备驱动中计算过程中还涉及到其他的业务问题,例如计算的结果自动生成新的数据点以及与其他数据点的关系等。
代码类结构,如下图:
4. 应用效果
实际应用过程中只需要配置数据点:是否小时均值计算、是否实时变化率真计算和预警正负偏差等,会在当前设备驱动自动生成均值数据点和变化率数据点,在业务模型、资产模型、组态建模等工具中应用这些数据。如下图:
数据查询,如下图:
物联网&大数据技术 QQ群:54256083
物联网&大数据合作 QQ群:727664080
网站:http://www.ineuos.net
联系QQ:504547114
合作微信:wxzz0151
官方博客:https://www.cnblogs.com/lsjwq
iNeuOS工业互联网操作系统 公众号