完成了上述的各项准备工作,就可以开始 “终端管理” 应用的各项工作了。我们将在接下来的使用讲解中,以 “三普能源集团工业互联网项目(SERG)”为例来说明。
(一)打开应用
打开 “终端管理” 应用就很容易看到,应用有三个菜单(经常也称为三个菜单版块),分别是:“终端”、“配置”和“流量卡”。最后还有—个“Lua合成工具”。
如果 MixIOT 应用的菜单版块是两个或者两个以上,那么一般来说,都会有使用不同菜单版块的先后顺序。
“终端管理” 应用菜单版块的使用顺序是: 配置–>终端–>流量卡 。
“Lua合成工具” 是—个有可能用到的工具,用来合并Aprus Lua代码。这是因为在 Mixiot Aprus 中,为了我们更加容易编写和使用 Mixiot Lua脚本,所以 Aprus Lua 脚本由 aprus.lua(主控脚本)和 config.lua(配置脚本)两部分构成。但这两个部分的脚本需要合并才能在 Aprus 适配器中运行。
在某些 Mixiot V8 版本中,合并 Lua 脚本代码的工作是在平台后端去完成的,我们只需要分别上传(提交) Aprus 的主控和配置 Lua 脚本代码即可,无需我们自己去合并。
(二)确定 “配置”
在 MixIOT 体系中,“数据终端” 有一个很重要的概念,就是数据终端的 “配置”。数据终端 “配置” 主要是指数据终端里面运行的数据交互程序以及程序版本。如果我们用的数据终端是 Aprus 适配器,那么,数据终端的配置指的就是数据终端里面运行的 Lua 程序(脚本)。
从硬件的角度来看,数据终端可以有各种型号。以 Aprus 适配器为例,有 AM系列 和 AX系列, 每个系列都有不同的型号,可以理解为,这些适配器在硬件上是完全不相同的。
AM系列
AX系列
但它们却可以是同一个配置,也就是说,不同系列、不同型号的 Aprus 适配器,里面可以跑相同的 Lua 程序(脚本)。
反过来,同一个系列、同一个型号的 Aprus 适配器,只要里面跑的 Lua 程序(脚本)不一样,它们的配置就不一样。
从这个意义上来说,数据终端 “配置” 的概念是 “软 的,而非 “硬” 的。
那么在 MixIOT 体系中,为什么数据终端会有 “配置”这个概念呢?其实就是为了解决实际工况场景中的“重复”而设计的分离方式。所谓重复的意思,就是在实际工业场景中设备的重复,这在工业场景中非常常见。
以SERG 为例,这是佳华电站的情况:
- 有5台完全相同的瓦斯发电机组(1#-5#机组);
- 有5台完全相同的发电量计量的电表(有供电量表),分别计量每台机组的发电量;
- 有2台完全相同的管道压力表,用来分别测量瓦斯输气干管前端和后端的压力;
- 有1台瓦斯浓度(甲烷浓度)测量仪表。
数据终端对接
数据终端对接的情况,如图所示:
每台瓦斯发电机组,都分别用 1个Aprus适配器去对接;
因为每台机组是完全一样的,所以,这5个适配器对接机组的程序也应该是一样的。因此,这5个适配器的“配置”是一样的。(这个配置记为佳华A,JHA)。用1个适配器,同时对接5台发电量计量表;
这里只有1个适配器,所以对应的是一个“配置”。(这个配置记为佳华B,JHB)。用2个适配器,分别对接两个压力表;
这2个压力表是完全一样的,所以,2个适配器的配置也应该是一样的。(这个配置记为佳华C,JHC)。用1个适配器,对接瓦斯浓度测量表。
这里只有1个适配器,所以对应的是一个“配置”。(这个配置记为佳华D,JHD)。
掌握了这些情况,我们就应该很清楚,“佳华电站” 一共用了8个数据终端,一共需要有4个配置。这4个配置我们暂时称为 “佳华A/ 佳华B/ 佳华C/ 佳华D”。
(三)理解配置
我们现在来创建 “佳华A”,点击“+添加”操作:
从这里可以看到,构成一个配置的要素,除了名称和别名,还有两个需要上传的 Lua 程序(脚本)文件。
这里面有三个很重要的概念:
- 这是运行在数据终端(Aprus 适配器)中的Lua程序;
- 数据终端(Aprus适配器)如何对接设备、采集什么数据、如何采集数据、采集数据后发送到哪里,总之,就是数据终端如何工作,完全取决这个Lua程序;
- 这个 Lua 程序需要我们自己去编写。
所以,现在应该清楚了,数据终端 “配置” 的核心关键,就在于配置里面的 Lua 程序要怎么编写。而且编写这两个 Lua程序的工作只能由我们自己来完成,因为只有我们自己知道要用这个Aprus适配器去对接什么设备,要采集什么数据。
这里的 Lua 程序实际上是一个合并后的程序,被合并的两个程序分别是 Aprus 脚本(aprus.lua)和 Config脚本(config.lua)。
也就是说,我们需要编写的 Lua 程序是两个:aprus.lua 和 config.lua。
MixIOT 提供了 Aprus Lua 的规范编程方案,也就是用两个(aprus.lua 和 config.lua) Lua 程序来实现数据采集需求的方案,完全可以让非IT程序员也能完成相应的编程工作。
完成 Aprus 脚本(aprus.lua)和 Config 脚本(config.lua)编程后,可以使用 “终端管理” 应用提供的合并工具,把 Aprus 脚本和Config脚本合并成一个用来上传的 Lua 文件。
合并后的脚本,需要严格按Aprus Lua文件名规范,即 “XXXXX . XXXXX . L.Vxxxxxxx. R”。规范的细节会在后面详细讲解。
(四)Aprus Lua
Aprus 适配器有两个系列,M 系列和 X 系列。
无论是哪个系列,在通电后会去找到一个名为 “xxxx.R” 的程序,然后运行这个程序,这就是 Aprus 适配器的默认规则。
换句话说,我们可以把 Aprus M 或者 Aprus X 当做一台电脑,把要这台电脑做的事情都写到 aprus.lua 这个程序里面,并把这个程序放到 Aprus 适配器里面。这时候,只要 Aprus 通上电,它就会自动运行 “xxxx.R” 这个程序。
前面介绍过,这个 “xxxx.R” 程序是由 Aprus 脚本(aprus.lua)和 Config 脚本(config.lua)合并而成,那么,为什么用户编程不直接去编写 “xxxx.R”,而是要去编写 aprus.lua 和 config.lua呢?
这是因为 Aprus 适配器所支持的 Aprus Lua,是在标准 Lua 础上的一个扩展,简单地说,就是把很多 “对接各种不同工业设备” 要用到的东西都内置了进去。
Aprus Lua 的最大特点,就是用了一个 “示范分离” 的方法。所谓 “示范分离” 方法,就是把程序分成了三个部分:不会改变的部分、很少会改变或基本上不会改变的部分、一定会变化的部分。
(1)不会改变的部分,已经集成到Aprus适配器固件的底层,编程的时候完全无需去关心这些内容;
(2)很少改变的部分或者基本上不会改变的部分,就放到aprus.lua里面,这部分主要是数据交互协议函数的定义等等。
(3)会改变的部分,就都放到了config.lua里面。这部分就是怎么去对接设备,怎么去采集数据。
如果同一类协议的对接,aprus.lua 基本上是不会有什么改变的,具体对接什么,比如控制器、寄存器、地址、点位等等,这些东西全部都放在 config.lua里面。
所以,aprus.lua 和 config.lua 都是 Aprus Lua 的示范程序。也就是说,如果要编写什么程序,那就直接把示范程序拿过来,aprus.lua 基本上不用动,只在 config.lua 照葫芦画瓢改一下。
MixIOT 提供了很多各种使用场景下的示范程序(aprus.lua 和 config.lua):
这些都可以从 MixIOT 技术支持获得。用更加通俗直白一点的话说,如果要对接的设备控制器是 “西门子 S7”,就找到这个目录,下载对应的 aprus.lua 和config.lua。
基本上就可以把这个直接拿来用,aprus.lua 不用改什么,要采集什么数据,就对着 config.lua 这个示范程序去改一下。
MixIOT 的《Aprus Lua软件编程手册》有 Aprus Lua 的编程方法的详细讲解,在 “终端管理” 应用就不做更多的介绍了。
(五)数据表
当确定了要对接的是什么、采集什么数据、怎么采集,这些都必须要按适配器采集对端的数据表。
以佳华电站1-5#机组为例,需要获得佳华电站机组的数据表(也称为“PLC点表”)。
我们截取其中一部分来看。
简单地说,数据表实际上就是对对端(PLC控制器)的描述,哪个寄存器里的什么寄存器地址、存放着的是什么数据、这个数据是什么类型的数据、是只读还是可以读写、数据按什么精度存储等等。
尽管不同设备给出的数据表形式都不尽相同,但基本上包含的信息就是这些。数据表(或PLC点表)是对接数据交换的基础,如果没有这个基础,其他的工作也是无法进行下去的。
(六)选择参数
我们回到佳华电站1-5#机组的数据表:
各种寄存器里面的数据一共有103个,也就是说,我们可以采集的数据有103个。但其中一些数据与我们要做的事情关系并不是很大,事实上我们并不想把这些数据都进行采集。
选择需要的参数,这个工作非常重要,而且跟经济利益直接相关。但这通常也是一个非常容易被忽视的工作。
以佳华机组为例,看一下如果选择了很多不需要的参数,会是什么一个结果。我们可以采集的参数一共有103个,但最终只选择了49个,也就是丢掉了54个。
每个参数报文的数据量可以按大约20字节计算,54个参数就是20×54=1080(字节);
如果按每3秒钟采集一次数据,每分钟的采集的数据量就是:1080×20=21600(字节)=21.1(K字节);
每小时的数据量是:21.1×60=422(K字节);
每天的数据量是:422×24=10128(K字节)=9.9(M字节);
每个月的数据量是:9.9×30=296(M字节)。
这还只是一台机组的情况。佳华电站有5台机组,那么每个月的数据量就是:296×5=1480(M字节)=1.44(G字节)。
这些数据都需要发送到MixIOT平台,自然就需要用到流量卡的流量,每个月1.44G的流量,多少也是一笔开销。除了通讯成本的考量,还有这些数据到了MixIOT ,就需要被保存,日积月累,数据量存储需要的花销也不小。
这是最终的参数选择结果:
找到了对应的 aprus.lua 和 config.lua,加上有了这个数据表,就可以为 “佳华A” 配置进行编程了。
(七) Lua程序
通过相关技术资料的研究,我们知道佳华电站瓦斯发电机组的控制器是 “西门子 S7”,这样就可以直接去找到相应的示范程序目录,下载 aprus.lua 和 config.lua。
这个目录里面,还包括了详细的示范程序的使用说明,我们也可以参考。
有了这些,现在就可以开始试着编程了。
前面介绍过,如果选择的示范程序没有什么问题,那么aprus.lua基本不用去改什么。
剩下的就是怎么根据数据表(PLC点表),在示范程序的基础上,去完善 config.lua。
我们看一下修改后的 config.lua:
放大其中的一个细节:
在《(西门子S7)示范程序使用说明》里面有相关的说明,数据表的地址位是从1开始,而这里的地址位是从0开始,所以,这个地方要减1。
其实这些都是基本确定的内容,照着做并非多难的事情。
(八)创建配置
有了 “佳华A” 配置的要件(aprus.lua 和 config.lua),就可以创建 “佳华A”的配置了。要创建这个配置,需要分两步走:
第一步,利用 “终端管理” 的 Lua 代码合并工具,把 Aprus 脚本和 Config 脚本合并。
进入 Lua 合成工具:
然后,分别把 Aprus 脚本(aprus.lua)和 Config 脚本(config.lua)代码复制后粘贴进去,点击 “合并下载”:
这时会看到提示:
如果使用的适配器是 Aprus X 系列,则勾选 “Aprus-X方式”。
勾选 Aprus-X方式,按确定。这个时候,合并后的代码就下载到了本地。
需要注意的是,合并后的文件名 “terminalConfig_20231205165213.JHA.L.V23070301.R”。
其中,20231205165213 实际上是合并的日期和时间。
而后面的 .JHA.L.V23070301.R,是在 Config脚本(config.lua)中的 luaver 定义的:
这就是这个 Lua 程序脚本的版本号。
第二步,创建配置“佳华A(JHA)”:
把合并后的Lua文件(terminalConfig_20231205165213.JHA.L.V23070301.R)上传:
上传后的 Lua 文件名,会被自动修改,这个我们不用去理会。
扩展信息是为了给 “终端” 记录的时候更加统一和简洁形式的扩展信息。
扩展信息是一个 “扩展信息脚本”,这个脚本的书写规范格式为:
如果需要,我们可以在 “描述” 字段写一些相关的备注信息。
确定保存后,“佳华A(JHA)”配置就算是创建完成了。这个配置的编号是: TCF3252436900006。
我们现在来盘点一下,配置“佳华A(JHA)”的几个要件是什么:
配置方案,也就是对接的方案;
这整理到了一个文档:佳华A对接方案.pdf。对接对端(发电机组控制器)数据表(点表);
这整理到一个Excel文件:佳华1-5#机组数据表.xls。参数选择表;
这也整理到了一个Excel文件:佳华1-5#机组数据表(参数选择).xls。我们自己编写好的Aprus脚本和Conigg脚本:aprus.lua和config.lua.
这些东西都是形成终端配置“佳华A(JHA)”的重要依据资料,所以,我们可以把这些保存到“文件管理”里面,创建一个文件夹,别名就用“TCF3252436900006”。
上传所有相关资料后,确定保存。
这样,跟 “佳华A(JHA)”配置所有相关的资料,都在这里面了,日后随时可以查找。
(九)注册“佳华A”的数据终端
创建完成了 “佳华A”配置后,就可以对使用该配置的数据终端进行注册了。可以回顾一下 “佳华A” 配置,一共有5个 Aprus X 适配器使用了这个配置,都对接到一个发电机组。
进入终端版块:
通过添加操作,先创建第一个数据终端:
- 终端编号是印刷在适配器设备上面的编号,这个是不能错的;
- 终端名称可以由用户自行决定,通常可以用配置名称与终端编号的位数组合,如 “佳华A-201”;
- 终端类型,选择实际使用适配器的系列,这里是 Mixlinker Aprus-X;
- 终端配置编号,直接下拉后选择 “佳华A”;
- 生产厂家,可以填写 “智物联”;
- 如果需要,可以在 “描述” 记录一些备注信息。
最后的扩展信息,是之前在配置 “佳华A” 中定义好的:
这几个信息,就是我们可以填写的内容,这些内容将作为该终端的扩展信息保存。
确定保存,这样就完成了第一个适配器的登记。
同样的方法,我们完成全部5个适配器的创建:
在 “全部终端” 视图列表中,马上就可以看到这些适配器的在线状态。
其他的几个视图,是 “分类” 视图。“在线终端” 视图里面只有当前 “在线” 状态的适配器;而 “离线终端” 视图里面只有当前 “离线” 状态的适配器。
分类视图也是 MixIOT 应用中的一个非常重要的视图形式。
(十)终端 – 操作菜单
打开终端列表的操作菜单,如下图所示:
详情
可以查看终端详情;编辑
可以编辑终端信息;删除
可以删除已经创建的终端(需要超级管理员权限);刷新
刷新当前的终端在线状态以及最新报文时间等等;重启
向数据终端下发指令,让数据终端重新启动。这只对 “在线” 状态的终端有效,如果该终端当前是 “离线” 状态,这一操作无效;升级
让终端进行版本比对,如果有新版本,则立即进行强制升级。
这一指令对 “离线” 状态的终端同样有效,当终端重新“在线”的时候,进行版本比对,如果有新版本,则执行强制升级。
(十一)返回配置
重新回到 “配置” 版块,打开配置视图列表的操作:
打开详情:
查看 “关联终端”:
这是之前创建的以 “佳华A” 为配置的5个终端。这样,终端与配置就关联了起来。
(十二)配置升级
数据终端(适配器)的升级,是经常会发生的事情。当发现之前适配器的 Lua 程序有问题需要完善,或者对采集的数据项有变化,或者对接的设备控制器有调整等等,各种情况都可能需要及时去升级 Aprus 适配器里面的 Lua 程序。
Aprus 适配器里面的 Lua 程序需要升级,那就需要把该适配器的对应配置升级。
配置升级的方法很简单,就是进入该配置项的编辑模式,重新上传新版本的 Lua 程序。
要注意的是,Lua 程序的版本信息是写在 Config 脚本(config.lua)里面的。
如果只是修改了 aprus.lua 和 config.lua 代码,但是,却没有在 config.lua 代码中修改 luaver 的值,那么即便重新合并,上传了 Lua 文件,也不能视为版本需要升级。
事实上,我们在这里用了 “升级”,但 Lua 程序的版本号并没有版本大小这个概念。换句话说,只要重新上传了某配置项的 Lua 文件,只要这个 Lua 文件的版本不一样,那么,就会被视为需要升级。
(十三)终端升级
数据终端的升级有两个途径。一个是通过 “配置列表” 的 “批量升级” 操作。
或者通过 “终端列表” 的 “升级” 操作:
一般来说,我们只需要关注 “待升级终端” 视图即可。
“终端管理” 终端版块的 “待升级终端” 是一个动态视图, MixIOT 会根据终端报文的情况来判断终端是否需要升级,并会把需要升级的终端自动归类到这个视图。
当终端完成升级后,就不会再出现在这个 “待升级终端” 视图中。