(一)创建任务

我们还是以三浦能源集团(SERG)佳华电站为例,来规划一个任务。

在 “历程管理” 应用中,我们创建了 Quo-JH 历程项目,该项目包括了 Quo-L(气缸低温报警)和 Quo-H(气缸高温报警)两个历程项。

但这个定义的历程太过宽泛,通过数据观察分析可以看到:

因此,需要增加两个历程,并在这个历程起始的时候,对机组的功率预设做控制调整:

  1. 增加 Quo-L4(出现低温报警的气缸总数达到或超过4个)历程;
  2. 增加 Quo-H2(出现高温报警的气缸总数达到或超过2个)历程。
  3. 如果单独出现 Quo-L4 历程,就要每1分钟调整一次(FV:S24)J功率设定值+20 KW,直到 Quo-L4 历程结束为止;

如果单独出现 Quo-H2 历程,就要每1分钟调整一次(FV:S24)J功率设定值-10 KW,直到 Quo-H2 历程结束为止。

这是一个典型的使用“历程”的用例,但我们还需要做如下的准备工作:

(1)还是利用佳华机组缸温超限历程研究对象

也就是说,我们直接使用之前为了缸温超限历程研究的对象,而不再创建新的对象:

这几个对象的映射表是同一个。

(2)修改映射表

目的是为了增加 Quo-L4 历程的起始事件,即 Quo_L4_Begins(Quo-L4 开始)事件和 Quo_L4_Ends(Quo-L4结束)事件;

(3)修改映射表

增加 Quo-H2 历程的起始和结束事件,即 Quo_H2_Begins(Quo-H2 开始)事件和 Quo_H2_Ends(Quo-H2 结束)事件;

就是在原有映射表中,增加四个事件:

(4)创建历程项目

佳华机组缸温超限 L4(Quo-JH-L4):

里面包含一个历程项 Quo-L4,低温报警气缸总数达到或超过4个:

确定保存这个历程项目。

(5)创建历程项目

佳华机组缸温超限 H2(Quo-JH-H2):

里面包含历程历程项 Quo-H2,高温报警气缸总数达到或超过2个:

确定保存这个历程项目。

那么,这两个历程项目就创建完成:

只要在操作菜单里面把项目启动,这两个历程就可以正常运行了。

(6)还需要创建一个该对象的“控制码”

用于 S24(J功率设定值)的反向控制。

打开“对象管理”的“控制码”版块,里面实际上已经有一个“J功率设定值”的控制码:

查看一下详情:

正好就是 S24 这个FV的控制,所以这个控制码是可以直接使用的。但是需要在这几个对象属性中,加上这个控制码才行:

这样,这5个对象就直接可以使用这个控制码了:

(7)最后,才能去创建“任务”

也就是要编写一段任务脚本(Lua程序),这个程序要做的事情是:

1.如果出现 Quo-L4 历程,就要每1分钟调整一次(FV:S24)J功率设定值 +20KW,直到 Quo-L4 历程结束为止;
2.如果出现 Quo-H2 历程,就要每1分钟调整一次(FV:S24)J功率设定值 -10KW,直到 Quo-H2 历程结束为止。

实际上,我们只需要创建1个任务,同时对应佳华1#~5#机组。

我们把这个任务名称定为 “佳华机组 L4/H2 缸温报警 J功率调整(JP-Quo-L4-H2-JH)”:

我们选择限定运行一个,以及重启后自动运行。

(二)任务Lua脚本

任务的核心是任务的 Lua 程序脚本,下面就来看看这个任务的脚本怎么编写。

把这个 Lua 贴出来,应该是这样:

依次对这个脚本的每一部分进行说明。

(1)开始部分

2~5行,其他部分差不多是 MixIOT Lua 脚本的固定开篇写法。

7~8行,JP_max 和 JP_min,是在调节J的时候不能超过的阈值,这里作为一个常数定义。

10行,是定义了一个最新更新的一个变量,这基本上也是一个 MixIOT Lua 的标准写法。

(2)函数 run

这个部分是定义 run( ) 这个函数,也是整个任务脚本程序的关键函数。

14~18行,是第一部分,意思是要读取指定的 “1#~5#机组缸温超限历程研究对象” 的变量数据。

其中,

pub2mmq:send(json.encode({["event"] = "recv_fv",["object_id"] ="OBJ4141176000009"}))

这一部分是一个获取对象数据的标准写法,我们记住就行。只需要知道,只要写了这一行,这个对象有任何的FV变量数据的最新值,这个任务程序就保证可以获得。

21~22行,25~26行,也是接收数据:

pub2mmq:send(json.encode({["event"] = "retainer_open",["template_id"] = "RETAINER4192687500001"}))
pub2mmq:send(json.encode({["event"] = "retainer_close",["template_id"] = "RETAINER4192687500001"}))

但这个接收的是指定历程项目开始(retainer_open)和历程结束(retainer_close)的事件。这也是MixIOT Lua获取历程开始和结束信息的标准写法。一旦这样写了,指定的历程开始、结束,这个任务程序就都会知道。

28~33行,也是一个标准写法,是决定这个run( )函数什么时候停止运行。

(3)函数 handler

handler( )函数是具体操控,也就是说,我们要把对机组J功率设定多少,放到这个部分来处理。

(4)反向控制

这部分是利用定义好的控制码,对S24(J功率设定值)进行反向写操作。

(5)记录最新信息

这是对最开始定义的last_updata(上行数据)。

(6)获取结果及结尾

结尾部分,是 run( ),意思是执行之前定义过的 run( ) 函数过程。

确定保存这个任务:

我们注意到,这里有一个 “令牌”,可以理解为,这是这个任务程序在任务容器里面的一个合法身份证。任务创建好后,有这些相关的操作:

我们可以对该任务进行 “执行” 操作:

此时会提示输入一个执行参数。

也就是说,如果需要的话,我们可以输入该任务的执行参数(入口参数),这个参数到底是什么,是需要在任务脚本(Lua程序)中编写的。

在现在这个任务中,并不需要这个参数,所以,可以直接按 “确定” 执行这个任务。

成功执行后,会收到 “操作成功” 的提示,说明这个任务就进入了执行状态。

还可以通过详情查看基本信息:

除了查看基本信息,还可以查看这个任务的执行记录:

这里面有两条记录,其中一条已经是一次结束了的记录:

说明这个任务程序在某个时间段曾经运行过,并已经结束。

上面一个记录,说明这个程序再次执行:

我们可以使用该记录的操作菜单,做三件事情:

a)让这个任务停止;
b)查看 Lua 执行的情况:

这里面能看到什么,当然也需要在任务脚本里面去编写,看看有什么需要输出的。

c)当这个记录完成后,也就是这个任务程序停止运行后,可以查看这个信息:

这是这个程序运行的时候所给出的信息。

文档更新时间: 2024-07-22 16:10   作者:Mixiot