(一)规划调度系统

还是以佳华瓦斯电站为例,来介绍 “调度控制” 应用的使用方法。首先,需要对调度系统进行规划,也就是要明确调度需求是什么。

(1)明确调度场景和需求

佳华瓦斯电站是以从煤矿矿井直接抽采的瓦斯为燃气的电站,前面应用讲解的案例中反复介绍过,直接抽采的瓦斯气体的压力、浓度都非常不稳定。

下面这张图,就是佳华瓦斯电站的整体示意图。

从这个图可以看到,从煤矿矿井直接抽采的瓦斯燃气,有时候多,有时候少。燃气充足的时候,不仅可以让整个电站的5台发电机组全开,而且可以把每台机组的发电功率开得大;而燃气不足的时候,不仅无法满足发电机组全开的燃气需求,而且机组的发电功率也不能很高。

燃气的供应和分配,也可以用一张图来表示:

对电站而言,最需要解决的问题,就是如何根据瓦斯燃气的工况条件,来决定机组开还是不开,以及如果开,能开多大(额定功率范围)。这就是我们的调度需求。

这其实就是非常典型的 “动态配载” 的调度案例,也就是说,根据 “动态” 的变化,提出最优的 “配载” 方案。

(2)确定统计量

确定了调度的需求,接下来就要确定调度的依据。前面介绍过,这是一个非常典型的 “动态配载” 调度案例。那么就需要找到什么是 “动态”,要 “配载” 什么,依据什么去配载。这些都是需要确定的内容。

“调度控制” 应用需要确定的这些内容就是调度的依据。这些东西,就是统计量。一定要记住,“调度控制” 这个应用最大的特点、最大的需求、最重要的地方,就是统计。

瓦斯燃气工况条件的衡量,可以用 “燃气当量” 这个指标。这在 “统计计算” 应用中讲解过,这是泵站干管的供气情况,可以准确的反映当前瓦斯燃气的条件。

之前在 “统计计算” 中,有过 2个统计项目,一个是电站每小时燃气当量的统计项目,另一个是各机组每小时发电量统计。

这两个统计非常有指标性意义,它说明了两个事情:一个是每小时的燃气当量是多少;另一个是在这个燃气(当量)条件下,每台机组每小时的发电量是多少。

需要注意的是,这个燃气当量是整个电站的,那怎么来量化每台机组燃气消耗量在其中所占的比例呢?这也需要用到当量的方法。

机组的燃气当量统计,我们并没有在 “统计计算” 应用里面找到,也就是说在“统计计算”应用里面,之前只有电站的燃气当量统计项目,而没有机组的燃气当量的统计和计算。所以,这些就只能在项目内来计算。

看一下机组对象的变量(FV):

机组的燃气当量可以这样来计算:

QM=(主燃气阀开度+辅燃气阀开度)×一体阀开度×Sqrt(燃气压力+增压压力)×燃气浓度给定值,

也就是:

那么,在某个 [T] 时段里面,每台机组燃气总当量为:

用 R1、R2、…、R5来表示每台机组的燃气当量比例,那么:

那我们就可以大概知道,每台机组大概占用的燃气(当量)比例是多少,这也是非常重要的一个调度依据。

(3)是否使用已有统计量

有了需要的统计量,剩下的就是调度规划了。虽然我们已经有整个电站的燃气当量统计,但这个统计是每小时统计一次。如果调度项目的计算周期不是一个小时,而是 [T] 周期,那就还需要 [T] 时段整个电站燃气当量。

当然,我们可以用统计量的比例来粗略计算,比如 T=10 分钟,那么,当期这个计算周期的燃气当量可以用上一个统计周期的(1小时)的统计结果除以6,这个结果是近似当前最近 10分钟的燃气当量。

除了这个方式,最精确的方法就是重新计算,可以参考 “统计计算” 应用里面的计算公式:

那么,T 时段电站燃气当量(QE)就是 qE T时段的数值积分:

也就是说,在使用 “调度控制” 的时候,如果调度计算的周期是确定的,最好的方式就是预先在 “统计计算” 应用中,把调度计算需要的统计量项目预先创建好。如果不确定调度计算的周期,也可以在调度项目中进行所需要统计量的计算。

(4)调度依据

任何调度控制项目,都需要明确调度依据。所谓调度依据,就是调度的规则或者原则。

这个瓦斯电站调度项目的原则很清晰,就是依据上一个[T]时段整个电站的燃气当量来决定下一个 [T] 时段电站设备运行的调度规则,也就是:停几台?开几台?开的几台功率分别是多少?

假设,我们有一个这样的规则,这个规则暂且可以认为是电站工作人员的经验总结:

上面这个表(规则),虽然可以作为规则,但这是一个范围。

我们之所以这样来设计这个案例,就是因为这是最普遍、最可能发生的情况。很多调度规则,都是一个范围,这就需要在调度的时候,灵活掌握这个其间的尺度。

我们可以利用 “调度控制” 应用的特点,也就是把调度规则(调度依据)以调度系统的常数参数和可调控参数的方式体现,这在后面在创建调度系统(项目)的时候会有详细的讲解。

(5)构造调度对象

有了前面的准备,就可以来构造调度对象了。把需要的这些FV变量,凑成一个对象,这个对象就是我们的调度对象。构造调度对象,是 “调度控制”应用的非常关键的一步。

这里需要了解 “调度控制” 的使用规则:每个调度项目(调度系统)只能包括一个调度对象。通常,调度对象都需要重新构建。

要构造调度对象,就要看一下一共涉及到哪些参数:

从前面计算燃气当量的计算公式可以知道,我们需要每台机组的 S01(一体阀开度)、S02(主燃气阀开度)、S03(辅燃气阀开度)、S23(燃气浓度给定值)、S25(燃气压力) 和 S28(增压压力),还有机组的 S24(J功率预设)和 S29(有功功率)。

除此以外,我们还需要整个电站的变量,FP(干管前端压力)、EP(干管后端压力)和 GD(燃气甲烷含量)。

有了这些,就很清楚哪些参数是需要用来计算的,哪些是用来控制的。

为了与机组对象和电站对象的区别,也为了容易编写调度程序,我们需要把这些变量的命名调整一下:

机组的用 X1#X2#X3#X4#X5#,分别代表 1#、2#、3#、4# 和 5# 机组的变量;

电站的用 Y1Y2Y3 来创建这个调度对象的映射表:

需要注意的是,上面的 “双斜杠” 只是为了更加容易理解映射表脚本而特别写出来的注释行。但在 “对象管理” 应用中实际创建映射表的时候,这是不能出现的,否则会报错。

现在回到 “对象管理” 去创建调度对象的映射表:

保存后,可以在 “对象管理” 映射表视图列表看到这个映射表。

有了映射表,就需要来创建调度对象:

保存后,可以在对象的视图列表上看到这个对象:

(二)创建调度系统

有了前面的各项准备,就可以创建调度系统了。我们按顺序一步一步进行调度系统的创建:

(1)基本属性:

跟其他 MixIOT 应用项目一样,调度项目的基本属性包括项目名称、别名,还有调度对象。

前面的章节中介绍过,每个调度项目(系统)只能有一个对象。在这个项目中,就是我们专门创建的 “佳华调度对象”。

(2)D&C 面板

调度项目通常是需要有人盯着看的,我们可以为调度系统设计一个显示板,来显示调度 系统的调度对象当前是什么状态。
可以这样来设计这个调度系统的显示板:

这个显示板用非常直观的方法,让整个调度系统(调度对象)的状态一览无余,不仅有总体,还有细节。
我们在“显示板管理”创建这个显示板:

这样就可以在D&C面板中选择这个显示板:

(3)常数参数

调度项目中,可以设定一些常数参数。

一般来说,常数参数都是跟调度有关的而且需要独立出来的数据。常数参数配置后,在项目启动后,是不能修改的。如果要修改,需要停止调度系统运行,再通过项目编辑方式修改。

我们要设置为常数参数的是:

为了简化常数参数,可以用列表方式:

这些都是经验值,也许过一段时间,煤矿瓦斯工况条件改变的话,就可能需要改变,但并不会经常改变。

(4)可调控参数

常数参数是在调度项目运行过程中,不能改变的参数。如果需要改变参数,需要停止调度项目的运行去修改,然后再启动调度项目 。

在调度项目中,有些参数可能需要经常根据实际情况来调整,而且这些调整都是在调度项目运行过程中随时可能发生的。那么,就可以把这些参数配置为可调控参数。

规划好、选择好和使用好可调控参数,在调度系统中非常重要。选择可调控参数的方式有很多,不同的调度系统和调度需求的选择也都不尽相同,选择的依据自然就是调度系统的需求。

在瓦斯电站调度系统中,我们选择两个参数作为可调控参数,即 Level 的 “范围中间度”,一个是开机台数(范围)的中间度,另一个是 J 功率设置(范围)的中间度。

“范围中间度” 有时候也称为 “范围左右度”,用 MR(Middle Rate)表示,这是一类最常见最常用的调度系统调控参数,其含义很简单,即我们的选择在这个可选择范围中的居中程度。

首先,要看一下我们可以选择的范围,这个范围就是“常数参数”列的那些。

为了简化,不管哪一个 Level,开机机组数量我们使用同一个 “范围中间度”,记为 MMR,而机组 J功率设定范围也使用同一个范围中间度,记为 JMR。

范围中间度一般取值范围是 “-1~+1” 之间的数字,MR=0 的时候,决策值为 (min+max)2\frac{(min+max)}{2},也就是可选范围的居中值。

如果可选值范围为 [Vmin,Vmax]\left[ {V}{min},{V}{max} \right],中间度为 MR,依据中间度计算的值叫 “决策值”,记为 V ,它的计算公式为:

这是初中几何都能推导出来的结果:

通过中间度MR来计算决策值V的时候,我们经常会遇到这样的问题,就是这个V是一个 “刻度值”,也就是说 VminV_{min}VmaxV_{max} 之间,可以最终选择的并不是一个任意连续的值,而是一个等分刻度。

那么,计算出来的V,最终就是离自己最近的刻度值。

在 “调度控制” 应用中,中间度可以有两个不同类型,一个是单值,就是给定一个数字,也可以是一个列表。在这个例子里面,两个可调控参数,MMR 和 JMR 都是单值。

对决策值只能是整数(MMR),或者 10 倍数(JMR)的情况,我们通过 MMR 或 JMR 计算决策值 V 的时候,就是看看算出来 V 接近可选范围的哪一个,就用哪一个。如果是绝对居中,就按 “左规则” 来选择,就是 VminV_{min}

看一下这个结果,如果确定了 MMR 和 JMR,那么这个调度,实际上就是根据 GAS 落在哪一个 Level,根据 MMR 去选择开机多少台,根据 JMR 去计算J功率要设定到多少。

这个调度逻辑大致就是这样,我们也可以很直观地通过这个表知道。

(5)调度程序

每个调度控制系统(项目)的调度逻辑和调度过程,都是需要通过这个调度项目的调度程序来实现的。

在 “调度控制” 应用中,每个调度控制项目至少要有一个调度程序,如果需要也可以有多个调度程序。

调度程序是 MixIOT Lua,有一个专门的使用手册来介绍,可以供使用者参考。

MixIOT Lua 是标准 Lua 语言的一个扩展,MixIOT 有一个 MixIOT Lua 内置了 MixIOT 体系的很多东西,可以在 Lua程序中,直接访问(使用)MixIOT应用的项目结果,也可以通过控制码功能对所有对象进行反向控制。

在 “调度控制” 应用中,MixIOT Lua 也可以读取本调度项目的常数参数和可调控参数,这些都有规范的使用方法。

除了对 MixIOT 体系中不同应用数据的读取访问外, MixIOT Lua 还可以使用 MixIOT Lua 的数学计算函数。随着调度模型的不断丰富,MixIOT 可以直接调用 MixIOT 的调度模型,只需要把相关的参数传导进去,就可以直接使用调度模型返回的计算结果。虽然目前的调度程序只能选择 Lua,但未来可以使用更多的脚本语言,不排除可能是 Python、Julia 等等。

每个调度程序,都需要有一个唯一的程序名。如果同一个调度项目中使用了多个调度程 序,就可以实现不同调度程序之间的相互访问,这样就实现了多个调度程序的协同工作。

在这个项目中,只需要一个调度程序。这个调度程序的范例后面会写出来供大家参考。

在这里清晰梳理一下这个调度逻辑:

  • 读取项目参数,比如调度对象编号、调度对象参数、调度周期,还有常数参数、可调控参数;
  • 根据调度周期,去循环计算,输出结果。调度周期的意思,就是根据上一个周期的数据,计算出结果,当做下一个周期的控制值;也就是说,在“调度控制”应用中,调度周期一般不会作为调度项目的属性,我们可以把调度周期作为一个可调控参数来处理。
  • 计算整个电站燃气当量:

  • 计算每台机组的燃气当量:

  • 计算每台机组的当量比例:

  • 计算后,根据规则:

算出开机机组数量,以及J分配。

  • 反向控制,完成本周期调度

Lua 调度程序示范如下:

Lua 调度程序示范如下:

程序开始:

这部分的含义是定义服务端口,以及服务访问的用户名密码。

定义调度对象变量

main_fv就是我们定义的调度对象的变量列表;

constant_parameter和adjust_parameter是通过param[ ]函数来获取这个调度项目的常数参数和可调控参数。

确定调度周期,启动循环计算

这个部分是决定调度程序的启动周期。

计算QE、MQ、R

这一段是计算燃气当量,看看落到哪一个Level。

计算总开机台数和总J功率

根据总开机台数和总J功率,分配机组启停以及启动机组的J功率预设

获取调度对象函数

反向控制函数

消息函数

访问鉴权

基本函数,时间戳,运行日志

(三)使用调度项目

配置好调度项目的各项内容,完善调度程序后,就可以保存这个调度项目。保存后的调度项目可以在调度项目的视图列表上看到:

我们可以通过操作菜单来操作这个调度项目 。

调度项目视图列表提供的操作菜单,提供了相关操作:

  • 查看详情。
  • 编辑项目。如果项目是运行状态,则需要先把该调度项目停止,才能进行编辑。
  • 删除项目。如果项目是运行状态,也需要先停止调度项目运行,才能删除。
  • 启动、停止项目。启动项目,意味着该调度项目中所有的调度程序都同时运行;停止项目则该调度项目所有的调度程序都会停止运行。
  • D&C 调节提供了一个该调度项目可调控参数的调整交互,在这里不需要停止项目运行,就可以直接修改可调控参数,调整后,这个参数会在下一个调度周期的计算中生效。
  • D&C 程序控制可以对该项目的某个调度程序进行重载,但不能控制单个调度程序的运行状态。

(1)调度项目详情

我们可以查看一下这个调度项目的详情:

详情包括该调度项目的基本设置信息,这些都是在创建项目的时候编辑的属性。这些属性包括项目编号、项目名称/别名以及相关备注。

在详情中,该项目的参数也可以看到,包括常数参数和可调控参数:

注意可调控参数,初始值是我们设定的值。在调度过程中,可能需要随时经常调整可调控参数的值,这里的“当前值”,是当前实际调整后的参数值。

另外可以看到,我们把一个很重要的参数“调度周期(DCycle)”也放到可调控参数里面。我们可以根据实际情况,随时调整调度周期。

详情中,可以看到这个调度项目的所有调度程序:

这里可以看到调度程序的实际运行状态。

调度程序的运行状态也是我们需要关心的,如果调度程序状态是停止运行,则不会输出调度结果。

详情中的 D&C 面板,给我们提供了该调度项目的整体展示:

这个画面,是我们重要查看的画面,除了该调度项目(调度对象)的整体状况,还可以在这个地方,对可调控参数进行调整。

详情中的日志,是该调度项目的运行情况:

(2)可调控参数修改

前面说过,调度项目在调度过程中,经常需要对一些调度参数修改。这些参数在设置的 时候,可以设置成调度项目的可调控参数。修改可调控参数的过程,叫 D&C 调节。

我们可以直接在调度项目的操作菜单上,直接进行 D&C 调节:

在 D&C 调节交互界面上,我们看到的参数值,是当前的值。可以直接对这些参数值进行修改,修改完成后,按 “确定”。

按下 “确定” 后,这个参数值就会在下一个调度周期中生效,这个调节无需把项目停止后重新启动。这是因为 “调度控制” 应用中,对可调控参数有一个 “热加载” 机制。

(3)D&C程序控制

在调度项目列表的操作菜单上,打开 D&C 程序控制项:

这个调度程序的控制,可以对本调度项目的调度程序进行加载操作。

这个地方需要做一些解释。

一个调度项目的调度程序,是运行在这个调度项目内的调度程序运行容器里面的,简单地说,调度程序是运行在一个封闭的独立容器里面,这样做的目的是为了安全。

如果调度程序的编写不是十分完美,一旦程序运行出现什么问题,就会导致一些不良后果,但这些不良后果也都只会影响本容器里面的程序,而不会外溢这些影响。

我们要知道,调度程序写完,是没有办法在“调度控制”外部去测试和验证的,程序的测试只能是在本调度项目里面,一旦调度程序写的有问题,MixIOT系统会强制停止调度程序的运行,这也是“调度控制”应用自己的一个保护措施。

如果需要重新去加载调度程序,就需要在“D&C程序控制”里面,对调度程序重新加载。

文档更新时间: 2024-08-06 21:25   作者:Mixiot