基于执行器冲突预防的平行Petri网控制系统设计
2024-03-13林鑫杰罗继亮李旭航叶剑虹
林鑫杰,罗继亮+,李旭航,叶剑虹
(1.华侨大学 信息科学与工程学院,福建 厦门 361021;2.福建省电机控制与系统优化调度工程技术研究中心,福建 厦门 361021;3.华侨大学 计算机科学与技术学院,福建 厦门 361021)
0 引言
随着物联网的发展,大量设备集成到制造系统,市场需求推动制造业正在向客制化、小批量、多品种转型。设备数量增加使得系统状态数呈指数型增长,控制系统建模和程序设计面临极大困难,系统状态数剧增导致所设计系统的可靠性难以验证[1]。
平行系统[2]为信息物理系统提供了可行的解决方案。王拥军等[3]提出集智能管理、智能运营和智能诊疗为一体的平行医院解决方案,并以天坛医院为案例,验证了该信息物理系统的可行性与科学性。Petri网描述制造系统程序设计中的顺序、选择、循环结构,可作为制造系统信息层建模工具[4]。然而要执行工序逻辑控制,Petri网缺少输入输出接口,文献李大成等[5]提出平行Petri网,通过动作函数和激活函数,使Petri网能够与物理层实现交互,控制实际系统运行。
控制系统设计需要进行测试验证来保证其安全性。在丹佛国际机场事件[6]中,软件错误导致大量航班延误,从而造成巨大的经济损失。DRABOV等[7]研究软件错误检测控制指令,用于车载计算机编程;ZHANG等[8]对美国医疗设备UI软件错误进行了研究和分类;徐颖蕾等[9]对没有冲突结构的Petri网的结构活性进行分析判断,为部分Petri网模型的结构活性判断提供了可行的方法;徐晓明等[10]通过有色Petri网建立多Agent协同工作模型,验证了分布式控制策略的可行性;CAL等[11]提出基于不同Agent的控制体系结构,给出初步灵活控制的多智能体系统架构;赖李媛君等[12]提出分布式任务分配方法,用于解决动态多Agent的调度问题;SINGHAL等[13]和KIM等[14]研究多Agent系统中Agent之间的任务分配问题,主要目标是最大程度地增加成功完成的任务数量和整个系统的实用性,而不会发生任何冲突。
通过上述研究可知,Petri网控制理论具有丰富的研究基础,但无论Petri网调度优化还是Petri网控制,都需要投入大量人力和时间成本重新开发控制代码。本文希望给出既能进行优化调度,又能完成现场控制的新型Petri网模型。李大成等[15]为平行Petri网引入动作执行时间,实现了调度和控制一体化,然而动作函数无法描述复杂的连续动态系统,动作函数之间可能会争夺对执行机构的使用权限,如果解决不当可能会造成严重的事故。针对以上问题,本文开展了3方面工作:①用智能体扩展平行Petri网定义,解决连续系统控制问题;②给出平行Petri网设计方法,通过顺序、选择、循环模块设计,减少Petri网模型中工序排列组合新增的状态数;③针对执行机构冲突问题,根据执行机构种类的不同定义冲突类型,并给出冲突预防算法。为验证上述方法,编写负责Petri网演化计算的C语言程序和负责智能体感知控制的可编程逻辑控制器(Programmable Logic Controller,PLC)代码,并以Twin CAT为控制器进行实验,验证了本文方法的优越性。
1 基本概念
Petri网是一种基于图形的形式化描述和分析建模工具,便于理解整个系统结构,可通过可达树、状态方程、代数方程等分析系统性能。Petri网结构为一个四元组N=(P,T,F,W),P为库所集,T为变迁集,F为库所与变迁之间连接的有向弧集,W为对应有向弧上的权值。C-为前置关联矩阵,矩阵元素为库所到变迁的弧上权值。Petri网用(N,m0)表示,m0为初始标识。对于任意变迁t,有∀p∈·t,m(p)>C-(:,t),则称在当前标识m下变迁t使能。激活变迁t,指向该变迁的库所p减少W(p,t)个托肯,该变迁指向的库所p得到W(t,p)个托肯。
监控库所是为控制库所中托肯的数量而设计的库所。将线性约束添加到Petri网结构是通过增加监控库所控制变迁的激发,使相关库所的托肯数量加权并始终满足线性约束条件。给定一个线性约束lTu≤b,其等价于b-lTu0≥0,为其设计监控库所pc,关联矩阵C满足C(pc)=-lTC,初始标识满足u0(pc)=b-lTu0,使得Petri网标识满足约束条件lTu≤b。
Twin CAT是基于Windows平台的PLC系统,可在Visual Studio平台开发程序,通过自动化设备规范(Automation Device Specification,ADS)通信协议与其他设备通信。
2 平行Petri网及其执行算法
智能体能够感知输入的信号序列,并根据信号序列和智能体具有的先验知识做出反应,通过一个执行机构影响工作对象。本文假设每个智能体只能控制一个执行机构,执行机构的集合用∑E表示。
定义1在一个控制系统中,智能体是由传感器或执行机构的信号序列到执行器信号的映射函数。智能体的集合为∑A。
定义2如果一个执行机构的输入是智能体a的输出,则其为智能体a的执行机构,用λE(a)表示。
定义3激活函数是由传感器或执行机构的信号序列到0或1的函数,即2∑I∪∑O→{0,1},激活函数集合为∑β。
定义4给定库所p,若其对应的智能体a有执行机构,即λE(a)≠∅,则p所为动作库所;否则,p为非动作库所。
定义5平行Petri网是一个九元组G=(N,m0,∑I,∑O,∑A,∑L,λA,λβ,λE),其中:N为一般Petri网结构;m0为初始标识;∑I为输入信号集,其中各元素对应传感器信号;∑O为输出信号集,其中各元素对应执行器信号;∑A为智能体集合;∑L为激活函数集;λA为库所集映射到智能体集合的映射;λβ为库所集到激活函数集合的映射;λE为智能体集合到执行机构集合的映射。
根据定义1~定义5,设计了平行Petri网的执行算法,即算法1,算法包括两部分,其中Upper-unit负责执行Petri网逻辑,Lower-unit负责执行各标识库所的智能体函数。
算法1平行Petri网执行算法。
function Upper-unit(λL)returnm
输入:(λL)。
输出:m。
1 令Te=T{∀t∈T|m≤C-(:,t)∧∀(p∈t-)Islive},标识m下使能变迁;
2 if Te≥∅ then
3 从Te中任选一个变迁t,并将其从Te中删除;
4 m′=m+C(:,t);
5 m=m′;
6 end
7 return m
function Lower-unit(m,∑I)returnλL
输入: m,∑L
输出:λL,∑O
1 读取传感器输入以及其他执行器输出;
2 根据输入输出更新激活函数∑L;
3 foreach p∈{p|m(p)≥1}do
4 智能体计算并控制执行器输出;
5 由执行器输出更新激活函数λL(p);
6 end
7 return λL
如图1所示,Upper-unit接收Lower-unit发送的激活函数值,计算当前标识下的使能变迁,然后激发变迁,更新标识,并发送给Lower-unit。Lower-unit感知传感器输入,接收Upper-unit发送的标识,智能体负责计算并输出控制信号,检测到执行器完成动作后更新激活函数值,并发送给Upper-unit。
3 平行Petri网的设计方法及冲突预防
3.1 平行Petri网的设计方法
制造系统存在大量传感器、执行机构、加工对象等单元,不同工序复用同一机构会产生新的排列组合,导致建立的模型状态指数倍增加。直接对制造系统按照工序建模,所建立的模型存在逻辑关系混乱和容易遗漏工艺约束等问题。
为此设计了平行Petri网顺序、选择和循环模块,用于搭建对应工序的Petri网模型。通过3种模块对库所重复利用,能够有效减少系统状态数,厘清工序执行顺序,降低程序设计难度。
一个复杂工艺流程的大部分工序由顺序、选择、循环3种模块组合而成。建立Petri网模型的步骤为:先将工序转化为Petri网模块,再按照执行顺序将Petri网模块依次连接,最后结合开机执行任务设置对应的初始标识。
将不同工序间相同的部分库所用相同的库所表示,对库所重复利用,根据其他库所的状态区分工序。如图4所示,给定两个工艺流程:①工序1—工序3—工序4;②工序2—工序3—工序5。在两个工艺流程中,分别执行工序1和工序2后,都执行工序3,再分别执行工序4和工序5。在其Petri网模型中,p1~p5分别表示工序1~工序5。执行完工序3后,变迁激发有两种选择,库所得到托肯的顺序分别为p1→p3→p4和p2→p3→p5。添加非动作库所p6和p7,表示库所p3中的托肯来自p1或p2分支,避免了为工序3重复设计动作库所。
本文还需设计库所的智能体。根据库所类型制定不同的激活函数激发规则,设计智能体与传感器、执行器间的交换规则,包括智能体任务完成标志和智能体的执行代码,以及执行器输出的安全参数,如电机启停的加减速阈值。
3.2 冲突预防
不同Agent任务对同一执行机构资源的占用可能引起资源冲突问题。根据执行机构的不同,将资源冲突问题划分为3种类型,对应电路中信号类型的开关量、数字量和模拟量。
开关型执行机构指执行机构仅有0和1两种状态,数字型执行机构指执行机构输出的是离散的数字量,模拟型执行机构指执行机构输出的是连续的模拟量。
定义9给定两个智能体A和B,如果其执行机构是相同的开关型执行机构,且A和B的输出不同,则A和B为开关型执行机构冲突。
定义10给定两个智能体A和B,如果其执行机构是相同的非开关型执行机构,则其为非开关型执行机构冲突。
定义11给定一个平行Petri网的两个库所p1和p2,如果λA(p1)和λA(p2)为开关型或非开关型执行机构冲突,则p1和p2是冲突的。
定义12给定一个平行Petri网,如果一个库所的集合P满足以下条件,则称P为极大冲突库所集:①P中任意两个库所互相冲突;②对于任意一个库所,如果它与库所集P中的每个库所冲突,则它存在于P中。
定理1在算法2设计的监控库所控制下,平行Petri网不会产生执行器冲突。
算法2冲突预防算法。
输入:平行Petri网。
输出:冲突预防平行Petri网。
1 foreach 执行机构e∈∑Edo
3 初始化极大冲突集,P(e)=∅;
4 foreach库所p do
5 if库所p对应的执行机构为e
6 end
7 end
9 极大冲突集为空P(e)=∅;
10 end
11 else
13 if ∀pn∈P(e)与pm冲突then
14 P(e)=P(e)∪pm;
15 end
16 else
m≠n,pn∉P(e) then
18 New P(e)=pm,pn;
19 end
20 end
21 end
22 end
24 end
4 实验验证
如图5所示,本文实验平台是一个芯片检测控制系统,图5a中包括控制器、驱动器和电源,图5b包括传感器、执行器和检测电路。其中倍福Twin CAT软PLC作为控制器,采用C语言编写Upper-unit程序,采用PLC语言编写Lower-unit程序,二者之间的数据交换通过ADS通讯协议实现,Lower-unit与物理系统的交互由PLC输入输出模块完成。
为了更加清楚地介绍实验系统,本文给出图6所示的芯片检测系统示意图,包括X轴控制单元、Z轴控制单元、出料单元、收料单元、取放芯片单元、底座控制单元。表1所示为每个单元的传感器和执行机构。
表1 各单元传感器与执行器
(1)工艺流程
根据如图7所示的工艺流程设计存储类型芯片检测与封装实验,芯片由撕膜电机拆除塑封,再由控制出料的步进电机M3负责运送。左右两个机械爪由X轴(水平方向)和Z轴(垂直方向)两个步进电机控制,移动吸爪,使左右爪位置分别对准出料单元位置(L3和L4)后,移动吸爪下降至芯片槽位置,控制吸爪抓取芯片,每次取完,控制出料的步进电机M3移动一格输送下一颗芯片。移动吸爪对准工作台1或工作台2的位置(L1和L2),再移动吸爪下降至芯片槽位置,控制吸爪放置芯片,然后通过运行在PLC上的软件进行读写检测,并将检测结果同步给Petri网。Petri网根据检测结果选择将芯片丢弃还是放置合格槽塑封。丢弃操作由电机控制吸爪对准丢弃口(L7)后丢弃芯片;放置合格槽操作由电机控制吸爪的左右爪位置依次对准收料单元位置(L5和L6)后,移动吸爪下降至芯片槽位置,控制吸爪放置芯片,每次放完,控制收料的步进电机M4移动一格,将芯片运送至塑封台完成塑封。检测工作由工作台1(包括A1和A2)和工作台2(包括A3和A4)共4个芯片槽交替完成,循环往复。
(2)设计过程
1)X轴控制单元设计
将工艺流程中的动作转化为顺序、选择、循环模块,根据工序将模块组合成Petri网模型。工序1(复位设置零点)到工序2(到达L1位置)为顺序关系,工序2到工序3(到达L6位置)或到工序10(到达L7位置)为选择关系,工序10到工序3为顺序关系,工序3到工序4(到达L5位置)为顺序关系,工序4到工序5(到达L4位置)为顺序关系,工序5到工序6(到达L3位置)为顺序关系,工序6到工序7(到达L1位置)或到工序9(到达L2位置)为选择关系,工序9到工序2为顺序关系,工序7到工序8(到达L2位置)为顺序关系,工序8到工序3或到工序11(到达L7位置)为选择关系。为了区别空吸爪还是携带芯片吸爪到达L1位置,分别用两个工序表示,L2位置也做同样处理。为了区分L7上的芯片来自工作台1还是工作台2,分别用两个工序表示。
2)Z轴控制单元设计
工序18(Z轴回零)到工序19(Z轴左下深)为顺序关系,工序19到工序20(Z轴右下深)为顺序关系,工序20到工序18或到工序21(Z轴回零)为循环关系,工序21到工序22(Z轴左下浅)为顺序关系,工序22到工序23(Z轴右下浅)为顺序关系,工序23到工序24(Z轴回零)为顺序关系,工序24到工序21或到工序18为循环关系。图8所示的循环结构可以控制工序连续执行两次,以在符合工序情况下减少状态量。
简要介绍其余逻辑比较简单单元的功能。工序29表示左吸爪放芯片,工序30表示左吸爪取芯片,工序31表示右吸爪放芯片,工序32表示右吸爪取芯片,工序33和工序34分别表示左吸爪上的芯片检测合格与不合格,工序35和工序36分别表示右吸爪上的芯片检测合格与不合格,工序37~工序42为直流电机工作与停止状态。
智能体的PLC程序根据括号内的内容设计,不同智能体分别实现控制步进电机、直流电机、阀门或继电器开关的功能。除了控制执行机构的程序设计,额外增加负责智能体控制的PLC程序与负责Petri网运行的C代码通信的程序,智能体根据Petri网的当前标识判断执行哪些智能体动作,智能体完成相应动作时更新激活函数,并反馈给Petri网。
按照上面步骤建立了以执行机构为单元的Petri网模型,然而模型中可能存在执行器冲突问题,根据算法2冲突预防算法寻找每个执行机构的极大冲突集,并设计监控库所,将线性约束添加到Petri网中。建立如图8所示的芯片检测平台平行Petri网。
利用Petri网分析理论研究平行Petri网的性质,例如利用可达图、网结构分析可达性、安全性和死锁,限于篇幅,且本文重点在于执行器冲突预防,在此不再赘述。
绘制平行Petri网模型图的方法与普通Petri网相同,画出的平行Petri网如图8所示。平行Petri网对定义进行修改,根据平行Petri网的执行规则设计上位机程序,根据智能体具体功能设计底层控制代码。
根据算法1,设计Petri网演化的C语言程序和智能体的PLC程序。Upper-unit运行在Windows平台,与运行在PLC上的Lower-unit协同控制系统。采集每个库所获得托肯的时间,以及库所指向的变迁激发时间,相减可得该库所对应的智能体运行时间。经验证,实验结果完全符合所设计的工艺流程,验证了该方法的可行性。这里以X轴方向上的位置变化为例,绘制如图9所示的X轴对应库所甘特图及X轴步进电机位置变化图,图中X轴步进电机位置与本文描述的工序相同。
该Petri网模型符合冲突预防约束,通过资源库所的限制,实现了同一时刻相同执行机构对应的库所最多只有一个被标识,不存在执行机构冲突问题。
5 结束语
本文提出一种平行Petri网控制系统设计方法,通过智能体扩展了平行Petri网的定义,给出了冲突预防控制库所设计方法,避免了控制代码对执行机构的争夺;同时编写了Petri网与智能体程序,以Twin CAT为计算平台实现了本文方法,并在一个芯片检测平台上进行了实验验证。
后续研究计划将智能体执行时间加入Petri网模型,研究平行Petri网的优化调度问题,并将调度策略设计到Petri网结构中来优化工艺流程。