(一)创建任务
我们还是以三浦能源集团(SERG)佳华电站为例,来规划一个任务。
在 “历程管理” 应用中,我们创建了 Quo-JH 历程项目,该项目包括了 Quo-L(气缸低温报警)和 Quo-H(气缸高温报警)两个历程项。
但这个定义的历程太过宽泛,通过数据观察分析可以看到:
因此,需要增加两个历程,并在这个历程起始的时候,对机组的功率预设做控制调整:
- 增加 Quo-L4(出现低温报警的气缸总数达到或超过4个)历程;
- 增加 Quo-H2(出现高温报警的气缸总数达到或超过2个)历程。
- 如果单独出现 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)当这个记录完成后,也就是这个任务程序停止运行后,可以查看这个信息:
这是这个程序运行的时候所给出的信息。