(一)进入“对象管理”
“对象管理” 应用,实际上管理了三个内容:映射表、对象、和控制码。
“对象管理” 应用的使用顺序是:映射表–>对象–>控制码。
“映射表” 就是对象的映射关系的一种表现形式。“映射表” 和 “对象” 的关系与 “配置” 与 “终端” 的关系非常类似,可以把 “映射表” 理解为是 “对象” 的配置,而 “对象” 是 “映射表” 的一个具体实例。
“控制码” 是 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就是对应机组的关键参数; 另一类是针对整个电站工况条件与运行的信息掌握。