(一)进入“对象管理”

“对象管理” 应用,实际上管理了三个内容:映射表、对象、和控制码。

“对象管理” 应用的使用顺序是:映射表–>对象–>控制码

“映射表” 就是对象的映射关系的一种表现形式。“映射表” 和 “对象” 的关系与 “配置” 与 “终端” 的关系非常类似,可以把 “映射表” 理解为是 “对象” 的配置,而 “对象” 是 “映射表” 的一个具体实例。

“控制码” 是 MixIOT 对象唯一允许接受的控制指令标识。当通过 MixIOT 平台应用向设备发出控制指令的时候,需要对这些控制指令进行注册,通过控制指令的注册,对控制的类型、控制形式、控制范围和控制权限进行限定,确保了所有反向控制的安全性。

(二)创建映射表

创建映射表,是使用 “对象管理” 应用的第一步。进入 “映射表” 菜单版块:

添加映射表

点击 “+添加”,可以选择 “界面化” 或 “脚本” 方式去创建映射表:

映射表编写规范

首先要了解非常重要的一点:“映射表” 是一个 “脚本”。准确地说,“映射表” 是一个按 “映射表规范” 编写的一个脚本。

映射表脚本规范,可以参考《映射表脚本规范》:

上图只是映射表脚本规范文稿之一瞥,由此便可以看出,映射表表现形式虽简单,但内涵却非常丰富,功能也非常强大。

在此只说一下映射表脚本的基本形式,是由多行组成,每一行代表一个映射项。每个映射项,由多个列构成,而主要列的内容为:

[
  [“FV”,“”,“中文含义”,“FV类型”,“数据终端”,“键值”,“ ”,“ ”,“ ”],
  [“FV”,“”,“中文含义”,“FV类型”,“数据终端”,“键值”,“ ”,“ ”,“ ”],
  [“FV”,“”,“中文含义”,“FV类型”,“数据终端”,“键值”,“ ”,“ ”,“ ”],
  .....,
  [“FV”,“”,“中文含义”,“FV类型”,“数据终端”,“键值”,“ ”,“ ”,“ ”],
  [“FV”,“”,“中文含义”,“FV类型”,“数据终端”,“键值”,“ ”,“ ”,“ ”]
]

在此,先把最基本的地方留下,其他复杂的地方留空 (“ ”)。

编写映射表

仍然以佳华电站为例,创建一个用于发电机组运行实时监控对象的映射表:

这个映射表脚本可以这样来写:

实际上,对照我们希望构建的对象来看,这个映射表脚本也就不难理解了。

  • 这个映射表脚本一共有32行,表示一共有32个FV变量;
  • 第一列,就是这些FV变量的名字,比如,“S01”、“S24”之类的;
  • 第三列,是给这些FV变量起的一个中文名字,或者说是这些变量的中文含义;
  • 第四列,是这个FV变量,是个什么变量,“STA”代表的是“Status(状态)”;
  • 第五列,$AprusID-1代表意思是“第1个数据终端”,这个“第1个”是留给“对象”去定义的,先放着,后面自然就会理解了;
  • 第六列,“L1_3_xxx”,就是这个数据终端的键值(Key)。

上面列出来了最基本的六列内容,也是不能为空的内容。

现在回到 “映射表” 的创建,点击 “+添加” 后,选择 “脚本” 方式创建映射表:

事实上,MixIOT 体系的精华所在就是应用中的各种脚本,这一点跟 Linux 操作系统的精华是命令行一样。MixIOT 系统中有一个非常高效和强大的 “脚本容器”,负责对这些不同的脚本进行解析。掌握脚本的书写规范,是深度掌握 MixIOT 体系的最重要的内容。

但为了兼顾不同的使用需求,在许多 MixIOT 应用中,对于能用人机交互方式完成的脚本都提供了界面化的选择。

我们给映射表确定好名字,把映射表脚本复制进去:

扩展信息暂时不需要,先不管它,确定保存这个结果。

保存后,“对象管理” 应用自动给了这个映射表一个唯一的编号。

模板创建

我们注意到,有一个内容在创建映射表的时候并没有涉及到:创建方式为 “非模板创建”,那按常理推断,就一定应该有 “模板创建”,这实际上就是 “对象模板”应用里面要讲解的内容。

视图列表字段列

已经完成创建的对象,都会在对象的视图列表里面。视图列表的字段列,是可以调整的。

打开视图列表右上角的 “图钉” 图标,可以勾选我们希望看到的列:

这样就完成了第一个映射表的创建。

总结

a) 我们创建这个映射表,目的是为了创建5个对象;

b) 这5个对象,分别用于“佳华电站1#~5#机组”的实时监控:

c) 这个映射表有32个FV变量,所以,跟这个映射表相关的这5个对象,每个对象也都有32个对象变量;

d) 这32个变量,可以反映1#~5#机组的运行情况。

(三)创建对象

完成了第一个映射表的创建后,现在就可以来达成这个映射表的目的了。我们非常清楚,创建这个映射表就是为了5个对象。

打开 “对象”菜单版块:

此时还没有任何 “模板”,所以只能选择用 “+添加” 创建第一个对象。

创建对象需要填写的内容很多,其中很多内容目前还无法填写,可以先空着。

“对象名称” 和 “别名” 可以分别用 “佳华1#机组(JHM1)”;

“对象型号” 和 “序列号” 是可选项。如果对象正好对应的是某一台物理设备,那么可以把这台物理设备的型号和序列号填写上去,这也是一个有用的对应信息;

“客户/项目” 选择 “山西佳华瓦斯电站”,这是已经在“客户与项目”应用中完成的信息创建;

在 “映射表” 选项中,选择刚创建好的映射表 “佳华机组监控”。

接下来,需要选择数据终端:

这个对象只涉及到一个数据终端,所以只选一个:

这个终端正好就是对接佳华1#机组的数据终端。

保存后终端选择结果:

其他的信息,可以暂时放一下。现在可以保存我们创建的这个对象,在视图列表勾选希望看到的内容:

这样,第一个对象(佳华1#机组)就创建完成了。

同理,可以接着依次创建佳华2#~5#机组对象:

现在回到 “映射表”:

看一下“佳华机组监控”这个映射表的详情的基本信息:

可以查看详细的脚本:

再查看“对象列表”:

在这里,就可以看到刚才创建的五个对象。

现在要回到一个细节,就是映射表脚本中的第五列,我们在写这个映射表脚本的时候,用了一个 “$AprusID-1”,这是脚本中使用的 “宏替换” 表示方法。

回顾一下在创建“佳华1#机组”对象,选择数据终端的时候:

实际上,“$AprusID-1” 对应的就是 “排序为1” 的数据终端编号,也就是 AX20230423201。所以,这样写的脚本,对“佳华1#机组”这个对象而言,等价于:

换句话说,“$AprusID-1”:
对 “佳华1#机组” 对象而言,是 “AX20230423201”;
对 “佳华2#机组” 对象而言,是 “AX20230423202”;
对“佳华3#机组”对象而言,是 “AX20230423203”;
对“佳华4#机组”对象而言,是“AX20230423204”;
对“佳华5#机组”对象而言,是“AX20230423205”。

再回到对象的详情:

可以查看到对象的基本信息:

在 MixIOT 所有的技术文稿中,都反复说 MixIOT 的一切,都是围绕 MixIOT 对象开展的, MixIOT 体系,是以 MixIOT 对象为基础的体系。
换言之,从完成对象创建,按下 “确定” 的那一刻开始,MixIOT 平台就开始自动构建这个对象的马赛克时序数据了,一切都在围绕我们所创建的对象工作着。

监控标签

监控标签是显示该对象的实时PRO显示板。

这里的内容就涉及到“显示板设计”和“显示板管理”。所以,暂时还看不到什么。

FV变量标签

这个标签是该对象的所有FV变量的相关信息。

这里的最后一列,是可以实时显示的每个变量最新的值。

终端标签

可以查看该对象关联终端的所有详细信息。

历史数据标签

这是对象的一个非常重要的功能,经常会使用,非常容易查看对象的变量在某个时段的数据:

除了时间段的选择,还可以选择我们需要的变量:

如果这是我们经常需要查看的变量参数,那也可以创建一个参数方案,并把这个参数方案保存起来,这样再次查询的时候,可以直接选择这个保存的参数方案:

上面的 “时间间隔” 默认是0(秒),这个设置是一个“显示限制”,是对象原始时序数据显示的最小时间限制限制。默认值0就是显示的内容完全是对象原始的时序数据。

我们也可以把这些查询数据导出所选择某个编码的CSV文件保存:

保存的CSV文件的列,正好就是我们所选择的参数(变量):

只要数据终端有数据采集,这些对象的时序数据就会源源不断产生。

到目前为止,我们已经成功创建了“佳华机组监控(JHM)”映射表:

以及成功创建了使用该映射表来产生数据的五个对象:

这样,在 MixIOT SERG 平台上,就正式有了对象和对象数据。现在我们也清楚了,对象的变量是怎么来的,对象的数据又是什么样的。

(四)创建佳华电站的另外一个映射表和对象

前面已经完成的5个对象,对应的是佳华电站的5台机组,其对象的FV变量分别是单台机组的一些重要的运行指标。我们创建这5个对象的目的,就是为了实时监控机组的运行情况。“实时监控”或“远程监控”是工业互联网做的非常基础的一件事情。

除了这5个对象,我们还规划了一个掌握整个电站工况机电站生产的一个对象:

根据上面这个规划,就可以开展对象的建立工作,当然首先还是要创建这个对象的映射表。

编写映射表脚本

根据这个对象的规划,不难编写这个对象的映射表脚本:

这个脚本中,用到了9个数据终端,依次用宏替换变量$AprusID-1、$AprusID-2、……、$AprusID-9,分别代表AX20230423201、AX20230423202、……、AX20230423205、AX20230423301、AX20230423401、AX20230423401、AX20230423501。

在创建对象的时候,把终端的顺序对应上就可以了。

实际上,还有一个方法来编写这个映射表脚本,就是直接在脚本中,不使用宏替换变量,而是直接用数据终端的编号:

因为这个映射表只有一个对象,所以,这种方式也是可以的。但这样一来,这个映射表注定只能创建一个对象。假设未来另一个电站配置完全相同,我们也需要创建完全一样的对象,那就只能重新创建一个映射表。

所以,尽管映射表可以这样写,但我们还是建议使用标准的宏替换方法。

我们还是以“脚本”方式创建映射表:

保存映射表:

完成了映射表的创建,就可以创建对象了。

这是对象的基本信息:

这是对象的终端对应:

对象变量:

到现在为止,佳华电站的两个映射表、六个对象都已经创建完成。

(五)奔腾瓦斯电站

奔腾瓦斯电站的终端对接和数据采集情况:

同样,也需要规划对象。实际上,沿用佳华电站的思路,先考虑两类的对象:一类是对机组监控;另一类是电站工况和生产。

映射表

映射表1,奔腾机组(BTM),用于奔腾电站各机组(1#~4#机组)实时运行监控;

映射表2,奔腾电站生产和工况(BTP),用于掌握电站生产和工况信息。

对象

对象1,奔腾1#机组,映射表1;
对象2,奔腾2#机组,映射表1;
对象3,奔腾3#机组,映射表1;
对象4,奔腾4#机组,映射表1;
对象5,奔腾电站生产和工况,映射表2。

最容易想到的规划方法就是上面这样。

但如果我们看一下数据终端对接机组的情况:

就很容易发现,奔腾电站对接机组的终端,采集的是50个参数,比佳华电站多了一个“并网发电量”,数据终端怎么对接机组进行数据采集的,我们不去管,但报文是完全一样的。而且机组运行这个对象,还是32个变量:

所以,佳华的机组监控的映射表,实际上也完全适合奔腾电站的,那么是不是就可以不需要再去创建一个新的映射表了呢?答案是肯定的。
但看一下已经创建的映射表:

我们把这个硬设备的名字都写成了 “佳华机组监控(JHM)”,如果要沿用,那就是“奔腾的机组对象是来自佳华机组的映射表”,好像说不过去。

所以,最好的方法就是把 “佳华机组监控”映射表的名字,改成“瓦斯机组监控”,这样,佳华瓦斯电站和奔腾瓦斯电站就都可以用了。

那么,这个名字的改动,会影响已经构建好的关联关系吗?之前一切的关联都要重新来一次吗?答案是令人高兴的,我们可以放心大胆去改!重新构建关联关系的工作,MixIOT 会帮我们自动完成。

这就是 MixIOT 在设计的时候已经考虑到的,因为我们在做前面事情的时候,确实很难完全兼顾到后面的事情。

我们对这个映射表项进行编辑操作:

修改映射表名称和别名,以及描述的内容:

确定保存:

确认一下,有没有影响之前的关联关系:

这些关联关系并没有影响。

弄清楚了这些,就可以直接创建奔腾电站1#~4#机组对象了:

映射表直接选择“瓦斯机组监控”:

选择数据终端的时候,要选择对接奔腾1#机组的数据终端。这个对象只有一个数据终端:

确定,完成“奔腾1#机组(BTM1)”对象的创建:

同理,可以依次创建奔腾2# 、3#和4#机组对象,最终完成奔腾电站全部4个对象的创建:

x

通过这个环节,我们应该对“映射表”和“对象”之间的依存关系和关联逻辑都有了更深的认识。

其实就是两个要点:

一是要把数据终端跟设备的对接规划做的尽可能规范、尽可能统一;

二是数据终端的数据采集(Lua脚本)要做得规范,AprusKey尽可能统一。

只要做到了这两点,那就是一个好的开始,后面的一切工作都会变得很顺利。否则,后面就需要做很多无谓的重复工作。

我们还有一个对象需要创建,就是奔腾电站生产与工况。跟佳华的也很类似,但是无法直接沿用佳华的映射表。

还是用对照的方法来编写脚本,这个脚本涉及到奔腾电站的5个数据终端:

把这个脚本与奔腾电站的整个规划对应来看,就应该很清楚了。

现在来创建映射表:

再创建对象:

关于这些对象的详细信息,可以通过对象详情来查看。

基本信息:

对象的FV变量:

对象所关联的终端:

同样,也可以选择参数(变量),查看对象数据:

这样就完成了奔腾电站对象5个对象的构建,为后续的MixIOT落地工作做好了准备。

(六)粤海沼气电站

粤海沼气电站属于广东粤海集团,是由三普能源集团(SERG)代运营管理的项目。

粤海沼气电站的终端对接和数据采集情况:

通过粤海电站的数据对接不难看出来,所用的两个数据终端(Aprus适配器)的对端完全不一样:

a) 终端AX20230425501对接的是两台机组、两个并网发电量计量表;
b) 终端AX20230425502对接的是一台机组、一个并网发电量计量表、两个干管压力表和一个甲烷浓度测量仪。

当初之所以这样来规划与设备对接,很可能是因为电站条件所限,也或者是为了节省几个数据终端。但即便是这样,我们还是应该在现有的条件下,合理规划。比如,可以在数据终端键值(AprusKey)上做好规划:

如果这样来规划 AprusKey,那后面就可以减少很多麻烦,也节省很多工作量。至少数据终端 Lua 脚本写起来就容易得多。

我们一共需要创建4个对象:粤海1#机组、粤海2#机组、粤海3#机组以及粤海电站。

那么,这4个对象需要几个映射表呢?可以分别来看。

粤海1#机组对象:

粤海2#机组对象:

粤海3#机组对象:

粤海电站对象:

尽管粤海电站的对接看上去完全不一样,但应该还是不难发现:

“1#机组对象”和“3#机组对象”竟然可以是一样的。也就是说,它们可以是同一个映射表。

如果再继续仔细辨认,就会很惊奇地发现,它们竟然跟佳华机组是一样的:

到了这里,我们似乎应该恍然大悟:数据终端怎么对接设备、数据终端用什么协议去采集数据、数据终端的Lua脚本写的是不是一样, 这些其实都不重要。

重要的是两个关键:一是在数据终端一侧,完全一样的东西就都用一样的AprusKey;二是在映射表这边,完全一样的东西都用一样的FV。

只要能把握这两个关键,那么后面的一切都会很顺利,的的确确可以省去大量的重复工作,并且让一切都变得非常清晰。

这样一来,我们只需要做两个映射表,一个给粤海2#机组,一个给粤海电站。

实际上,粤海2#机组的映射表也很简单,只需要把L1_3_xxx改成L2_3_xxx就行了,其他什么都不用动。

粤海2#机组映射表:

粤海电站工况与生产映射表:

下面就可以继续回到“对象管理”,完成最后的工作了。我们可以创建粤海1#机组、 3#机组对象。

但在创建这2个对象之前,先要做一件事,就是要把之前这个“瓦斯机组监控”映射表名字改一下,因为粤海不是瓦斯机组,是沼气机组,可以把名字改成“机组监控(SM)”:

不改名其实也无妨,实际上并不影响什么,只是看上去有点名不正言不顺。

我们看一下,创建好的粤海1#机组、3#机组对象:

接下来,就是要创建两个映射表:

粤海2#机组映射表:

粤海电站映射表:

现在就可以创建粤海2#机组和粤海电站工况与生产:

总结一下,到现在为止,我们已经完成了三普能源集团(SERG)旗下三个项目(佳华电站、奔腾电站和粤海电站)全部对象的创建。

每个电站的对象都有两类,一类是针对机组实时监控,这类对象的FV就是对应机组的关键参数; 另一类是针对整个电站工况条件与运行的信息掌握。

文档更新时间: 2024-07-11 21:40   作者:Mixiot