
NIEFAD 变换
MixIOT 体系中的NIEFAD 变换其实是两个变换:一个是对I、N、D 这三种报文的数据进行处理;另一个是把R 报文里面的“E”(事件,Event)、“F”(故障,Fault)和“A”(报警,Alert)的数据挑出来,单独放到一个关系数据库里面,然后再对它们进行处理。
I、N、D 是报文类型,不是数据类型。它是怎么变换的呢?这是MixIOT 体系内部的事情,基本上不需要我们去做什么。
下面我们重点来说明E、F、A 是怎么变换的。这里要分清E、F、A 不是报文类型,而是数据类型。
图8-2所示的是一个R 报文里面的栅格数据,其中,除了K1~K11(这些数据我们理解为温度、压力、电流、电压之类的反映设备状态的数据),还有其他数据。
F1、F2是故障数据;A1是报警数据;E1~E4是事件数据。
这些数据是跟设备的状态数据一起报上来的,也是R 报文中的栅格。MixIOT体系收到报文数据后,就启动了NIEFAD 变换。
简单地说,NIEFAD 变换的作用,就是把它们从这个报文中“摘出来”,放到其他专门存储这些数据的地方,让这些数据各就各位,如图8-3所示。

图8-2 一个R 报文里面的栅格数据

图8-3 NIEFAD 变换
那么,适配器报文的栅格数据中,哪些是事件数据,事件是什么?哪些是故障信息,故障是什么?哪些是报警信息,报警信息又是什么?这些问题就是通过代码库(Codebase)中的代码库表描述的。
代码库表(或者叫代码库脚本)跟映射表(或者叫映射脚本)其实很类似:

- 第一列描述的是栅格的数据类型。“EVNT”代表发生的事件,“FLT”代表故障,“ALT”代表报警;
- 第二列代表的是栅格数据的标识(Key),这个我们在之前的映射中已经说明过;
- 第三列是一个数字,这个数字就是用来代表这个事件、故障或报警的编号的。简单地理解,就是我们把这些信息都用不同的编号进行标识。比如,你看到了“404”,就知道发生了什么;
- 第四、五列,分别是它们各自对应的英文和中文的含义。
我们注意到,FLT 和ALT 的写法是后面加-A、-B 和-C,这个不是什么故障报警类型,而是代表这类数据“出现和消失的方式”,这个非常重要,是不能写错的。那么什么叫数据“出现和消失的方式”呢?下面我们来详细解释一下。
首先,这类数据信息都是来自设备的控制器的,而不同的设备控制器对这类信息的处理没有统一标准。就拿上面这个编号为“2231”来说,编号“2231”对应的是ALT-C 数据类型,是一个“4#锅炉高温”的报警,这是一个一次性的报警信息。也就是说,当这个信息出现的时候,我们会看到数据栅格A1=1(TRUE)就在报文中出现了,我们也采集到了。但在这之后,即使这个报警被解除了,后面我们还会收到A1=1,这个栅格的值不会变,需要人工去设备的控制面板操作一下,A1=1才不会再出现。这就像有人跟你说,你的裤子拉链没拉好,你后来自己拉好了,但是对方不会再跟你说拉好了,你要自己确认是否拉好了。这是控制器一种可能的做法。
有一种情况,就是当这个报警被解除后,你会采集到A1=0这个信息,也就是说,报警解除后会有信息反馈,这时我们就定义A1为ALT-A。只需要通过ALT-A的值(1或0)就能知道这个报警是什么时候出现的,什么时候消失的。这是控制器又一种可能的做法。
有的控制器可能是这样做的:这个栅格A1=1不会变成A1=0,但也不会总重复,而是在某一个周期数据采集的时候,这个栅格不见了,也就是采集不到A1=1了。这时我们就定义A1为ALT-B。这是通过“出现和消失”这种方式实现的,而不是改变数值。这又是一种处理方式。
如果只告诉你出现了报警,而不告诉你报警解除了,这种情况又怎么处理呢?当出现A1=1这个数据栅格的时候,说明4#锅炉出现了高温报警,工作人员前去处置后,报警解除了,这个时候设备产生一个事件(E4)告知这个报警被解除,然后,需要通过人工在控制面板上解除这个报警,使A1=1这个数据栅格不再出现。这类方法在工业设备中非常常见。

在这个例子中,说明2231报警的消失是由于4231事件的出现。故障跟报警也与此类似。
在实际工业现场,我们可能会遇到更加复杂的情况,比如,事件导致的故障、故障导致的报警、报警导致的事件、故障导致的事件,然后通过某个事件又解除了报警等,把这些千变万化的情况抽象出来,其实就是-ABC。简单总结一下,如果是同一个Key,=1代表出现,=0代表消失,那就是-A;如果Key 只有=1,而且一直=1,这就是-C;如果Key 只有=1,不会=0,但也不会重复,那就是-B。
通过上面这个例子,你或许应该能感觉到,为什么MixIOT 体系要把事件、故障、报警放在一起,并且进行统一的编码。图8-3把EFA 串成了一个糖葫芦,说明EFA 之间关系的复杂性。MixIOT 体系在这方面做足了功夫,不仅通过NIEFAD 变换把EFA 摘出来,而且MixIOT 体系还有其他的组件来处理这些-ABC 的相互关系,这些也是MixIOT 体系独有的一个处理方法。