專利名稱:一種檢測(cè)plc梯形圖程序中是否存在競(jìng)態(tài)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種檢測(cè)PLC (可編程邏輯控制器)程序中出現(xiàn)邏輯錯(cuò)誤的方法,是針對(duì)PLC程序驗(yàn)證的有力工具,確切地說(shuō),提出了一種檢測(cè)PLC梯形圖程序中是否存在競(jìng)態(tài)的方法。
背景技術(shù):
可編程邏輯控制器(PLC)廣泛地應(yīng)用于航空航天、交通運(yùn)輸、核電能、石油化工、電力和交通等安全苛求系統(tǒng)領(lǐng)域。傳統(tǒng)的PLC程序調(diào)試方法只能在語(yǔ)法、語(yǔ)義上進(jìn)行檢測(cè),無(wú)法識(shí)別出程序變量之間隱藏的邏輯錯(cuò)誤,如,競(jìng)態(tài)。所謂“競(jìng)態(tài)”指的是,給定的PLC程序在ー組固定不變的輸入情況下,在連續(xù)不同的工作周期中出現(xiàn)不斷重復(fù)變化的輸出值。例如,在一道加工程序中,控制機(jī)械臂抓取的程序中存在“競(jìng)態(tài)”,那么,在工作中機(jī)械臂的直接表現(xiàn)為抓取的動(dòng)作不穩(wěn)定,不斷地重復(fù)抓住、松開(kāi)動(dòng)作,這樣的錯(cuò)誤會(huì)導(dǎo)致產(chǎn)品的加工出現(xiàn)非常嚴(yán)重的質(zhì)量問(wèn)題,以及非常低的工作效率。目前已經(jīng)報(bào)道的檢測(cè)方法中更多的是偏向于理論的證明,雖然此類方法可以精確地發(fā)現(xiàn)程序中是否存在“競(jìng)態(tài)”,但在應(yīng)用于較復(fù)雜程序時(shí)其本身的推導(dǎo)證明過(guò)程卻過(guò)于繁雜,會(huì)導(dǎo)致效率偏低,甚至提高錯(cuò)誤率。如,Zhendong Su等人提出了基于ー種約束語(yǔ)言的“競(jìng)態(tài)”檢測(cè)方法,該方法在檢測(cè)過(guò)程中并非一次性完成檢測(cè)工作,而是隨機(jī)選擇輸入值進(jìn)行仿真,并且不斷重復(fù)這ー仿真過(guò)程直到檢測(cè)工作結(jié)束。雖然這種方法也可以達(dá)到檢測(cè)PLC程序中是否存在“競(jìng)態(tài)”的目的,但是自身也存在缺陷1、檢測(cè)工作需多次實(shí)驗(yàn)才能完成,工作效率偏低;2、由于需要多次重復(fù)仿真實(shí)驗(yàn),因此過(guò)多的人為工作量容易出現(xiàn)失誤,提高了錯(cuò)誤率。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種檢測(cè)PLC梯形圖程序中是否存在競(jìng)態(tài)的方法,可以直接、快速地發(fā)現(xiàn)PLC程序中隱含的邏輯錯(cuò)誤。一種檢測(cè)PLC梯形圖程序中是否存在競(jìng)態(tài)的方法,具體包括如下步驟步驟1、定義規(guī)則(I)采樣變遷及同地址采樣變遷把開(kāi)關(guān)量或者觸點(diǎn)這類輸入量模擬為一對(duì)真假庫(kù)所,而且在這對(duì)真假庫(kù)所中添加了ー對(duì)連接變遷,把這樣的ー類連接變遷定義為采樣變遷,記做Tsample,并且這對(duì)連接變遷彼此互為同地址采樣變遷;(2)采樣變遷中的優(yōu)先級(jí)按照PLC梯形圖中每個(gè)開(kāi)關(guān)量或者觸點(diǎn)的物理地址的先后順序,將普通Petri網(wǎng)中每個(gè)開(kāi)關(guān)量或者觸點(diǎn)對(duì)應(yīng)的結(jié)點(diǎn)劃分優(yōu)先級(jí),進(jìn)而根據(jù)結(jié)點(diǎn)的優(yōu)先級(jí)來(lái)劃分結(jié)點(diǎn)中每對(duì)采樣變遷的優(yōu)先級(jí),把優(yōu)先級(jí)高的采樣變遷記做th且th G Tsample,把優(yōu)先級(jí)低的采樣變遷記做h且h G Tsafflple,同地址的兩個(gè)采樣變遷優(yōu)先級(jí)相同;
(3)計(jì)算變遷把輔助繼電器或者線圈這類輸出量模擬為ー對(duì)真假庫(kù)所,而且根據(jù)路徑和割集的概念添加了連接變遷,把這樣的一類連接變遷定義為計(jì)算變遷,記做Trampute ;(4)計(jì)算變遷中的優(yōu)先級(jí)如果用戶使用的程序是梯形圖程序,那么PLC在程序執(zhí)行階段,總是按照先上后下、從左至右的順序進(jìn)行掃描,程序中的輸出量也是按照這個(gè)順序發(fā)生變化的,按照這個(gè)順序?qū)⒊绦蛑休敵隽繉?duì)應(yīng)的結(jié)點(diǎn)劃分優(yōu)先級(jí),進(jìn)而確定與每個(gè)輸出量變化相關(guān)的計(jì)算變遷的優(yōu)先級(jí),把最高級(jí)別的計(jì)算變遷標(biāo)識(shí)記做t_且t G Tcoffl ;(5)標(biāo)識(shí)的使能變遷和生成變遷對(duì)于標(biāo)識(shí)m,如果有ー個(gè)變遷t可以被激發(fā),激發(fā)后產(chǎn)生標(biāo)識(shí)m',此過(guò)程可表示為m[t >m',變遷t稱為標(biāo)識(shí)m的使能變遷,記做md6。[t >,變遷t稱為標(biāo)識(shí)m'的生成變遷,記做[t > m';(6)端點(diǎn)對(duì)于標(biāo)識(shí)m,如果在新的變遷激發(fā)規(guī)則下不存在使能變遷,把這樣的標(biāo)識(shí)稱為端點(diǎn),記做端點(diǎn)e G E,用E表示可達(dá)圖中的端點(diǎn)集合;
(7)生成路徑從端點(diǎn)出發(fā)到標(biāo)識(shí)m的一條有向路徑,稱為標(biāo)識(shí)m的生成路徑;(8)新的變遷激發(fā)規(guī)則A、普通Petri網(wǎng)變遷激發(fā)規(guī)則同樣適用于新的變遷激發(fā)規(guī)則中;B、對(duì)于采樣變遷,在低級(jí)別變遷激發(fā)后,高級(jí)別變遷即使使能也不再激發(fā);C、對(duì)于采樣變遷,同地址的ー對(duì)變遷中,若有一個(gè)激發(fā),那么下一歩中與其相對(duì)應(yīng)的另ー個(gè)即使使能也不再激發(fā);D、對(duì)于計(jì)算變遷,存在大于等于ー個(gè)變遷使能時(shí),只激發(fā)級(jí)別最高的變遷;E、在計(jì)算變遷被激發(fā)后,其后續(xù)步驟中即使有采樣變遷使能也不被激發(fā);步驟2、根據(jù)系統(tǒng)的控制規(guī)范,可編寫(xiě)滿足要求的PLC梯形圖程序,并進(jìn)ー步轉(zhuǎn)換成普通Petri網(wǎng),根據(jù)普通Petri網(wǎng)及其初始標(biāo)識(shí)生成符合PLC工作機(jī)理的可達(dá)圖,具體包括如下步驟步驟21、用E表示可達(dá)圖中的端點(diǎn)集合,其中,E=Enew U Eold, Enew為待檢測(cè)端點(diǎn)集合,Etjld為已檢測(cè)端點(diǎn)集合;用e pm表不有向弧集合;Wpix;表不有向弧的標(biāo)簽集合;MPIX表不所求狀態(tài)集合;Mdf;。表示待檢測(cè)狀態(tài)集合噸表示初始狀態(tài);令Enew= {mj,Eold=0 ^prc = 0 ,tjp =0 Mde , Mplc= {m0};步驟22、若本0,則執(zhí)行步驟23,否則,若Enew為空集,則算法結(jié)束;步驟23、令Mde。= MdJleJ,即選取Enew中任一元素作為PLC程序的ー個(gè)新的エ作周期的起始狀態(tài),并標(biāo)記為待檢測(cè)狀態(tài),用符號(hào)“nw”表示* 0,則選取中任一元素,執(zhí)行步驟24,否則執(zhí)行步驟224 ;步驟24、若狀態(tài)mde。下存在使能變遷t,則執(zhí)行步驟26,否則執(zhí)行步驟25 ;步驟25、若 mde。G Enew,即 mde。是待檢測(cè)端點(diǎn),則 Mdee = Mdec- {mdec},Enew=Enew- {mdec},Eold = Eold+{mdec},即擦去當(dāng)前狀態(tài)的“待檢測(cè)端點(diǎn)”及“待檢測(cè)狀態(tài)”標(biāo)記并標(biāo)記為“已檢測(cè)端點(diǎn)”,返回步驟22,否則Mdec=Mdec- {mdec},Enew=Enew+ {mdec},即擦去待檢測(cè)狀態(tài)標(biāo)記,并標(biāo)記為待檢測(cè)端點(diǎn),返回步驟23;步驟26、根據(jù)步驟I中定義規(guī)則(I)至(4),對(duì)使能變遷t分類并劃分優(yōu)先級(jí);步驟27、若mde。是待檢測(cè)端點(diǎn),即mde。E Enew,則執(zhí)行步驟28,否則執(zhí)行步驟29 ;步驟28、對(duì)于每ー個(gè)在mde。下使能的變遷t,執(zhí)行 步驟28.1激發(fā)變遷t,生成新標(biāo)識(shí)m';
步驟28. 2若m'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G Mplc,則執(zhí)行步驟28. 3,否則執(zhí)行步驟28. 4 ;步驟28. 3 e PLC = e PLC+{(mdec,m" )},wPLC(mdec, m" ) = t。即從 mdec 到 m"畫(huà)一條有向弧,并用t標(biāo)記,返回步驟28 ;步驟28. 4 e pLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) =t,Mdec = Mdec+ {m' },Mplc =Mplc+{m ^ },即從Hitte到m'畫(huà)一條有向弧,用t標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài);步驟29、Mdee = Mdee-1mdeJ ,即擦去當(dāng)前狀態(tài)的待檢測(cè)標(biāo)記,返回步驟23 ;步驟210、若mde。是由采樣變遷t激發(fā)后生成的,則執(zhí)行步驟211,否則執(zhí)行步驟 215 ;步驟211、對(duì)于每ー個(gè)在mde。下使能的采樣變遷t',執(zhí)行步驟211.1若t'的優(yōu)先級(jí)低于t的優(yōu)先級(jí),則激發(fā)變遷t',生成新標(biāo)識(shí)m',否則返回步驟211 ;步驟211.2.111'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G MPw則執(zhí)行步驟211. 3,否則執(zhí)行步驟211. 4;步驟211.3 ePLC= e PLC+{(mdec, m" )},wPLC(mdec,m" )=t,,即從 mdec;到 m"畫(huà)一條有向弧,并用t標(biāo)記,返回步驟211;步驟 211. 4 e pLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' )=t, Mdec=Mdec+ {m' },Mplc =Mplc+{m ^ },即從Hitte到m'畫(huà)一條有向弧,用t標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),返回步驟211 ;步驟212、若mde。下存在使能的計(jì)算變遷t',則激發(fā)使能的計(jì)算變遷中優(yōu)先級(jí)最高的那ー個(gè)t_,生成新標(biāo)識(shí)m';否則執(zhí)行步驟216 ;步驟213、若m'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G Mm,則執(zhí)行步驟214,否則執(zhí)行步驟215 ;步驟214、若mde。的生成路徑上只有ー個(gè)端點(diǎn),則從mde。到m"畫(huà)一條有向弧,并用tD1M標(biāo)記,形成回路,此時(shí),競(jìng)態(tài)raCe=l,算法結(jié)束;否則ePLC= £ PLC+ { (mdec. m ;/ H,WPLC (mdec. m;/ )=tmM,即從mde。到m"畫(huà)一條有向弧,并用tmax標(biāo)記,執(zhí)行步驟2 16 ;步驟215、e PLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) = t眶,Mdec=Mdec+ {m, },Mplc=Mplc+{m^ },即從到m'畫(huà)一條有向弧,用標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),執(zhí)行步驟216 ;步驟216、若mde。下無(wú)使能變遷t',且mde。不是端點(diǎn),則Enew=Enew+ ImdeJ ,即標(biāo)記mdec為待檢測(cè)端點(diǎn),否則執(zhí)行步驟217 ;步驟217、若Mdee=Mdee-1mdeJ ,即擦去mde。的待檢測(cè)標(biāo)記,返回步驟23 ;步驟218、若mde。下存在使能的采樣變遷t,則Mdee = Mdec-{mdec},即擦去當(dāng)前狀態(tài)待檢測(cè)標(biāo)記;否則執(zhí)行步驟220 ;步驟219、若mde。不是端點(diǎn),則Enew=Enew+ {mdec},即標(biāo)記mde。為待檢測(cè)端點(diǎn),返回步驟23 ;否則直接返回步驟23 ;步驟220、激發(fā)使能的計(jì)算變遷中優(yōu)先級(jí)最高的那ー個(gè)tmax,生成新標(biāo)識(shí)m';若m/與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G Ma。,則執(zhí)行步驟221,否則執(zhí)行步驟222 ;
步驟221、若mde。的生成路徑上只有ー個(gè)端點(diǎn),則從Hidec^ljm"畫(huà)一條有向弧,并用tD1M標(biāo)記,形成回路,此時(shí)競(jìng)態(tài)raCe=l,算法結(jié)束;否則,令ePLC= £ PLC+ { (mdec. m ;/ H,wPlc (mdec m;/ ) = tmax,即從mde。到m"畫(huà)一條有向弧,并用tmax標(biāo)記,執(zhí)行步驟223 ;步驟222、e PLC = e PLC+ {(mdec, m' )}, wPLC (mdec, m' ) = tmax, Mdec=Mdec+ {m' },Mplc=Mplc+{m^ },即從到m'畫(huà)一條有向弧,用t_標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),執(zhí)行步驟225 ;步驟223、Mdec=Mdee-1mdeJ ,即擦去當(dāng)前狀態(tài)“待檢測(cè)狀態(tài)”標(biāo)記,返回步驟23 ;步驟224、Enew=Enew-{mde。}, Eold = Eold+ {mdec},即擦去當(dāng)前狀態(tài)“待檢測(cè)端點(diǎn)”標(biāo)記,標(biāo)記為“已檢測(cè)端點(diǎn)”,返回步驟22 ;步驟3、若步驟2輸出ー個(gè)具有可逆性的可達(dá)圖,圖中的每ー個(gè)標(biāo)識(shí)都代表著系統(tǒng)中可能出現(xiàn)的某ー狀態(tài),每一條生成路徑都描述了系統(tǒng)在某一狀態(tài)后的演化過(guò)程,則PLC程序中不存在競(jìng)態(tài)race ;若步驟2輸出ー個(gè)存在自回路的不可逆的、不完整的可達(dá)圖,則PLC程序中存在競(jìng)態(tài)race。本發(fā)明是一種檢測(cè)PLC梯形圖程序中是否存在競(jìng)態(tài)的方法,通過(guò)計(jì)算普通Petri網(wǎng)的可達(dá)圖來(lái)確定待檢測(cè)程序中是否存在競(jìng)態(tài),不僅可以一次性完成檢測(cè)工作,而且可以讓程序員清晰、直觀地從可達(dá)圖中直接發(fā)現(xiàn)程序中隱含的邏輯錯(cuò)誤,同時(shí)檢測(cè)的每個(gè)步驟都可以由計(jì)算機(jī)完成,所以在效率上也更加突出,并達(dá)到自動(dòng)化的標(biāo)準(zhǔn)。
具體實(shí)施例方式本發(fā)明ー種檢測(cè)PLC梯形圖程序中是否存在競(jìng)態(tài)的方法,具體包括如下步驟步驟1、定義規(guī)則(I)采樣變遷及同地址采樣變遷把開(kāi)關(guān)量或者觸點(diǎn)這類輸入量模擬為一對(duì)真假庫(kù)所,而且在這對(duì)真假庫(kù)所中添加了ー對(duì)連接變遷,把這樣的ー類連接變遷定義為采樣變遷,記做Tsample,并且這對(duì)連接變遷彼此互為同地址采樣變遷;(2)采樣變遷中的優(yōu)先級(jí)按照PLC梯形圖中每個(gè)開(kāi)關(guān)量或者觸點(diǎn)的物理地址的先后順序,將普通Petri網(wǎng)中每個(gè)開(kāi)關(guān)量或者觸點(diǎn)對(duì)應(yīng)的結(jié)點(diǎn)劃分優(yōu)先級(jí),進(jìn)而根據(jù)結(jié)點(diǎn)的優(yōu)先級(jí)來(lái)劃分結(jié)點(diǎn)中每對(duì)采樣變遷的優(yōu)先級(jí),即物理地址較前的開(kāi)關(guān)量或者觸點(diǎn)對(duì)應(yīng)的結(jié)點(diǎn)的優(yōu)先級(jí)高,優(yōu)先級(jí)高的結(jié)點(diǎn)對(duì)應(yīng)的ー對(duì)采樣變遷的優(yōu)先級(jí)高;同理,物理地址較后的開(kāi)關(guān)量或者觸點(diǎn)對(duì)應(yīng)的結(jié)點(diǎn)的優(yōu)先級(jí)低,與其對(duì)應(yīng)的ー對(duì)采樣變遷優(yōu)先級(jí)低,把優(yōu)先級(jí)高的采樣變遷記做th且th G Tsample,把優(yōu)先級(jí)低的采樣變遷記做h且h G Tsample,同地址的兩個(gè)采樣變遷優(yōu)先級(jí)相同;(3)計(jì)算變遷把輔助繼電器或者線圈這類輸出量模擬為ー對(duì)真假庫(kù)所,而且根據(jù)路徑和割集的概念添加了連接變遷,把這樣的一類連接變遷定義為計(jì)算變遷,記做Trampute ;(4)計(jì)算變遷中的優(yōu)先級(jí)如果用戶使用的程序是梯形圖程序,那么PLC在程序執(zhí)行階段,總是按照先上后下、從左至右的順序進(jìn)行掃描,程序中的輸出量也是按照這個(gè)順序發(fā)生變化的,按照這個(gè)順序?qū)⒊绦蛑休敵隽繉?duì)應(yīng)的結(jié)點(diǎn)劃分優(yōu)先級(jí),進(jìn)而確定與每個(gè)輸出量變化相關(guān)的計(jì)算變遷的優(yōu)先級(jí)。即,先發(fā)生變化的輸出量對(duì)應(yīng)的計(jì)算變遷優(yōu)先級(jí)高于后發(fā)生變化的輸出量對(duì)應(yīng)的計(jì)算變遷,把最高級(jí)別的計(jì)算變遷標(biāo)識(shí)記做t_且t G Tcoffl ;(5)標(biāo)識(shí)的使能變遷和生成變遷對(duì)于標(biāo)識(shí)m,如果有ー個(gè)變遷t可以被激發(fā),激發(fā)后產(chǎn)生標(biāo)識(shí)m',此過(guò)程可表示為,變遷t稱為標(biāo)識(shí)m的使能變遷,記做md6。[t > ;變遷t稱為標(biāo)識(shí)m'的生成變遷,記做[t > m';(6)端點(diǎn)對(duì)于標(biāo)識(shí)m,如果在新的變遷激發(fā)規(guī)則下不存在使能變遷,把這樣的標(biāo)識(shí)稱為端點(diǎn),記做端點(diǎn)e G E,用E表示可達(dá)圖中的端點(diǎn)集合;(7)生成路徑從端點(diǎn)出發(fā)到標(biāo)識(shí)m的一條有向路徑,稱為標(biāo)識(shí)m的生成路徑;(8)新的變遷激發(fā)規(guī)則A、普通Petri網(wǎng)變遷激發(fā)規(guī)則同樣適用于新的變遷激發(fā)規(guī)則中;B、對(duì)于采樣變遷,在低級(jí)別變遷激發(fā)后,高級(jí)別變遷即使使能也不再激發(fā);
C、對(duì)于采樣變遷,同地址的ー對(duì)變遷中,若有一個(gè)激發(fā),那么下一歩中與其相對(duì)應(yīng)的另ー個(gè)即使使能也不再激發(fā);D、對(duì)于計(jì)算變遷,存在大于等于ー個(gè)變遷使能時(shí),只激發(fā)級(jí)別最高的變遷;E、在計(jì)算變遷被激發(fā)后,其后續(xù)步驟中即使有采樣變遷使能也不被激發(fā)。步驟2、根據(jù)系統(tǒng)的控制規(guī)范,可編寫(xiě)滿足要求的PLC梯形圖程序,并進(jìn)ー步轉(zhuǎn)換成普通Petri網(wǎng),根據(jù)普通Petri網(wǎng)及其初始標(biāo)識(shí)生成符合PLC工作機(jī)理的可達(dá)圖,具體包括如下步驟步驟21、用E表示可達(dá)圖中的端點(diǎn)集合,其中,E=Enew U Eold, Enew為待檢測(cè)端點(diǎn)集合,Etjld為已檢測(cè)端點(diǎn)集合;用e pm表不有向弧集合;Wpix;表不有向弧的標(biāo)簽集合;MPIX表不所求狀態(tài)集合;M‘表示待檢測(cè)狀態(tài)集合噸表示初始狀態(tài);令Enew= {mj,EnU=0 ^prc = 0,mPf C=0 Mde =^> Mplc= {m0};步驟22、若ネ0那Enew不為空集,則執(zhí)行步驟23,否則,若Enew為空集,則算法結(jié)束;步驟23、令Mde。= MdJleJ,即選取Enew中任一元素作為PLC程序的ー個(gè)新的エ作周期的起始狀態(tài),并標(biāo)記為待檢測(cè)狀態(tài),用符號(hào)“nw”表示;若1- t 0,即存在待檢測(cè)狀態(tài),則選取Mdec中任一元素,執(zhí)行步驟24,否則執(zhí)行步驟224 ;步驟24、若狀態(tài)mde。下存在使能變遷t,則執(zhí)行步驟26,否則執(zhí)行步驟25 ;步驟25、若 mdec G Enew,即 mdec 是待檢測(cè)端點(diǎn),則 Mdec=Mdec- {mdec},Enew=Enew- {mdec},Eold=Eold+ {mdec},即擦去當(dāng)前狀態(tài)的“待檢測(cè)端點(diǎn)”及“待檢測(cè)狀態(tài)”標(biāo)記并標(biāo)記為“已檢測(cè)端點(diǎn)”,返回步驟22,否則Mdec=Mdec- {mdec},Enew=Enew+ {mdec},即擦去待檢測(cè)狀態(tài)標(biāo)記,并標(biāo)記為待檢測(cè)端點(diǎn),返回步驟23;步驟26、根據(jù)步驟I中定義規(guī)則(I)至(4),對(duì)使能變遷t分類并劃分優(yōu)先級(jí);步驟27、若mde。是待檢測(cè)端點(diǎn),即mde。E Enew,則執(zhí)行步驟28,否則執(zhí)行步驟29 ;步驟28、對(duì)于每ー個(gè)在mde。下使能的變遷t,執(zhí)行 步驟28.1激發(fā)變遷t,生成新標(biāo)識(shí)m';步驟28. 2若m'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G Mplc,則執(zhí)行步驟28. 3,否則執(zhí)行步驟28. 4 ;步驟28. 3 e PLC = e PLC+{(mdec,m" )}, wPLC (mdec,m" ) = t。即從 mdec 到 m"畫(huà)一條有向弧,并用t標(biāo)記。返回步驟28;步驟28. 4 e pLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) =t,Mdec = Mdec+ {m' },Mplc =Mplc+{m^ }。即從mde。到m'畫(huà)一條有向弧,用t標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài);步驟29、Mdec=Mdec- {mdec},即擦去當(dāng)前狀態(tài)的待檢測(cè)標(biāo)記。返回步驟23 ;步驟210、若mde。是由采樣變遷t激發(fā)后生成的,則執(zhí)行步驟211,否則執(zhí)行步驟215 ;步驟211、對(duì)于每ー個(gè)在mde。下使能的采樣變遷t',執(zhí)行步驟211.1若t'的優(yōu)先級(jí)低于t的優(yōu)先級(jí),則激發(fā)變遷t',生成新標(biāo)識(shí)m',否則返回步驟211 ;步驟211.2.111'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G MPw則執(zhí)行步驟211. 3,否則執(zhí)行步驟211. 4; 步驟211.3 ePLC= e PLC+{(mdec, m" )},wPLC(mdec,m" )=t,,即從 mdec;到 m"畫(huà)一條有向弧,并用t標(biāo)記,返回步驟211;步驟 211. 4 e PLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' )=t, Mdec=Mdec+ {m' },Mplc =Mplc+{m ^ },即從Hitte到m'畫(huà)一條有向弧,用t標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),返回步驟211 ;步驟212、若mde。下存在使能的計(jì)算變遷t',則激發(fā)使能的計(jì)算變遷中優(yōu)先級(jí)最高的那ー個(gè)t_,生成新標(biāo)識(shí)m';否則執(zhí)行步驟216 ;步驟213、若m'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G Mm,則執(zhí)行步驟214,否則執(zhí)行步驟215 ;步驟214、若mde。的生成路徑上只有ー個(gè)端點(diǎn),則從mde。到m"畫(huà)一條有向弧,并用tD1M標(biāo)記,形成回路,此時(shí),競(jìng)態(tài)raCe =し算法結(jié)束;否則ePLC= £ PLC+ { (mdec. m ;/ H,wPLC (mdec. m;/ )=tmM,即從mde。到m"畫(huà)一條有向弧,并用tmax標(biāo)記,執(zhí)行步驟2 16 ;步驟215、e PLC = e PLC+ {(mdec, m' )},wPLC (mdec, m' ) = t眶,Mdec=Mdec+ {m, },Mplc=Mplc+{m^ },即從到m'畫(huà)一條有向弧,用標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),執(zhí)行步驟216 ;步驟216、若mde。下無(wú)使能變遷t',且mde。不是端點(diǎn),則Enew=Enew+ ImdeJ ,即標(biāo)記mdec為待檢測(cè)端點(diǎn),否則執(zhí)行步驟217 ;步驟217、若Mdee=Mdee-1mdeJ ,即擦去mde。的待檢測(cè)標(biāo)記,返回步驟23 ;步驟218、若mde。下存在使能的采樣變遷t,則Mdee=Mdee-1mdeJ ,即擦去當(dāng)前狀態(tài)待檢測(cè)標(biāo)記;否則執(zhí)行步驟220 ;步驟219、若mde。不是端點(diǎn),則Enew=Enew+ {mdec},即標(biāo)記mde。為待檢測(cè)端點(diǎn),返回步驟23 ;否則直接返回步驟23 ;步驟220、激發(fā)使能的計(jì)算變遷中優(yōu)先級(jí)最高的那ー個(gè),生成新標(biāo)識(shí)m'。若m/與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" G Ma。,則執(zhí)行步驟221 ;否則執(zhí)行步驟222 ;步驟221、若mde。的生成路徑上只有ー個(gè)端點(diǎn),則從Hidec^ljm"畫(huà)一條有向弧,并用tD1M標(biāo)記,形成回路,此時(shí)競(jìng)態(tài)raCe=l,算法結(jié)束;否則,令ePLC= £ PLC+ { (mdec. m ;/ H,wPLC (mdec. m;/ )=tmM,即從mde。到m"畫(huà)一條有向弧,并用tmax標(biāo)記,執(zhí)行步驟223 ;步驟222、e PLC = e PLC+ {(mdec, m' )}, wPLC (mdec, m' ) = t眶,Mdec=Mdec+ {m' },Mplc=Mplc+{m^ },即從到m'畫(huà)一條有向弧,用標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),執(zhí)行步驟225 ;
步驟223、Mdec=Mdee-1mdecJ,即擦去當(dāng)前狀態(tài)“待檢測(cè)狀態(tài)”標(biāo)記,返回步驟23 ;步驟224、Enew=Enew-{mde。}, Eold = Eold+ {mdec},即擦去當(dāng)前狀態(tài)“待檢測(cè)端點(diǎn)”標(biāo)記,標(biāo)記為“已檢測(cè)端點(diǎn)”,返回步驟22 ;步驟3、若步驟2輸出ー個(gè)具有可逆性的可達(dá)圖,圖中的每ー個(gè)標(biāo)識(shí)都代表著系統(tǒng)中可能出現(xiàn)的某ー狀態(tài),每一條生成路徑都描述了系統(tǒng)在某一狀態(tài)后的演化過(guò)程,也就是PLC程序在不同的輸入條件吋,對(duì)應(yīng)的不同輸出結(jié)果,則PLC程序中不存在競(jìng)態(tài)race ;若步驟2輸出ー個(gè)存在自回路的不可逆的、不完整的可達(dá)圖,則PLC程序中存在競(jìng)態(tài)race。以上所述,僅是本發(fā)明較佳實(shí)施例而已,并非對(duì)本發(fā)明的技術(shù)范圍作任何限制,故凡是依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何細(xì)微修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。
權(quán)利要求
1.一種檢測(cè)PLC梯形圖程序中是否存在競(jìng)態(tài)的方法,其特征在于包括如下步驟步驟1、定義規(guī)則(1)采樣變遷及同地址采樣變遷把開(kāi)關(guān)量或者觸點(diǎn)這類輸入量模擬為一對(duì)真假庫(kù)所, 而且在這對(duì)真假庫(kù)所中添加了一對(duì)連接變遷,把這樣的一類連接變遷定義為采樣變遷,記做Tsample,并且這對(duì)連接變遷彼此互為同地址采樣變遷;(2)采樣變遷中的優(yōu)先級(jí)按照PLC梯形圖中每個(gè)開(kāi)關(guān)量或者觸點(diǎn)的物理地址的先后順序,將普通Petri網(wǎng)中每個(gè)開(kāi)關(guān)量或者觸點(diǎn)對(duì)應(yīng)的結(jié)點(diǎn)劃分優(yōu)先級(jí),進(jìn)而根據(jù)結(jié)點(diǎn)的優(yōu)先級(jí)來(lái)劃分結(jié)點(diǎn)中每對(duì)采樣變遷的優(yōu)先級(jí),把優(yōu)先級(jí)高的采樣變遷記做th且th e Tsample, 把優(yōu)先級(jí)低的采樣變遷記做h且& e Tsample,同地址的兩個(gè)采樣變遷優(yōu)先級(jí)相同;(3)計(jì)算變遷把輔助繼電器或者線圈這類輸出量模擬為一對(duì)真假庫(kù)所,而且根據(jù)路徑和割集的概念添加了連接變遷,把這樣的一類連接變遷定義為計(jì)算變遷,記做Tramputo ;(4)計(jì)算變遷中的優(yōu)先級(jí)如果用戶使用的程序是梯形圖程序,那么PLC在程序執(zhí)行階段,總是按照先上后下、從左至右的順序進(jìn)行掃描,程序中的輸出量也是按照這個(gè)順序發(fā)生變化的,按照這個(gè)順序?qū)⒊绦蛑休敵隽繉?duì)應(yīng)的結(jié)點(diǎn)劃分優(yōu)先級(jí),進(jìn)而確定與每個(gè)輸出量變化相關(guān)的計(jì)算變遷的優(yōu)先級(jí),把最高級(jí)別的計(jì)算變遷標(biāo)識(shí)記做tmax且t e Tcoffl ;(5)標(biāo)識(shí)的使能變遷和生成變遷對(duì)于標(biāo)識(shí)m,如果有一個(gè)變遷t可以被激發(fā),激發(fā)后產(chǎn)生標(biāo)識(shí)m',此過(guò)程可表示為,變遷t稱為標(biāo)識(shí)m的使能變遷,記做mdec;[t>,變遷t 稱為標(biāo)識(shí)m'的生成變遷,記做[t>m';(6)端點(diǎn)對(duì)于標(biāo)識(shí)m,如果在新的變遷激發(fā)規(guī)則下不存在使能變遷,把這樣的標(biāo)識(shí)稱為端點(diǎn),記做端點(diǎn)e e E,用E表示可達(dá)圖中的端點(diǎn)集合;(7)生成路徑從端點(diǎn)出發(fā)到標(biāo)識(shí)m的一條有向路徑,稱為標(biāo)識(shí)m的生成路徑;(8)新的變遷激發(fā)規(guī)則A、普通Petri網(wǎng)變遷激發(fā)規(guī)則同樣適用于新的變遷激發(fā)規(guī)則中;B、對(duì)于采樣變遷,在低級(jí)別變遷激發(fā)后,高級(jí)別變遷即使使能也不再激發(fā);C、對(duì)于采樣變遷,同地址的一對(duì)變遷中,若有一個(gè)激發(fā),那么下一步中與其相對(duì)應(yīng)的另一個(gè)即使使能也不再激發(fā);D、對(duì)于計(jì)算變遷,存在大于等于一個(gè)變遷使能時(shí),只激發(fā)級(jí)別最高的變遷;E、在計(jì)算變遷被激發(fā)后,其后續(xù)步驟中即使有采樣變遷使能也不被激發(fā);步驟2、根據(jù)系統(tǒng)的控制規(guī)范,可編寫(xiě)滿足要求的PLC梯形圖程序,并進(jìn)一步轉(zhuǎn)換成普通Petri網(wǎng),根據(jù)普通Petri網(wǎng)及其初始標(biāo)識(shí)生成符合PLC工作機(jī)理的可達(dá)圖,具體包括如下步驟步驟21、用E表示可達(dá)圖中的端點(diǎn)集合,其中,E=Emw U Eold, Enrat為待檢測(cè)端點(diǎn)集合, Etjld為已檢測(cè)端點(diǎn)集合;用ε PLC表示有向弧集合;ωριχ表示有向弧的標(biāo)簽集合;ΜΡΙΧ表示所求狀態(tài)集合;Μ_表示待檢測(cè)狀態(tài)集合噸表示初始狀態(tài);令Enew=ImJ, EoM=0 ,Spjc = 0, ωΡΙΓ=0 Mjec=0, Mplc= {m0};步驟22、若本0,則執(zhí)行步驟23,否則,若Enrat為空集,則算法結(jié)束;步驟23、令Mde。= Mdec+{enJ,即選取Emw中任一元素作為PLC程序的一個(gè)新的工作周期的起始狀態(tài),并標(biāo)記為待檢測(cè)狀態(tài),用符號(hào)“nw”表示;若Μ-# 0,則選取Mde。中任一元素,執(zhí)行步驟24,否則執(zhí)行步驟224 ;步驟24、若狀態(tài)mde。下存在使能變遷t,則執(zhí)行步驟26,否則執(zhí)行步驟25 ;步驟 25、若 mdec e Enew,即 mde。是待檢測(cè)端點(diǎn),則 Mdec=Mdee-{mde。},Enew=Enew- {mdec},Eold = Edd+lnw},即擦去當(dāng)前狀態(tài)的“待檢測(cè)端點(diǎn)”及“待檢測(cè)狀態(tài)”標(biāo)記并標(biāo)記為“已檢測(cè)端點(diǎn)”, 返回步驟22,否則Mdee=Mdee-1mdeJ , Enew=Enew+ {mdec},即擦去待檢測(cè)狀態(tài)標(biāo)記,并標(biāo)記為待檢測(cè)端點(diǎn),返回步驟23 ;步驟26、根據(jù)步驟I中定義規(guī)則(I)至(4),對(duì)使能變遷t分類并劃分優(yōu)先級(jí);步驟27、若mde。是待檢測(cè)端點(diǎn),即mde。e Enew,則執(zhí)行步驟28,否則執(zhí)行步驟29 ;步驟28、對(duì)于每一個(gè)在mde。下使能的變遷t,執(zhí)行 步驟28.1激發(fā)變遷t,生成新標(biāo)識(shí)m';步驟28.2若m'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" e ,則執(zhí)行步驟28. 3,否則執(zhí)行步驟28. 4 ;步驟 28. 3 ε PLC = ε PLC+{(mdec,m" )}, wPLC(mdec,m" ) = t。即從 mdec 到 m"畫(huà)一條有向弧,并用t標(biāo)記,返回步驟28 ;步驟 28. 4 ε PLC = ε PLC+ {(mdec, m ' )},wPLC(mdec, m ' )=t, Mdec = Mdec+ {m ' },Mplc = Mplc+(Hii },即從畫(huà)一條有向弧,用t標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài);步驟29、Mdec=Mdee-1mdeJ,即擦去當(dāng)前狀態(tài)的待檢測(cè)標(biāo)記,返回步驟23 ;步驟210、若Hitte是由采樣變遷t激發(fā)后生成的,則執(zhí)行步驟211,否則執(zhí)行步驟215 ; 步驟211、對(duì)于每一個(gè)在Hitte下使能的采樣變遷t',執(zhí)行步驟211.1若t'的優(yōu)先級(jí)低于t的優(yōu)先級(jí),則激發(fā)變遷t',生成新標(biāo)識(shí)m,否則返回步驟211 ;步驟211.2若m'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" e Μ.,則執(zhí)行步驟211. 3,否則執(zhí)行步驟211.4 ;步驟 211·3εΡΙΧ= ε PLC+{(mdec,m" )},wPLC(mdec, m" )=t',即從 mdec 到 m"畫(huà)一條有向弧,并用t標(biāo)記,返回步驟211;步驟 211· 4 ε PLC = ε PLC+ {(mdec, m/ )},wPLC (mdec, m/ ) =t,Mdec=Mdec+ {m' },Mplc = MPLC+} m'畫(huà)一條有向弧,用t標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),返回步驟211 ;步驟212、若mde;。下存在使能的計(jì)算變遷t',則激發(fā)使能的計(jì)算變遷中優(yōu)先級(jí)最高的那一個(gè)tmax,生成新標(biāo)識(shí)m';否則執(zhí)行步驟216 ;步驟213、若m'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" e ,則執(zhí)行步驟214,否則執(zhí)行步驟215 ;步驟214、若mde。的生成路徑上只有一個(gè)端點(diǎn),則從mde。到m"畫(huà)一條有向弧,并用tmax 標(biāo)記,形成回路,此時(shí),競(jìng)態(tài)race = I,算法結(jié)束;否則ε ριχ; = ε PLC+{(mdec, m;/ )} ,wPLC (mdec, m" ) = tmax,即從mde;。到m"畫(huà)一條有向弧,并用tmax標(biāo)記,執(zhí)行步驟216 ;步驟 215、ePLC= ε PLC+ {(mdec, m/ )},wPLC (mdec, m/ ) = tmax, Mdec=Mdec+ {m, },Mplc = M似+{V },即從mde。到m'畫(huà)一條有向弧,用tmax標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),執(zhí)行步驟216 ;步驟216、若mde。下無(wú)使能變遷t',且mde。不是端點(diǎn),則Enew=Enew+ ImdeJ ,即標(biāo)記mdec;為待檢測(cè)端點(diǎn),否則執(zhí)行步驟217 ;步驟217、若Mdec=Mdee-1mdecJ,即擦去mde。的待檢測(cè)標(biāo)記,返回步驟23 ;步驟218、若mde;。下存在使能的采樣變遷t,則Mtte = Mdec- {mdec},即擦去當(dāng)前狀態(tài)待檢測(cè)標(biāo)記;否則執(zhí)行步驟220 ;步驟219、若mde。不是端點(diǎn),則Enew=Enew+{mde。},即標(biāo)記mde。為待檢測(cè)端點(diǎn),返回步驟23 ; 否則直接返回步驟23;步驟220、激發(fā)使能的計(jì)算變遷中優(yōu)先級(jí)最高的那一個(gè)tmax,生成新標(biāo)識(shí)m';若!11'與已存在的狀態(tài)m"標(biāo)識(shí)相同且m" e Μ.,則執(zhí)行步驟221,否則執(zhí)行222 ;步驟221、若mde。的生成路徑上只有一個(gè)端點(diǎn),則從Hidec^ljm"畫(huà)一條有向弧,并用 tmax標(biāo)記,形成回路,此時(shí)競(jìng)態(tài)race=l,算法結(jié)束;否則,令ε ριχ = ε PLC+ {(mdec, m ;/ )}, wplc(mdec m;/ ) = tmax,即從mde。到m"畫(huà)一條有向弧,并用tmax標(biāo)記,執(zhí)行步驟223 ;步驟 222、ePLC= ε PLC+ {(mdec, m ' )}, wPLC (mdec, m ' ) = t眶,Mdec=Mdec+ {m ' },Mplc = M似+{V },即從mde。到m'畫(huà)一條有向弧,用tmax標(biāo)記,并將m'分別標(biāo)記為待檢測(cè)狀態(tài)和所求狀態(tài),執(zhí)行步驟225 ;步驟223、Mdec=Mdee-1mdeJ,即擦去當(dāng)前狀態(tài)“待檢測(cè)狀態(tài)”標(biāo)記,返回步驟23 ;步驟224、Enew=Enew-{mde。},Eold = Eold+ {mdec},即擦去當(dāng)前狀態(tài)“待檢測(cè)端點(diǎn)”標(biāo)記,標(biāo)記為“已檢測(cè)端點(diǎn)”,返回步驟22;步驟3、若步驟2輸出一個(gè)具有可逆性的可達(dá)圖,圖中的每一個(gè)標(biāo)識(shí)都代表著系統(tǒng)中可能出現(xiàn)的某一狀態(tài),每一條生成路徑都描述了系統(tǒng)在某一狀態(tài)后的演化過(guò)程,則PLC程序中不存在競(jìng)態(tài)race ;若步驟2輸出一個(gè)存在自回路的不可逆的、不完整的可達(dá)圖,則PLC程序中存在競(jìng)態(tài)race。
全文摘要
本發(fā)明一種檢測(cè)PLC梯形圖程序中是否存在競(jìng)態(tài)的方法,通過(guò)計(jì)算普通Petri網(wǎng)的可達(dá)圖來(lái)確定待檢測(cè)程序中是否存在競(jìng)態(tài),不僅可以一次性完成檢測(cè)工作,而且可以讓程序員清晰、直觀地從可達(dá)圖中直接發(fā)現(xiàn)程序中隱含的邏輯錯(cuò)誤,同時(shí)檢測(cè)的每個(gè)步驟都可以由計(jì)算機(jī)完成,所以在效率上也更加突出,并達(dá)到自動(dòng)化的標(biāo)準(zhǔn)。
文檔編號(hào)G05B19/05GK103019233SQ20121056479
公開(kāi)日2013年4月3日 申請(qǐng)日期2012年12月21日 優(yōu)先權(quán)日2012年12月21日
發(fā)明者齊鵬飛, 羅繼亮, 陳雪琨 申請(qǐng)人:華僑大學(xué)