1. 映射表

1.1. 什么是映射

MixIOT 是⾯向⼯业物联⽹ “对象” 的,⽽且,在 MixIOT体系中,⼀个物联⽹对 象的 “数据”,跟这个物联⽹对象数据的 “采集” 是分开的。

正因为他们是分开的,所以,MixIOT体系中对数据采集⽅式是⾮常灵活的。⽐如,⼀个对象的数据采集,可以使⽤⼀个数据采集终端;⼀个复杂对象的数据采集,可以同时使⽤多个数据采集终端;同样,⼀个数据采集终端,也可以同时采集多个对象的数据。

我们先介绍⼏个名词:⼀个数据采集终端⼀次采集到的全部数据,不管这些数据是多少个对象的,我们都称为是⼀个“栅格(Grid)”。⼀个栅格就像⼀个棋盘,棋盘的每个格⼦⾥⾯,都是采集到的实际数据,⽐如,温度、压⼒、电流、电压、频率、流量,等等。我们把这些分别叫做栅格的 “键(Key)”。

假设,⼀个对象通过两个数据采集终端去采集数据,每个数据采集终端各⾃的栅格如下:

数据采集终端-1
Image - 数据采集终端-1
数据采集终端-2
Image - 数据采集终端-2

映射表(Mapping)的作⽤就是把它们拼接到⼀起,变成这个对象的⼀个完整的数据。它们称为这个对象的 “柔性变量(Flexible Variable,简称 FV)”

如果我们分别给两个数据采集终端取名为:$D-1$D-2,并且重新给这个对象定义变量的话,⽐如,⽤ X1, X2, …, X10 这个对象就有了⼀个完整的数据:

经过拼接后,对象的数据就完整了。我们把对象经过拼接后的数据叫做“⻢赛克(Mosaic)”。⻢ 赛克和栅格之间的对应关系可以表示为:

X1 = $D1:K1
X2 = $D1:K2
X3 = $D1:K3
X4 = $D1:K4
X5 = $D1:K5
X6 = $D1:K6
X7 = $D2:K1
X8 = $D2:K2
X9 = $D2:K3
X10 =$D2:K4

这个对应关系,我们就称为是从数据采集终端的栅格到对象⻢赛克的⼀个 “映射”。

物联⽹对象有了这些 FV 变量(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10)后,MixIOT在进⾏数据处理的时候,就可以只专⼼去管这些 “对象的FV”,⽽⽆需再去操⼼这些数据到底是⽤了⼏个数据采集终端,数据是怎么采集回来的,他们原来的样⼦是啥。

我们多说⼏句关于FV(对象柔性变量),你是不是已经发现了,经这个映射这么⼀整,对象是什么并不重要了,我们关⼼的是对象的FV,其实这些是变量,跟我们⾼等数学⾥⾯学的函数的变量是⼀样的,只不多⼀个对象是⼀个好⼏百个变量的多元函数。你是不是有种从⼯业设备的这个世界⼀下⼦穿越到了数学的世界的感觉?这就对了,这就是 MixIOT 的核⼼所在。

1.2. 什么是映射表

现在你已经知道映射是什么了。在 MixIOT 中是通过⼀个 “映射表”去建⽴映射关系。映射表的样⼦就像⼀个矩阵,很容易理解,也很容易写。写出来是这样的:

 [ X1, "温度", "Temperature", STA, $D-1, K1 ]
 [ X2, "压⼒","Pressure", STA, $D-1, K2 ]
 [ X3, "电流", "Ampere", STA, $D-1, K3 ]
 [ X4, "电压", "Pressure", STA, $D-1, K4 ]
 [ X5, "频率", "Frequency",STA, $D-1, K5 ]
 [ X6, "流量", "Flow", STA, $D-1, K6 ]
 [ X7, "转速","Speed", STA, $D-2, K1 ]
 [ X8, "阀⻔开关", "Valve Status", STA,$D-2, K2 ]
 [ X9, "震动", "Vibration", STA, $D-2, K3 ]
 [ X10, "扭矩","Torque", STA, $D-2, K4 ]

这个很容易看明⽩:

  • 矩阵中的第⼀列就是 FV,
  • 第⼆、三列是FV的含义(中英⽂),
  • 第四列是这个数据的类型(STA代表状态类数据),
  • 第五列是这个数据来⾃哪⼀个数据采集终端,
  • 最后⼀列就是这个数据对应的是这个数据终端的哪⼀个“键”。

这⾥有⼀个数据类型,这⾥要多说⼏句。所谓数据类型,就是指这个 FV数据的类型,MixIOT 体系中,除了状态类型数据(STA),还有其他类的数据,⽐如,事件类(EVNT)、故障类(FLT)、报警类(ALT)和设定类(SET)。

  • STA(状态)类型的数据是指设备(对象)在某⼀个瞬间的状态,⽐如,温度压⼒,电流电 压,等等;
  • EVNT(事件)类型数据是指在某⼀个时间对象(设备)发⽣的某个事件,⽐如,阀⻔被关 闭,动⼒被卸载,设备被停⽌,等等;
  • FLT(故障)类型数据是指在某⼀个时刻,设备(对象)控制器⾃⼰发出的故障信息,⽐ 如,某传感器失效,某设备卡壳⼉,等等。这⾥有个很重要的地⽅,就是 FLT是设备⾃⼰说 的,⽽不是被别⼈诊断发现的;
  • ALT(报警)类型数据是指在某⼀个时刻,设备(对象)控制器⾃⼰发出的报警信息,⽐ 如,压⼒过⼤,温度过⾼,等等。同样要注意,这个也是由设备⾃⼰说的;
  • SET(设定)类数据,是指设备(对象)中设定的参数,⽐如,温度设定到多少,压⼒控制 在多少,等等。

之所以要把数据分类,这是因为他们的属性不⼀样,采集的⽅式也不⼀样,以及后续的数据处理⽅法也不⼀样,这些在活学活⽤系列中都会有详细的解读,我们在这⾥可以简单的归纳⼀下:

  • STA(状态)类型数据,是周期性采集,⽐如,5秒钟⼀次,15秒⼀次,1秒钟5次,等等;
  • EVNT(事件)类型的数据,是随时出现随时采集;
  • FLT(故障)、ALT(报警)类型的数据,也是随时出现随时采集。

在写映射表的时候,也需要正确的写清楚这个 FV 变量对应的数据类型,否则 MixIOT就⽆法对他们这些数据进⾏正确的处理。

还有⼀个很重要的概念,就是映射表中的 $ ,它是代表 “数据采集终端”的宏标记之⼀,也是⽤ 的最多的⼀种宏标记。我们⽤$D-1$D-2,分别代表这个对象所映射的第⼀个和第⼆个适配器。⽽每个适配器都是有⾃⼰的标识(ID),所以,我们在定义对象的时候,可以这样来描述对象的适配器为 (“A3012123”,“A2013133”),那么$D-1 就是标识为 “A3012123”的适配器;⽽$D-2 就是标识为 “A2013133” 的适配器。

在 MixIOT 体系中,映射表除了 $这个宏标记外,还有两个很重要也很有⽤的宏标记,分别是@&。宏标记 @ 是⽤来表示,这个FV变量的值,并不是来⾃某个数据终端的数据采集,⽽是⼀个 “同步计算” 值;⽽宏标记 & 是表示这个 FV变量的值,即不是直接来⾃某个数据终端的数据采集,也不是来⾃某种计算,⽽是其他的⼀些数据来源,⽐如,离线数据、统计数据,等等。

看到这⾥,你应该已经有所察觉了,⼀个对象的FV,并⾮只有适配器采集来的数据,⽽是可以通过某种计算得来的数据,甚⾄是其他什么地⽅来的数据。如果现在我们回过头来看,为什么MixIOT体系⾥⾯的基本单位是对象,⽽不是设备,这个也是⼀个很重要的原因。设备的数据是设备的,是客观的,但是它是 “具象” 的;⽽对象的 FV,是抽象的。

1.3. 什么是同步计算映射

在 MixIOT 映射表中,使⽤ @ 进⾏对变量的计算,这个映射就叫 “同步计算映射”。我们先来看⼀个同步计算映射的例⼦。在刚才的映射表中,假设这个设备是⼀个机电设备。

X3, X4分别是这个机电设备的电流和电压。这两个数据为什么会变化呢?因为这个设备的阻抗在随时在变化,⽽我们⾮常希望能同步知道这个设备的阻抗是多少,因为这个阻抗的值对设备的监控⾮常重要。如果我们把这些数据采集回去后再进⾏计算,那么,就使得以后数据处理就⾮常复杂和麻烦,⾄少让时间的同步会很麻烦。

这种情况下,我们就可以利⽤映射表中的 @同步计算功能,直接计算出采集数据的那⼀个时刻的设备阻抗。那怎么做呢?我们只需要把这个阻抗定义为⼀个新的 FV变量(⽐如,X11),在映射表矩阵中增加⼀⾏:

[ X11, “设备阻抗”,“Resistance”,STA,@Func(div, X4, X2) ]

这样以来,这个对象的 FV 变量的个数,就从10个变成了11个。这个X11(设备阻抗)就像我们实际采集的数据⼀样,被记录在对象的⻢赛克数据中。

刚才映射表中的 @Func() 实际上是⼀个计算公式,我们称为 “映射函数”。@Func(div,X4, X3) 的 div,就是 “除以” 的意思,所以,@Func(div, X4, X3),就是 X4(电压)➗X3(电流),根据欧姆定 律,这个计算结果就是 X11(电阻),也就是设备的实际阻抗。

所以,“div” 是⼀个 “除以” 的函数名字。如果是相乘就是 “mult”,相加就是 “add”。除了这些基 本的加减乘除四则运算外,MixIOT的同步计算映射函数⾮常多,包括各种科学函数,甚⾄包括微 分(diff)、积分(integ)、均值(ave)、最⼤(max)、最⼩(min)、正弦余弦正切余切(sin, cos, tan,cotan)、对数(log)、幂(pow)、正态函数(nor),….,等等。只要我们熟练掌握,就可以定义⾮常复杂的计算公式,

有了这个同步计算映射关系,我们就可以把⼀些⻢上需要知道结果的数据,通过同步计算映射去实现。这样⼀来,MixIOT 在后⾯的数据处理中,只需要把它当做⼀个普通的 FV去进⾏数据处理 就⾏了,⽽⽆需去关⼼这个 X11 FV 到底是采集来的,还是算出来的。

在我们实际的项⽬中,⽐如⼀些热⼯设备,就需要同步掌握设备的“热焓值”。⽽热焓值的计算是⾮常复杂的,但是,⼀样可以⽤这个同步计算映射去实现。只不过计算公式⽐较复杂⽽已。如果有兴趣可以参考数据科学组撰写的《如何利⽤ MixIOT映射实现热焓值同步计算》的专业⽂稿,⾥⾯对热焓值的计算有详细的说明。

1.4. 什么是同步外源数据映射

除了 @(同步计算映射)之外,MixIOT的映射还有⼀个同样是⾮常强⼤,也是⾮常重要的功能, 就是&(同步外源数据映射)。顾名思义,同步外源数据映射,就是把某个 “外部数据源” 的数据,也同步变成这个物联⽹对象的 FV 变量。

我们还是拿刚才的那个机电设备对象为例。假设,除了想知道这个对象的两个数据采集终端采集到的数据,除了要知道这台机电设备的阻抗之外,我们还想知道,这台设备最近的⼀⼩时⾥⾯的⽤电量。⽽⽤电量已经由其他的⽅法进⾏了数据采集,并且进⾏了统计和计算,统计计算的结果放在了统计数据库 Statos ⾥⾯,假设,这个⽤电量统计的标识为 “ElecUsed”。

那么,我们如果想同步知道这个设备最近⼀个⼩时的⽤电量,我们只需要对这个设备增加⼀个FV 变量(X12),并在映射表矩阵中增加⼀⾏:

[ X12, “设备耗电量”,“Electricity Consumption”,STA,&Statos(“ElecUsed”) ]

这个的意思是,把统计计算结果当做⼀个数据源 Statos(外源)的,以 ElecUsed这个为数据标识的数据,同步纳⼊到物联⽹对象的数据中。

这样,这个对象的12个FV变量,有6个来⾃直接第⼀个数据采集终端,4个来⾃第⼆个数据采集终端,1个来⾃计算,1个来⾃外部数据源(统计结果)。这 12个 FV变量,都会作为这个物联⽹对 象的数据,进⾏数据处理和应⽤。

MixIOT的外源同步映射的外源是很灵活的,内容也很⼴泛,除了统计数据,还可以是离线数据,或者是已经在 MixIOT 中被处理好的其他数据,甚⾄是 MixIOT 系统之外的数据。

&Collectos()也是经常被使⽤到的,就是对离线数据的合并。离线数据可以是⽆法直接在线采集的数据进⾏的,⽐如,通过科学仪器的化验结果,仪表读数,观察数据,等等。关于离线数据,我们会在活学活⽤的后续篇幅中专⻔介绍。

MixIOT 还⽀持其他的外源数据的特殊定义,⽐如,我们可以⽤ &Erp( ) 来定义来⾃ ERP 系统的数 据;⽤ &MES( ) 来定义通过 MES 系统获取的其他数据,等等。

那现在考考你,如果再增加⼀个 FV,X13,映射表⾥这样写:

[ X13, "设备值班⼈""Person On Duty",STA,&Erp("PersonOnDuty") ]

你能看得出来,这个对象(设备)⼜多了⼀个什么含义呢?我想你⼀定知道答案,这就是从ERP 系统中,把值班⼈员的排班表的数据也拿过来了,这个 X13的值就是这台设备值班⼈的姓名。这 个 X13跟这台设备的电流电压⼀样,被记录到了这台设备(对象)的数据中。

你可以想象,过了个⼀年半载,如果领导要想知道某台设备在某个时候的值班⼈是谁,把这个对象的数据翻出来就知道了,因为那个时候的排班表早就没有了。如果你再往深⾥想想,如果我们把值班的⼈跟设备的运⾏故障报警信息做⼀个关联,那⼜会怎么样?

1.5. ⽤活⽤好映射表

前⾯介绍的 同步计算映射@,同步外源映射 &,是 $之后的⼀个⾮常强⼤和重要的功能,⽬前也 只有在 MixIOT对象映射⽅法中可以这样做,“映射” 和 “映射表” 的⽅法,是其他物联⽹系统所不具备的。这是⼀个可以处理复杂数据来源的统⼀⽅法。

映射表也是 MixIOT的⼀个重要的利器,它的功能很强⼤。⽤好⽤活映射表,对项⽬的实施会有很⼤的帮助。理论上,⼀个对象的全部数据,⽆论是直接采集的数据,还是需要计算的数据,统计后的数据,离线的数据,甚⾄是外部的数据,都可以通过映射表,⼀次性整合为对象的 FV变量。

虽然 MixIOT在进⾏映射表的时候消耗了计算资源,但是,经过整合后的对象数据,就更加容易进⾏后续统⼀的数据处理。

© Mixlinker all right reserved,powered by Gitbook文件修订时间: 2020-05-07 19:53:23

results matching ""

    No results matching ""