1
PLC编程实用指南
1.6.7.3 2.7.3  Petri网法编程
2.7.3 Petri网法编程

1.Petri网诞生

Petri网是一种可以用网状图形表示的系统模型。是卡尔·亚当·佩特里(Carl Adam Petri,德国数学家、信息学家)发明的。童年时代的Petri,其父老Petri非常鼓励他在科学方面的好奇心。小Petri 12岁生日那天,老Petri为儿子买了两本很厚的图文并茂的化学教科书。小Petri一边看此书,一边画自称为“反应流程图”。如果把书里面前一章节的化学反应和下一章节的反应连起来看,可以使化学反应的链条越接越长……从几种简单物质开始……可以变成较为复杂的化合物。他用这个“反应流程图”几乎能将整本无机化学书变成一串串长长的反应链。就像图2-81所示。

而且,这种反应链可以因为加入的物质的种类不同、顺序不同,将产生千变万化的结果。

真正科学意义上的Petri网则是Petri在他的博士论文“Kommunikationmit Automat-en”(用自动机通信)中提出的。该论文用一种网状模型来描述物理进程和物理系统的组合。此模型后被称之为Petri网。作为一种系统模型,Petri网不仅可刻画系统的结构,而且可以描述系统的动态行为(如系统的状态变化等)。而且后来又经历他自己和很多人对其不断充实与完善,在深度与广度上都有很大提升,其应用也越来越广泛。而用于PLC编程只是它的众多应用的一个小小的侧面。而且,也仅仅是开始。

978-7-111-39745-8-Chapter03-171.jpg

图2-81 Petri的化学反应流程图

2.Petri网结构简介

Petri网模型由若干以下元素构成图形。这些元素是:库所(Place)、变迁(Transition)、弧(Arc)。库所用于描述系统局部状态,用小圆圈表示。变迁用于描述可使局部状态改变的事件,用短线表示。弧是有向的。用其实现库所和变迁之间的连接。但是,两个库所或两个变迁之间不允许连接。

在Petri网模型中,还有令牌(Token,也称托肯),包含在库所中,是所包含库所被激活的标志,用黑点表示。它在库所中的动态变化表示系统的不同激活状态。

Petri网模型的动态行为是由它的触发规则描述的。当使用等于1的弧的权函数时,如果一个变迁的所有输入库所,这些库所至少包含一个令牌,那么这个变迁事件就有发生权,相关联的事件可以发生。如这变迁事件发生,则将从它所有的输入库所中消耗一个令牌,而同时在它的每一个输出库所中产生一个令牌,即被激活。当使用大于1的弧的权函数时,在变迁的每一个输入库所中都要包含至少等于连接弧的权函数的令牌个数,它才有发生权。这个变迁的触发将消耗在该变迁的每一个输入库所相应令牌个数,并在变迁的每一个输出库所产生相应令牌个数。变迁的触发是一个原子操作,消耗输入库所的令牌和在输出库所产生令牌是一个不可分割的完整操作。

要指出的还有,Petri与流程图不同的还在于,前者的流程只能一步步被激活,而Petri网则可以同时有多个库所可具有托肯,即可以同时激活。所以,它不仅适用简单的顺序控制建模,更适用于平行顺序控制系统的建模。

图2-82a所示为Petri网的一个模型实例。它根据图2-78机械手工作简图,参考图2-79,遵循Petri网结构原理画出的。

该图有12个库所,13个变迁。每个弧的权函数均为1。初始状态仅P0存有令牌(标志有黑点)、被激活。系统处于待起动工作状态,等待起动按钮按下事件发生。这时如按下按钮(startON),根据上述结构原理,则t1触发。令牌从P0转移到P1,P1被激活。可执行与其相关的输出(本例即机械手处下行状态),并等待下行位置到(DownXK ON)事件发生。

在库所P1,如DownXK ON,则t2触发。令牌从P1转移到P2,P2被激活。可执行与其相关的输出(本例即机械手处下行状态),并等待下行位置到(Down XK ON)事件发生。

……

在库所P4,判断有没有抓取到零件。ClickXK ON,抓到零件,OFF没有抓到。抓到零件,t5触发,令牌转移到库所P6,P6激活。

……

直到库所P9。这时状态左行,并等待左行到(LeftXK ON)。如到回到初始库所P0,P0激活。

在库所P4,判断有没有抓取到零件。如ClickXK OFF,没有抓到,t10触发,令牌转移到库所P10,P10激活。报警,并起动定时功能块。定时时间到t02触发,令牌转回到P0,P0激活。系统回到原始状态。

除了上述简单的文字表述,Petri网还有严格的数学定义。而且除了可用图形表示,还可用数学表达式表示。复杂的Petri更是这样。此外还有很多有关特性的论证等。这些较深入的问题读者可参阅有关专著。

3.Petri网在PLC编程中的应用

(1)用于单资源单用户系统顺序控制编程。其设计步骤如下:

1)按照规定的工作顺序,仿照流程图方法设计出基本Petri网。图2-82a就是这么设计成的。

978-7-111-39745-8-Chapter03-172.jpg

图2-82 机械手工作Petri网模型与SFC程序

2)分配输入输出地址。以图2-82为例,其库所(输出)用变量定义代表。此地址可以PLC AT(实际地址)关联,也可不关联。如后者则实际运行时还要编写输出转换程序。具体地址有:

Down(下降)——ON,下降;OFF,下降停止。

Up(上升)——上升;OFF,上升停止。

Clip(判断夹到零件紧否)——是用弹簧实现的。弹簧松开,机械手松工件;OFF弹簧夹紧工件。

Right(右行)——ON右行;OFF,右行停止。

Left(左行)——ON左行;OFF,左行停止。

Hold(夹紧零件)——是用弹簧实现的。弹簧松开,机械手松工件;OFF弹簧夹紧工件。

本例的转移(输入)分配如下:

下限位开关——DownXK ON,达下位;OFF已离开下位。

上限位开关——UpXK,达上位;OFF已离开上位。

有工件——ClipXK ON,有工件夹住;OFF,无工件。

右限位——RightXK ON,达右位;OFF,已离右位。

松开夹头(Hold),ON夹住,OFF松开。

左限位——LeftXK ON,达左位;OFF,离左位。

起动——start ON起动。

3)列写变量间的逻辑关系。用的是文本结构语言。转移的逻辑表达式如图2-82所示。如t1:=start;……输出与库所的逻辑关系也见图2-82。如Down:=P0;……

4)选择编程语言编程。本例用SFC语言。因为它的就是从Petri网引申而来。用起来很方便。具体用和利时(ABB也可)PLC,程序如图2-82b所示。所用变量声明如下:

978-7-111-39745-8-Chapter03-173.jpg

978-7-111-39745-8-Chapter03-174.jpg

这里各个步要执行的程序选用st语言,分别为

978-7-111-39745-8-Chapter03-175.jpg

(2)用于多资源单用户系统编程。这里的问题是如何使所有资源能得以合理的使用。以供水系统为例,如有两个水泵向系统供水,正常情况多是一个泵工作,另一个备用。水压不足时备用也可同时参与供水。为了两个泵的负荷均等,最好两泵能定时交换角色。图2-83a所示就是为此而设计的Petri网模型。

图2-83设计有5个库所,7个变迁。5个库所分别代表系统可能的5种工作状态。P0等待工作,P1泵1工作,P2泵2工作,P12泵1先工作,泵2也接着工作,P21泵2先工作,泵1也接着工作。7个变迁含义见后。每个弧的权函数也均为1。

978-7-111-39745-8-Chapter03-176.jpg

图2-83 两泵均荷工作Petri网模型机SFC程序

初始状态仅P0存有令牌(标志右黑点)、被激活。系统处于待起动工作状态,等待起动按钮按下事件发生。

这时如按下按钮(start ON),根据上述结构原理,则t1触发。令牌从P0转移到P1,P1被激活,可执行与其相关的输出(本例为泵1工作,并起动定时功能块TON1),并等待可能的两个事件之一发生。这两个事件一是泵1工作时间到(TON1.Q ON),另一是供水压力不足(PDown ON)。

如为前者发生,则库所P1令牌转移到P2,P2激活,可执行与其相关的输出(本例为泵2工作,并起动定时功能块TON2)。即这时,泵2供水,泵1停工。

如为后者发生,则库所P1令牌转移到P12,P12激活,可执行与其相关的输出(本例为泵1、2同时工作)。

在库所P2,也是等待可能的两个事件之一发生。这两个事件一是泵2工作时间到(TON1.QON),另一是供水压力不足(PDown ON)。前者将供水工作交给泵1。后者则启动泵1也参与供水。

在库所P12、P21则都是等待一个事件发生。这事件是压力高(PHight ON)。如此事件发生,如库所P12激活,则令牌转移到P2,轮为P2工作。而库所P21激活,则令牌转移到P1,轮为P2工作。

当然任何时候按下停止按钮(Stop ON),则系统回到P0,即原始状态。不过此转移该图未示出。

从上述对Petri网面向的设计可知,它是能够是两泵的负荷可基本均衡。

图2-83b为它的SFC程序。其所用变量定义如下:

978-7-111-39745-8-Chapter03-177.jpg

这里各个步要执行的程序选用st语言,分别为

978-7-111-39745-8-Chapter03-178.jpg

(3)用于单资源多用户系统编程。电梯算是单资源多用户系统一个简单实例。当不同用户同时调用电梯就存在争用的问题。只是这里用户使用权的争抢,可以通过适当排队及等待解决。所以,还算比较简单。图2-84a所示为它的Petri网模型。

978-7-111-39745-8-Chapter03-179.jpg

图2-84 电梯控制Petri网模型

从图2-84可知,这里共设计有6个库所、12变迁及其相应的连接弧。每个弧的权函数均为1。库所P0为系统的初始状态。存有一个令牌。只要系统起动(一般为起动按钮start ON),可使变迁t1触发,令牌将从P0转移到P1,P1被激活。可执行与其相关的输出,并等待触发t11或t21事件发生。

本例库所P1用以等待电梯的控制命令,即要检测与计算有多少用户要上行,有多少用户要下行。如检测与计算的结果,上行的用户多,则使t11触发。令牌将转移到P11。反之,则使t21触发,令牌转移到P21。而如果没有任何用户调用,则什么事件也不发生,电梯处于等待工作状态。

如令牌进入P11,则P11激活。将执行电梯上升指令,电梯进入上升状态,并等待上升用户中,离电梯所在楼层最近的楼层的到位行程开关ON事件发生。而此事件一旦发生,转移t1e触发。令牌从P11转移到P1e,P1e被激活。使电梯停车及执行开、关轿厢门等动作,并等待可能使转移t11或t21或t1触发的事件发生。如触发t11的事件发生,则令牌回到P11,继续进入上升状态。如触发t21的事件发生,则令牌转移到P21,电梯将下降。如触发t1的事件发生,则令牌回到P1,继续系统又进入等待状态。

如令牌进入P21,则P21激活。将执行电梯下降指令,电梯进入下降状态,并等待下降用户中,离电梯所在楼层最近的楼层的到位行程开关ON事件发生。而此事件一旦发生,转移t2e触发。令牌从P21转移到P2e,P2e被激活。使电梯停车及执行开、关轿厢门等动作,并等待可能使转移t21或t11或t1触发的事件发生……

在所有库所如遇有按钮stop按下事件发生,系统将回到库所P0,即回到原始状态。不过此转移及相关的连接弧未在该图示出。

实现本模型的SFC程序如图2-84b所示。该图各个库所的具体程序要涉及很多有关电梯工作控制的细节,不便具体说明。这里略。

(4)用于其他单资源多用户系统及多资源多用户系统控制的PLC编程。在柔性制造系统中,有多台加工中心共用一个机械手与传输线,也是单资源多用户。但它的多用户还各有自身的顺序工作,对机械手与传输线的占用只是各个加工中心工作流程的一部分。再就是多层多电梯控制系统,情况也复杂。这些系统的就不只一个令牌在库所间转移了。Petri图画起来也很不易。估计还得求救于数学表达了……这些较深入的问题,很多还有待研究,有的控制也不是仅仅使用一台PLC所能完成的。这里也不再进一步讨论了。

4.Petri网在PLC编程中注意问题

(1)确定好库所、变迁及相关连接弧。这是使用Petri网对控制系统建模首先要处理的问题。库所主要根据系统可能的局部状态确定。变迁则根据引起局部状态改变的事件确定。同时,还要根据输入输出关系,确定库所与变迁机变迁之间的连接弧。当然,初始状态的令牌也要确定好。完成上述几步就可以画出具体的Petri网模型了。这里的关键是,要分析好系统,“确定”要恰当,库所不能太细,那样图将非常复杂,但也不能太粗,那样编程程序实现也不容易。另外,有的系统库所与转移还不便划分。有时两者可能都可用。这时,更要仔细斟酌。可从多个方案中优选一个。

再就是,系统很复杂,库所、转移很多,连接弧的又很复杂。那样,可能很难用图形表达了。这时可借用数学表达式定义网。这也是其他图形方法编程所不具备的优势。

(2)所设计的模型还要做检查。看看是否所有库所都有被激活的机会,即所谓“可达性”检查。如Petri模型存在不可达的库所,当然是不可取的。此外,还可检查是否有“冲突”,以至于出现死锁,这在多个令牌在网中出现时很可能出现的情况。尽管简单地看,所有库所都可达,但个别情况出现时,可能系统“卡住”了。令牌转移不了了。这当然也是要避免的……

对Petri网特性的检查也可使用数学方法。这比单纯通过图形检查可能更全面与简便。

(3)Petri网模型检查通过后就是选择编程语言。建议使用SFC语言。它本身就是Petri网模型的延伸,实现Petri模型是很方便的。此外,还有I/O地址分配,变量的声明与使用等,都是PLC编程所需解决的问题。自然也要一一处理好。

目前,使用Petri模型编程随只是开始,但发展很快。国外甚至已有用于检查Petri网模型特性及转换为PLC程序软件。有的还可从互联网上下载。