工业互联网核心引擎原理与实现——调度与控制(D&C)
【摘要】:
D&C(调度和控制)实际上是两个东西,一个是调度,一个是控制。所谓调度,就是根据数据去计算,得出一个最佳的调度方案;控制就是把方案转换成对对象(设备)的参数量化的调整指令,再利用MixIOT的反向控制机制,把这些控制指令下发下去。
D&C(Dispatch&Control),即调度与控制,是MixIOT体系中非常重要的组件,也是应用起来最复杂、解释起来最麻烦的一个组件。
D&C(调度和控制)实际上是两个东西,一个是调度,一个是控制。所谓调度,就是根据数据去计算,得出一个最佳的调度方案;控制就是把方案转换成对对象(设备)的参数量化的调整指令,再利用MixIOT的反向控制机制,把这些控制指令下发下去。
我们需要举两个例子来说明D&C。先看第一个例子。

▲化工厂的工业过程示意图
假设这是一个化工厂的工艺过程,物料从管道,经过1#机泵进入一个反应釜,再从这个反应釜里面出来,经过2#机泵进入到第二个反应釜。完成反应后,从第二个反应釜出来,由3#机泵把这些经过反应的物料拿走。
这上面有红点标注的地方,都是一些相关的传感器和参数,什么物料的温度、黏度、含水量、流量、压力,反应釜的温度、压力、液位高度,还有就是机泵的参数,电机的转速、频率、功率、电流、电压等,以及最终出来的产品的化学成分、温度等。
面对这么一个场景,我们可以利用MixIOT做如下事情:
●监控机泵,1#,2#,3#;
●监控反应釜A,B;
●监控整个工艺过程物料状态,温度、含水量、粘度、组分;
●监控每一段输送管道的温度、压力;
●计算每台机泵的偏态估计值和增量估计值;
●计算两个反应釜的偏态估计值和增量估计值;
●对整个工艺装置进行在线诊断;
●计算两个反应釜的运行平衡;
●计算反应釜A-B的运行匹配;
……
这些都是MixIOT里面的内容,后面我们将陆续介绍。假设我们把这些事情都做得很完美了,该计算的也计算了,结果也出来了,但我们发现,A-B两个反应釜之间的匹配情况不是很好,要么就进料多了,要么就进料少了,这样就导致化学反应的不充分,进而影响产品质量。
无论我们如何计算处理,最后能调整的就是三个机泵的启停(开关)和三个机泵的频率。这个频率就是让这个机泵转得快还是转得慢,频率越高,机泵在单位时间内泵出来的物料就越多。
我们怎么用D&C来做这件事呢?
(1)创建D&C项目,做一些基本的配置,类似名称描述等;
(2)在这个D&C项目中,设置每10min为一个计算周期;
(3)每10min D&C都会输出一个调度方案,相应的结果就在D&C结果数据库里面,是这个样子的:
….
10:10调度方案K1=1,K2=1,K3=1,F1=48,F2=45,F3=50
10:15调度方案K1=1,K2=1,K3=1,F1=50,F2=42,F3=43
10:20调度方案K1=1,K2=0,K3=1,F1=48,F2=0,F3=50
10:25调度方案K1=1,K2=1,K3=1,F1=48,F2=50,F3=47
10:30调度方案K1=0,K2=1,K3=1,F1=0,F2=45,F3=44
….
(4)把调度方案变成反向控制,发给适配器,让适配器把这些指令发给设备的控制器。这是一个MixIOT D&C用在“流程工业”中调度的例子,当然我们忽略了中间的计算环节。

▲长图汽车站的候车厅示意图
这是一个长途汽车站的候车大厅,人进人出。1-4#是发车口,对应前往4个不同目的地的车次,走不同的路线,票价和发车时间也不一样;A、B两个口是到达旅客的入口,车辆到达的时间也不同。假设在4个发车口排队的旅客人数、2个到达口的到达车辆和到达旅客人数以及进出大厅的人数都有实时的数据记录。同时,大厅所能容纳的人数有一个上限。车站里的车辆的总数是确定的,每一辆车能承载的旅客数量也有一个上限,这些车辆可以被安排去任何一个发车口,去相应的目的地。
那么,我们需要怎么去安排车辆发车调度,才能保证最大运力和最佳经济效益,而且不让候车室内人满为患,还要让旅客等候的时间最短呢?
假设我们使用D&C,通过已知的数据来做各种计算,按每15 min为一个计算周期,最后输出的结果是这样的:(E代表发车出口,=1为发车)
….
10:00调度方案E1=0,E2=0,E3=0,E4=1
10:15调度方案E1=0,E2=0,E3=0,E4=0
10:30调度方案E1=0,E2=1,E3=0,E4=0
10:45调度方案E1=0,E2=0,E3=1,E4=0
11:00调度方案E1=1,E2=0,E3=0,E4=0
….
这个结果就是一个调度,把这个结果通知到车辆驾驶员和发车口的检票员,就是控制。
在前面两个例子中,一个是“连续”的,一个是“离散”的。如果我们用MixIOT D&C来进行它们的调度,首先就是要给某些设立一个“目标”,围绕这个目标,周期性给出调度方案,让当前的状态不断接近(或达到)这个目标,并把状态稳定在最接近这个目标。这个其实就是D&C要做的事情,或者说这是D&C的定义。
D&C的周期性输出一定是一个调度方案。换句话说,调度方案是D&C的一个计算结果。那么,要能使用D&C来进行计算,就需要有各种数据为基础。一般来说,数据越丰富、越精确,调度方案的质量就会越好。
D&C的管理:
D&C在MixIOT中的组织方式是D&C工程(也叫D&C项目),是在MixIOT Admin里面来管理的。这是一个标准的MixIOT命题管理方式。
一个D&C系统中,可以有多个D&C工程,每个工程都是相互独立,各自运行,互不影响。一个D&C工程里面,涉及两个内容,分别是“单元”和“流程”。

▲D&C项目管理界面图
所谓单元,就是我们定义好的“对象”(这个我们始终都不能忘记,MixIOT的基本单位就是对象),一个对象或者多个对象;而“流程”是数据在“单元”之间的流动顺序和过程,如图下图所示。

▲流动顺序和过程示意图
在前面这个例子里面,假设我们定义了5个对象,分别是三个机泵和两个反应釜。而我们把1#机泵和A反应釜作为单元1;2#机泵和B反应釜作为单元2;3#机泵作为单元3。那么,这个项目中,就需要在列表中把这三个单元都列出来。

▲化工厂工艺调度界面图
我们这样定义了单元之后,就可以看到,物料的流动变成了一个线性的过程,单元1—>单元2—>单元3,便于我们计算。
我们在定义单元的时候,往往是根据实际的情况来确定。像这个例子中的定义,意思就是说,单元1是进行“一次反应”,进来这个单元之前的,一定是“一次反应”之前的,从这个单元里面出来的,一定是“一次反应”完成之后的。单元2也是一样。那么,单元3呢?进去之前还不是最终结果产品,而出来之后就是最终产品。单元也一样需要编写模板脚本和数据处理脚本,就不在这里具体说了。
D&C除了前面介绍的单元和流程,还有三个东西,分别是引擎、模型和模型库。

▲D&C单元的工艺流程
D&C需要计算,计算需要相关对象的数据。而这些数据,就是通过D&C引擎,从MixIOT系统中把数据拿到D&C系统里面来的。
MixIOT提供了标准方式的引擎和接口方式的引擎。在实际使用中,我们也可以自己去编写自己的引擎,部署到MixIOT系统中去并直接使用。但是,无论我们怎么选择引擎,还是需要写一段脚本,这是出于跟引擎对接的需要。就好像我们造汽车一样,发动机我们可以用别人的,但是我们总需要按照发动机的要求,去对接油路电路、传动变速箱位置等等。脚本就是这个作用。

▲D&C引擎脚本
MixIOT体系还提供了一些调度计算的模型供用户选择使用,并且会不断完善。而模型库,就是存放这些模型的地方。如果模型库里面没有满足我们需要的模型,我们也可以自己设计模型,放到模型库中。

▲D&C模型库中的工艺平衡模型示例
干涉型控制:
D&C的主要目的,是针对某个目标拿出一个控制(调整)策略,然后把这个策略转换成一个控制指令。
D&C对设备控制器而言,就是一股“外部势力”,我们把它叫作“干涉型”的控制。也就是说,D&C不提供调度控制策略的时候,工业系统该还是维持原来的控制逻辑,该干什么还是干什么;D&C只管输出调度方案和对应的控制指令,而最终是否采纳控制指令,还是由设备控制器自己决定。
那么,如果设备控制器对D&C的控制指令熟视无睹,不予理会,又会怎么样呢?这就又要回到这个D&C策略最后会落脚到什么样的控制。
对于设备控制器而言,反向控制很显然就是一个“外部势力”,控制器自己干得好好的,现在来了一个反向控制指令,会不会干扰到设备控制器自己的运行呢?答案是不会的。因为反向控制的范围仅仅是“控制参数调节”,而没有办法去改变“控制逻辑”。

