专利名称:一种检测plc梯形图程序中是否存在竞态的方法
技术领域:
本发明涉及一种检测PLC (可编程逻辑控制器)程序中出现逻辑错误的方法,是针对PLC程序验证的有力工具,确切地说,提出了一种检测PLC梯形图程序中是否存在竞态的方法。
背景技术:
可编程逻辑控制器(PLC)广泛地应用于航空航天、交通运输、核电能、石油化工、电力和交通等安全苛求系统领域。传统的PLC程序调试方法只能在语法、语义上进行检测,无法识别出程序变量之间隐藏的逻辑错误,如,竞态。所谓“竞态”指的是,给定的PLC程序在ー组固定不变的输入情况下,在连续不同的工作周期中出现不断重复变化的输出值。例如,在一道加工程序中,控制机械臂抓取的程序中存在“竞态”,那么,在工作中机械臂的直接表现为抓取的动作不稳定,不断地重复抓住、松开动作,这样的错误会导致产品的加工出现非常严重的质量问题,以及非常低的工作效率。目前已经报道的检测方法中更多的是偏向于理论的证明,虽然此类方法可以精确地发现程序中是否存在“竞态”,但在应用于较复杂程序时其本身的推导证明过程却过于繁杂,会导致效率偏低,甚至提高错误率。如,Zhendong Su等人提出了基于ー种约束语言的“竞态”检测方法,该方法在检测过程中并非一次性完成检测工作,而是随机选择输入值进行仿真,并且不断重复这ー仿真过程直到检测工作结束。虽然这种方法也可以达到检测PLC程序中是否存在“竞态”的目的,但是自身也存在缺陷1、检测工作需多次实验才能完成,工作效率偏低;2、由于需要多次重复仿真实验,因此过多的人为工作量容易出现失误,提高了错误率。
发明内容
本发明的目的在于提供一种检测PLC梯形图程序中是否存在竞态的方法,可以直接、快速地发现PLC程序中隐含的逻辑错误。一种检测PLC梯形图程序中是否存在竞态的方法,具体包括如下步骤步骤1、定义规则(I)采样变迁及同地址采样变迁把开关量或者触点这类输入量模拟为一对真假库所,而且在这对真假库所中添加了ー对连接变迁,把这样的ー类连接变迁定义为采样变迁,记做Tsample,并且这对连接变迁彼此互为同地址采样变迁;(2)采样变迁中的优先级按照PLC梯形图中每个开关量或者触点的物理地址的先后顺序,将普通Petri网中每个开关量或者触点对应的结点划分优先级,进而根据结点的优先级来划分结点中每对采样变迁的优先级,把优先级高的采样变迁记做th且th G Tsample,把优先级低的采样变迁记做h且h G Tsafflple,同地址的两个采样变迁优先级相同;
(3)计算变迁把辅助继电器或者线圈这类输出量模拟为ー对真假库所,而且根据路径和割集的概念添加了连接变迁,把这样的一类连接变迁定义为计算变迁,记做Trampute ;(4)计算变迁中的优先级如果用户使用的程序是梯形图程序,那么PLC在程序执行阶段,总是按照先上后下、从左至右的顺序进行扫描,程序中的输出量也是按照这个顺序发生变化的,按照这个顺序将程序中输出量对应的结点划分优先级,进而确定与每个输出量变化相关的计算变迁的优先级,把最高级别的计算变迁标识记做t_且t G Tcoffl ;(5)标识的使能变迁和生成变迁对于标识m,如果有ー个变迁t可以被激发,激发后产生标识m',此过程可表示为m[t >m',变迁t称为标识m的使能变迁,记做md6。[t >,变迁t称为标识m'的生成变迁,记做[t > m';(6)端点对于标识m,如果在新的变迁激发规则下不存在使能变迁,把这样的标识称为端点,记做端点e G E,用E表示可达图中的端点集合;
(7)生成路径从端点出发到标识m的一条有向路径,称为标识m的生成路径;(8)新的变迁激发规则A、普通Petri网变迁激发规则同样适用于新的变迁激发规则中;B、对于采样变迁,在低级别变迁激发后,高级别变迁即使使能也不再激发;C、对于采样变迁,同地址的ー对变迁中,若有一个激发,那么下一歩中与其相对应的另ー个即使使能也不再激发;D、对于计算变迁,存在大于等于ー个变迁使能时,只激发级别最高的变迁;E、在计算变迁被激发后,其后续步骤中即使有采样变迁使能也不被激发;步骤2、根据系统的控制规范,可编写满足要求的PLC梯形图程序,并进ー步转换成普通Petri网,根据普通Petri网及其初始标识生成符合PLC工作机理的可达图,具体包括如下步骤步骤21、用E表示可达图中的端点集合,其中,E=Enew U Eold, Enew为待检测端点集合,Etjld为已检测端点集合;用e pm表不有向弧集合;Wpix;表不有向弧的标签集合;MPIX表不所求状态集合;Mdf;。表示待检测状态集合吨表示初始状态;令Enew= {mj,Eold=0 ^prc = 0 ,tjp =0 Mde , Mplc= {m0};步骤22、若本0,则执行步骤23,否则,若Enew为空集,则算法结束;步骤23、令Mde。= MdJleJ,即选取Enew中任一元素作为PLC程序的ー个新的エ作周期的起始状态,并标记为待检测状态,用符号“nw”表示* 0,则选取中任一元素,执行步骤24,否则执行步骤224 ;步骤24、若状态mde。下存在使能变迁t,则执行步骤26,否则执行步骤25 ;步骤25、若 mde。G Enew,即 mde。是待检测端点,则 Mdee = Mdec- {mdec},Enew=Enew- {mdec},Eold = Eold+{mdec},即擦去当前状态的“待检测端点”及“待检测状态”标记并标记为“已检测端点”,返回步骤22,否则Mdec=Mdec- {mdec},Enew=Enew+ {mdec},即擦去待检测状态标记,并标记为待检测端点,返回步骤23;步骤26、根据步骤I中定义规则(I)至(4),对使能变迁t分类并划分优先级;步骤27、若mde。是待检测端点,即mde。E Enew,则执行步骤28,否则执行步骤29 ;步骤28、对于每ー个在mde。下使能的变迁t,执行 步骤28.1激发变迁t,生成新标识m';
步骤28. 2若m'与已存在的状态m"标识相同且m" G Mplc,则执行步骤28. 3,否则执行步骤28. 4 ;步骤28. 3 e PLC = e PLC+{(mdec,m" )},wPLC(mdec, m" ) = t。即从 mdec 到 m"画一条有向弧,并用t标记,返回步骤28 ;步骤28. 4 e pLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) =t,Mdec = Mdec+ {m' },Mplc =Mplc+{m ^ },即从Hitte到m'画一条有向弧,用t标记,并将m'分别标记为待检测状态和所求状态;步骤29、Mdee = Mdee-1mdeJ ,即擦去当前状态的待检测标记,返回步骤23 ;步骤210、若mde。是由采样变迁t激发后生成的,则执行步骤211,否则执行步骤 215 ;步骤211、对于每ー个在mde。下使能的采样变迁t',执行步骤211.1若t'的优先级低于t的优先级,则激发变迁t',生成新标识m',否则返回步骤211 ;步骤211.2.111'与已存在的状态m"标识相同且m" G MPw则执行步骤211. 3,否则执行步骤211. 4;步骤211.3 ePLC= e PLC+{(mdec, m" )},wPLC(mdec,m" )=t,,即从 mdec;到 m"画一条有向弧,并用t标记,返回步骤211;步骤 211. 4 e pLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' )=t, Mdec=Mdec+ {m' },Mplc =Mplc+{m ^ },即从Hitte到m'画一条有向弧,用t标记,并将m'分别标记为待检测状态和所求状态,返回步骤211 ;步骤212、若mde。下存在使能的计算变迁t',则激发使能的计算变迁中优先级最高的那ー个t_,生成新标识m';否则执行步骤216 ;步骤213、若m'与已存在的状态m"标识相同且m" G Mm,则执行步骤214,否则执行步骤215 ;步骤214、若mde。的生成路径上只有ー个端点,则从mde。到m"画一条有向弧,并用tD1M标记,形成回路,此时,竞态raCe=l,算法结束;否则ePLC= £ PLC+ { (mdec. m ;/ H,WPLC (mdec. m;/ )=tmM,即从mde。到m"画一条有向弧,并用tmax标记,执行步骤2 16 ;步骤215、e PLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) = t眶,Mdec=Mdec+ {m, },Mplc=Mplc+{m^ },即从到m'画一条有向弧,用标记,并将m'分别标记为待检测状态和所求状态,执行步骤216 ;步骤216、若mde。下无使能变迁t',且mde。不是端点,则Enew=Enew+ ImdeJ ,即标记mdec为待检测端点,否则执行步骤217 ;步骤217、若Mdee=Mdee-1mdeJ ,即擦去mde。的待检测标记,返回步骤23 ;步骤218、若mde。下存在使能的采样变迁t,则Mdee = Mdec-{mdec},即擦去当前状态待检测标记;否则执行步骤220 ;步骤219、若mde。不是端点,则Enew=Enew+ {mdec},即标记mde。为待检测端点,返回步骤23 ;否则直接返回步骤23 ;步骤220、激发使能的计算变迁中优先级最高的那ー个tmax,生成新标识m';若m/与已存在的状态m"标识相同且m" G Ma。,则执行步骤221,否则执行步骤222 ;
步骤221、若mde。的生成路径上只有ー个端点,则从Hidec^ljm"画一条有向弧,并用tD1M标记,形成回路,此时竞态raCe=l,算法结束;否则,令ePLC= £ PLC+ { (mdec. m ;/ H,wPlc (mdec m;/ ) = tmax,即从mde。到m"画一条有向弧,并用tmax标记,执行步骤223 ;步骤222、e PLC = e PLC+ {(mdec, m' )}, wPLC (mdec, m' ) = tmax, Mdec=Mdec+ {m' },Mplc=Mplc+{m^ },即从到m'画一条有向弧,用t_标记,并将m'分别标记为待检测状态和所求状态,执行步骤225 ;步骤223、Mdec=Mdee-1mdeJ ,即擦去当前状态“待检测状态”标记,返回步骤23 ;步骤224、Enew=Enew-{mde。}, Eold = Eold+ {mdec},即擦去当前状态“待检测端点”标记,标记为“已检测端点”,返回步骤22 ;步骤3、若步骤2输出ー个具有可逆性的可达图,图中的每ー个标识都代表着系统中可能出现的某ー状态,每一条生成路径都描述了系统在某一状态后的演化过程,则PLC程序中不存在竞态race ;若步骤2输出ー个存在自回路的不可逆的、不完整的可达图,则PLC程序中存在竞态race。本发明是一种检测PLC梯形图程序中是否存在竞态的方法,通过计算普通Petri网的可达图来确定待检测程序中是否存在竞态,不仅可以一次性完成检测工作,而且可以让程序员清晰、直观地从可达图中直接发现程序中隐含的逻辑错误,同时检测的每个步骤都可以由计算机完成,所以在效率上也更加突出,并达到自动化的标准。
具体实施例方式本发明ー种检测PLC梯形图程序中是否存在竞态的方法,具体包括如下步骤步骤1、定义规则(I)采样变迁及同地址采样变迁把开关量或者触点这类输入量模拟为一对真假库所,而且在这对真假库所中添加了ー对连接变迁,把这样的ー类连接变迁定义为采样变迁,记做Tsample,并且这对连接变迁彼此互为同地址采样变迁;(2)采样变迁中的优先级按照PLC梯形图中每个开关量或者触点的物理地址的先后顺序,将普通Petri网中每个开关量或者触点对应的结点划分优先级,进而根据结点的优先级来划分结点中每对采样变迁的优先级,即物理地址较前的开关量或者触点对应的结点的优先级高,优先级高的结点对应的ー对采样变迁的优先级高;同理,物理地址较后的开关量或者触点对应的结点的优先级低,与其对应的ー对采样变迁优先级低,把优先级高的采样变迁记做th且th G Tsample,把优先级低的采样变迁记做h且h G Tsample,同地址的两个采样变迁优先级相同;(3)计算变迁把辅助继电器或者线圈这类输出量模拟为ー对真假库所,而且根据路径和割集的概念添加了连接变迁,把这样的一类连接变迁定义为计算变迁,记做Trampute ;(4)计算变迁中的优先级如果用户使用的程序是梯形图程序,那么PLC在程序执行阶段,总是按照先上后下、从左至右的顺序进行扫描,程序中的输出量也是按照这个顺序发生变化的,按照这个顺序将程序中输出量对应的结点划分优先级,进而确定与每个输出量变化相关的计算变迁的优先级。即,先发生变化的输出量对应的计算变迁优先级高于后发生变化的输出量对应的计算变迁,把最高级别的计算变迁标识记做t_且t G Tcoffl ;(5)标识的使能变迁和生成变迁对于标识m,如果有ー个变迁t可以被激发,激发后产生标识m',此过程可表示为,变迁t称为标识m的使能变迁,记做md6。[t > ;变迁t称为标识m'的生成变迁,记做[t > m';(6)端点对于标识m,如果在新的变迁激发规则下不存在使能变迁,把这样的标识称为端点,记做端点e G E,用E表示可达图中的端点集合;(7)生成路径从端点出发到标识m的一条有向路径,称为标识m的生成路径;(8)新的变迁激发规则A、普通Petri网变迁激发规则同样适用于新的变迁激发规则中;B、对于采样变迁,在低级别变迁激发后,高级别变迁即使使能也不再激发;
C、对于采样变迁,同地址的ー对变迁中,若有一个激发,那么下一歩中与其相对应的另ー个即使使能也不再激发;D、对于计算变迁,存在大于等于ー个变迁使能时,只激发级别最高的变迁;E、在计算变迁被激发后,其后续步骤中即使有采样变迁使能也不被激发。步骤2、根据系统的控制规范,可编写满足要求的PLC梯形图程序,并进ー步转换成普通Petri网,根据普通Petri网及其初始标识生成符合PLC工作机理的可达图,具体包括如下步骤步骤21、用E表示可达图中的端点集合,其中,E=Enew U Eold, Enew为待检测端点集合,Etjld为已检测端点集合;用e pm表不有向弧集合;Wpix;表不有向弧的标签集合;MPIX表不所求状态集合;M‘表示待检测状态集合吨表示初始状态;令Enew= {mj,EnU=0 ^prc = 0,mPf C=0 Mde =^> Mplc= {m0};步骤22、若ネ0那Enew不为空集,则执行步骤23,否则,若Enew为空集,则算法结束;步骤23、令Mde。= MdJleJ,即选取Enew中任一元素作为PLC程序的ー个新的エ作周期的起始状态,并标记为待检测状态,用符号“nw”表示;若1- t 0,即存在待检测状态,则选取Mdec中任一元素,执行步骤24,否则执行步骤224 ;步骤24、若状态mde。下存在使能变迁t,则执行步骤26,否则执行步骤25 ;步骤25、若 mdec G Enew,即 mdec 是待检测端点,则 Mdec=Mdec- {mdec},Enew=Enew- {mdec},Eold=Eold+ {mdec},即擦去当前状态的“待检测端点”及“待检测状态”标记并标记为“已检测端点”,返回步骤22,否则Mdec=Mdec- {mdec},Enew=Enew+ {mdec},即擦去待检测状态标记,并标记为待检测端点,返回步骤23;步骤26、根据步骤I中定义规则(I)至(4),对使能变迁t分类并划分优先级;步骤27、若mde。是待检测端点,即mde。E Enew,则执行步骤28,否则执行步骤29 ;步骤28、对于每ー个在mde。下使能的变迁t,执行 步骤28.1激发变迁t,生成新标识m';步骤28. 2若m'与已存在的状态m"标识相同且m" G Mplc,则执行步骤28. 3,否则执行步骤28. 4 ;步骤28. 3 e PLC = e PLC+{(mdec,m" )}, wPLC (mdec,m" ) = t。即从 mdec 到 m"画一条有向弧,并用t标记。返回步骤28;步骤28. 4 e pLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) =t,Mdec = Mdec+ {m' },Mplc =Mplc+{m^ }。即从mde。到m'画一条有向弧,用t标记,并将m'分别标记为待检测状态和所求状态;步骤29、Mdec=Mdec- {mdec},即擦去当前状态的待检测标记。返回步骤23 ;步骤210、若mde。是由采样变迁t激发后生成的,则执行步骤211,否则执行步骤215 ;步骤211、对于每ー个在mde。下使能的采样变迁t',执行步骤211.1若t'的优先级低于t的优先级,则激发变迁t',生成新标识m',否则返回步骤211 ;步骤211.2.111'与已存在的状态m"标识相同且m" G MPw则执行步骤211. 3,否则执行步骤211. 4; 步骤211.3 ePLC= e PLC+{(mdec, m" )},wPLC(mdec,m" )=t,,即从 mdec;到 m"画一条有向弧,并用t标记,返回步骤211;步骤 211. 4 e PLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' )=t, Mdec=Mdec+ {m' },Mplc =Mplc+{m ^ },即从Hitte到m'画一条有向弧,用t标记,并将m'分别标记为待检测状态和所求状态,返回步骤211 ;步骤212、若mde。下存在使能的计算变迁t',则激发使能的计算变迁中优先级最高的那ー个t_,生成新标识m';否则执行步骤216 ;步骤213、若m'与已存在的状态m"标识相同且m" G Mm,则执行步骤214,否则执行步骤215 ;步骤214、若mde。的生成路径上只有ー个端点,则从mde。到m"画一条有向弧,并用tD1M标记,形成回路,此时,竞态raCe =し算法结束;否则ePLC= £ PLC+ { (mdec. m ;/ H,wPLC (mdec. m;/ )=tmM,即从mde。到m"画一条有向弧,并用tmax标记,执行步骤2 16 ;步骤215、e PLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) = t眶,Mdec=Mdec+ {m, },Mplc=Mplc+{m^ },即从到m'画一条有向弧,用标记,并将m'分别标记为待检测状态和所求状态,执行步骤216 ;步骤216、若mde。下无使能变迁t',且mde。不是端点,则Enew=Enew+ ImdeJ ,即标记mdec为待检测端点,否则执行步骤217 ;步骤217、若Mdee=Mdee-1mdeJ ,即擦去mde。的待检测标记,返回步骤23 ;步骤218、若mde。下存在使能的采样变迁t,则Mdee=Mdee-1mdeJ ,即擦去当前状态待检测标记;否则执行步骤220 ;步骤219、若mde。不是端点,则Enew=Enew+ {mdec},即标记mde。为待检测端点,返回步骤23 ;否则直接返回步骤23 ;步骤220、激发使能的计算变迁中优先级最高的那ー个,生成新标识m'。若m/与已存在的状态m"标识相同且m" G Ma。,则执行步骤221 ;否则执行步骤222 ;步骤221、若mde。的生成路径上只有ー个端点,则从Hidec^ljm"画一条有向弧,并用tD1M标记,形成回路,此时竞态raCe=l,算法结束;否则,令ePLC= £ PLC+ { (mdec. m ;/ H,wPLC (mdec. m;/ )=tmM,即从mde。到m"画一条有向弧,并用tmax标记,执行步骤223 ;步骤222、e PLC = e PLC+ {(mdec, m' )}, wPLC (mdec, m' ) = t眶,Mdec=Mdec+ {m' },Mplc=Mplc+{m^ },即从到m'画一条有向弧,用标记,并将m'分别标记为待检测状态和所求状态,执行步骤225 ;
步骤223、Mdec=Mdee-1mdecJ,即擦去当前状态“待检测状态”标记,返回步骤23 ;步骤224、Enew=Enew-{mde。}, Eold = Eold+ {mdec},即擦去当前状态“待检测端点”标记,标记为“已检测端点”,返回步骤22 ;步骤3、若步骤2输出ー个具有可逆性的可达图,图中的每ー个标识都代表着系统中可能出现的某ー状态,每一条生成路径都描述了系统在某一状态后的演化过程,也就是PLC程序在不同的输入条件吋,对应的不同输出結果,则PLC程序中不存在竞态race ;若步骤2输出ー个存在自回路的不可逆的、不完整的可达图,则PLC程序中存在竞态race。以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
权利要求
1.一种检测PLC梯形图程序中是否存在竞态的方法,其特征在于包括如下步骤步骤1、定义规则(1)采样变迁及同地址采样变迁把开关量或者触点这类输入量模拟为一对真假库所, 而且在这对真假库所中添加了一对连接变迁,把这样的一类连接变迁定义为采样变迁,记做Tsample,并且这对连接变迁彼此互为同地址采样变迁;(2)采样变迁中的优先级按照PLC梯形图中每个开关量或者触点的物理地址的先后顺序,将普通Petri网中每个开关量或者触点对应的结点划分优先级,进而根据结点的优先级来划分结点中每对采样变迁的优先级,把优先级高的采样变迁记做th且th e Tsample, 把优先级低的采样变迁记做h且& e Tsample,同地址的两个采样变迁优先级相同;(3)计算变迁把辅助继电器或者线圈这类输出量模拟为一对真假库所,而且根据路径和割集的概念添加了连接变迁,把这样的一类连接变迁定义为计算变迁,记做Tramputo ;(4)计算变迁中的优先级如果用户使用的程序是梯形图程序,那么PLC在程序执行阶段,总是按照先上后下、从左至右的顺序进行扫描,程序中的输出量也是按照这个顺序发生变化的,按照这个顺序将程序中输出量对应的结点划分优先级,进而确定与每个输出量变化相关的计算变迁的优先级,把最高级别的计算变迁标识记做tmax且t e Tcoffl ;(5)标识的使能变迁和生成变迁对于标识m,如果有一个变迁t可以被激发,激发后产生标识m',此过程可表示为,变迁t称为标识m的使能变迁,记做mdec;[t>,变迁t 称为标识m'的生成变迁,记做[t>m';(6)端点对于标识m,如果在新的变迁激发规则下不存在使能变迁,把这样的标识称为端点,记做端点e e E,用E表示可达图中的端点集合;(7)生成路径从端点出发到标识m的一条有向路径,称为标识m的生成路径;(8)新的变迁激发规则A、普通Petri网变迁激发规则同样适用于新的变迁激发规则中;B、对于采样变迁,在低级别变迁激发后,高级别变迁即使使能也不再激发;C、对于采样变迁,同地址的一对变迁中,若有一个激发,那么下一步中与其相对应的另一个即使使能也不再激发;D、对于计算变迁,存在大于等于一个变迁使能时,只激发级别最高的变迁;E、在计算变迁被激发后,其后续步骤中即使有采样变迁使能也不被激发;步骤2、根据系统的控制规范,可编写满足要求的PLC梯形图程序,并进一步转换成普通Petri网,根据普通Petri网及其初始标识生成符合PLC工作机理的可达图,具体包括如下步骤步骤21、用E表示可达图中的端点集合,其中,E=Emw U Eold, Enrat为待检测端点集合, Etjld为已检测端点集合;用ε PLC表示有向弧集合;ωριχ表示有向弧的标签集合;ΜΡΙΧ表示所求状态集合;Μ_表示待检测状态集合吨表示初始状态;令Enew=ImJ, EoM=0 ,Spjc = 0, ωΡΙΓ=0 Mjec=0, Mplc= {m0};步骤22、若本0,则执行步骤23,否则,若Enrat为空集,则算法结束;步骤23、令Mde。= Mdec+{enJ,即选取Emw中任一元素作为PLC程序的一个新的工作周期的起始状态,并标记为待检测状态,用符号“nw”表示;若Μ-# 0,则选取Mde。中任一元素,执行步骤24,否则执行步骤224 ;步骤24、若状态mde。下存在使能变迁t,则执行步骤26,否则执行步骤25 ;步骤 25、若 mdec e Enew,即 mde。是待检测端点,则 Mdec=Mdee-{mde。},Enew=Enew- {mdec},Eold = Edd+lnw},即擦去当前状态的“待检测端点”及“待检测状态”标记并标记为“已检测端点”, 返回步骤22,否则Mdee=Mdee-1mdeJ , Enew=Enew+ {mdec},即擦去待检测状态标记,并标记为待检测端点,返回步骤23 ;步骤26、根据步骤I中定义规则(I)至(4),对使能变迁t分类并划分优先级;步骤27、若mde。是待检测端点,即mde。e Enew,则执行步骤28,否则执行步骤29 ;步骤28、对于每一个在mde。下使能的变迁t,执行 步骤28.1激发变迁t,生成新标识m';步骤28.2若m'与已存在的状态m"标识相同且m" e ,则执行步骤28. 3,否则执行步骤28. 4 ;步骤 28. 3 ε PLC = ε PLC+{(mdec,m" )}, wPLC(mdec,m" ) = t。即从 mdec 到 m"画一条有向弧,并用t标记,返回步骤28 ;步骤 28. 4 ε PLC = ε PLC+ {(mdec, m ' )},wPLC(mdec, m ' )=t, Mdec = Mdec+ {m ' },Mplc = Mplc+(Hii },即从画一条有向弧,用t标记,并将m'分别标记为待检测状态和所求状态;步骤29、Mdec=Mdee-1mdeJ,即擦去当前状态的待检测标记,返回步骤23 ;步骤210、若Hitte是由采样变迁t激发后生成的,则执行步骤211,否则执行步骤215 ; 步骤211、对于每一个在Hitte下使能的采样变迁t',执行步骤211.1若t'的优先级低于t的优先级,则激发变迁t',生成新标识m,否则返回步骤211 ;步骤211.2若m'与已存在的状态m"标识相同且m" e Μ.,则执行步骤211. 3,否则执行步骤211.4 ;步骤 211·3εΡΙΧ= ε PLC+{(mdec,m" )},wPLC(mdec, m" )=t',即从 mdec 到 m"画一条有向弧,并用t标记,返回步骤211;步骤 211· 4 ε PLC = ε PLC+ {(mdec, m/ )},wPLC (mdec, m/ ) =t,Mdec=Mdec+ {m' },Mplc = MPLC+} m'画一条有向弧,用t标记,并将m'分别标记为待检测状态和所求状态,返回步骤211 ;步骤212、若mde;。下存在使能的计算变迁t',则激发使能的计算变迁中优先级最高的那一个tmax,生成新标识m';否则执行步骤216 ;步骤213、若m'与已存在的状态m"标识相同且m" e ,则执行步骤214,否则执行步骤215 ;步骤214、若mde。的生成路径上只有一个端点,则从mde。到m"画一条有向弧,并用tmax 标记,形成回路,此时,竞态race = I,算法结束;否则ε ριχ; = ε PLC+{(mdec, m;/ )} ,wPLC (mdec, m" ) = tmax,即从mde;。到m"画一条有向弧,并用tmax标记,执行步骤216 ;步骤 215、ePLC= ε PLC+ {(mdec, m/ )},wPLC (mdec, m/ ) = tmax, Mdec=Mdec+ {m, },Mplc = M似+{V },即从mde。到m'画一条有向弧,用tmax标记,并将m'分别标记为待检测状态和所求状态,执行步骤216 ;步骤216、若mde。下无使能变迁t',且mde。不是端点,则Enew=Enew+ ImdeJ ,即标记mdec;为待检测端点,否则执行步骤217 ;步骤217、若Mdec=Mdee-1mdecJ,即擦去mde。的待检测标记,返回步骤23 ;步骤218、若mde;。下存在使能的采样变迁t,则Mtte = Mdec- {mdec},即擦去当前状态待检测标记;否则执行步骤220 ;步骤219、若mde。不是端点,则Enew=Enew+{mde。},即标记mde。为待检测端点,返回步骤23 ; 否则直接返回步骤23;步骤220、激发使能的计算变迁中优先级最高的那一个tmax,生成新标识m';若!11'与已存在的状态m"标识相同且m" e Μ.,则执行步骤221,否则执行222 ;步骤221、若mde。的生成路径上只有一个端点,则从Hidec^ljm"画一条有向弧,并用 tmax标记,形成回路,此时竞态race=l,算法结束;否则,令ε ριχ = ε PLC+ {(mdec, m ;/ )}, wplc(mdec m;/ ) = tmax,即从mde。到m"画一条有向弧,并用tmax标记,执行步骤223 ;步骤 222、ePLC= ε PLC+ {(mdec, m ' )}, wPLC (mdec, m ' ) = t眶,Mdec=Mdec+ {m ' },Mplc = M似+{V },即从mde。到m'画一条有向弧,用tmax标记,并将m'分别标记为待检测状态和所求状态,执行步骤225 ;步骤223、Mdec=Mdee-1mdeJ,即擦去当前状态“待检测状态”标记,返回步骤23 ;步骤224、Enew=Enew-{mde。},Eold = Eold+ {mdec},即擦去当前状态“待检测端点”标记,标记为“已检测端点”,返回步骤22;步骤3、若步骤2输出一个具有可逆性的可达图,图中的每一个标识都代表着系统中可能出现的某一状态,每一条生成路径都描述了系统在某一状态后的演化过程,则PLC程序中不存在竞态race ;若步骤2输出一个存在自回路的不可逆的、不完整的可达图,则PLC程序中存在竞态race。
全文摘要
本发明一种检测PLC梯形图程序中是否存在竞态的方法,通过计算普通Petri网的可达图来确定待检测程序中是否存在竞态,不仅可以一次性完成检测工作,而且可以让程序员清晰、直观地从可达图中直接发现程序中隐含的逻辑错误,同时检测的每个步骤都可以由计算机完成,所以在效率上也更加突出,并达到自动化的标准。
文档编号G05B19/05GK103019233SQ20121056479
公开日2013年4月3日 申请日期2012年12月21日 优先权日2012年12月21日
发明者齐鹏飞, 罗继亮, 陈雪琨 申请人:华侨大学