本發(fā)明涉及可編程邏輯控制領(lǐng)域。具體地,本發(fā)明涉及一種監(jiān)測(cè)程序的執(zhí)行的方法和裝置。
背景技術(shù):
目前,可編程邏輯控制器被廣泛的用于消費(fèi)類(lèi)電子、工業(yè)控制、航天航空等諸多領(lǐng)域。在一些涉及功能安全的領(lǐng)域,需要嚴(yán)格地監(jiān)測(cè)可編程邏輯控制器中的程序執(zhí)行順序,確保程序按照預(yù)設(shè)的軌跡運(yùn)行,保證人身及財(cái)產(chǎn)安全。
現(xiàn)有的程序順序監(jiān)控技術(shù)監(jiān)控準(zhǔn)確度較低,有可能無(wú)法發(fā)現(xiàn)特定的程序執(zhí)行順序錯(cuò)誤,導(dǎo)致監(jiān)控失效,進(jìn)而導(dǎo)致程序執(zhí)行錯(cuò)誤。
針對(duì)上述的問(wèn)題,目前尚未提出有效地解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種監(jiān)測(cè)程序的執(zhí)行的方法和裝置,解決了相關(guān)技術(shù)中對(duì)象同步方法所導(dǎo)致的問(wèn)題。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種監(jiān)測(cè)程序的執(zhí)行的方法,包括:按順序執(zhí)行程序的每個(gè)子程序,記錄當(dāng)前執(zhí)行的子程序調(diào)用的子程序的標(biāo)識(shí)符,其中,每個(gè)子程序被分別分配唯一的標(biāo)識(shí)符,獲取當(dāng)前執(zhí)行的子程序的下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符,以及比較下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符以監(jiān)測(cè)程序的執(zhí)行,其中,如果下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符不同,則確定子程序調(diào)用錯(cuò)誤。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法還包括:記錄每個(gè)子程序執(zhí)行的次數(shù),獲取預(yù)期的每個(gè)子程序執(zhí)行的次數(shù),以及比較記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)以監(jiān)測(cè)程序的執(zhí)行,其中,如果記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)不同,則確定程序執(zhí)行錯(cuò)誤。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,其中,標(biāo)識(shí)符是1到n的編號(hào),其中,n是第n個(gè)執(zhí)行的子程序的編號(hào)。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括:創(chuàng)建變量,變量用于記錄當(dāng)前執(zhí)行的子程序調(diào)用的子程序的編號(hào),變量的初始值為0,其中,如果當(dāng)前執(zhí)行的子程序結(jié)束,則設(shè)變量的值為調(diào)用的子程序的編號(hào)。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括:創(chuàng)建數(shù)組,數(shù)組用于記錄每個(gè)子程序執(zhí)行的次數(shù),數(shù)組包括n個(gè)元素,數(shù)組的n個(gè)元素的初始值為0,并且,程序中的第一個(gè)子程序開(kāi)始執(zhí)行后,則數(shù)組中對(duì)應(yīng)的第一個(gè)元素的值加1。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,其中,如果下一個(gè)實(shí)際執(zhí)行的子程序的編號(hào)與變量的值相同,則確定程序的子程序按順序正確執(zhí)行。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括,如果確定程序的子程序按順序正確執(zhí)行,則數(shù)組中與下一個(gè)實(shí)際執(zhí)行的子程序?qū)?yīng)的元素的值加1。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括:在所有子程序正確執(zhí)行結(jié)束后,檢查數(shù)組,其中,如果數(shù)組中的各元素的值與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)相同,則確定程序執(zhí)行正確,并且將數(shù)組和變量清零。
根據(jù)本發(fā)明的另一實(shí)施例,提供了一種監(jiān)測(cè)程序的執(zhí)行的裝置,包括:執(zhí)行模塊,用于按順序執(zhí)行程序的每個(gè)子程序,標(biāo)識(shí)符模塊,用于記錄當(dāng)前執(zhí)行的子程序調(diào)用的子程序的標(biāo)識(shí)符,其中,每個(gè)子程序被分別分配唯一的標(biāo)識(shí)符,第一獲取模塊,用于獲取當(dāng)前執(zhí)行的子程序的下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符,以及第一比較模塊,用于比較下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符以監(jiān)測(cè)程序的執(zhí)行,其中,如果下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符不同,則確定子程序調(diào)用錯(cuò)誤。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的裝置,還包括:次數(shù)記錄模塊,用于記錄每個(gè)子程序執(zhí)行的次數(shù),第二獲取模塊,用于獲取預(yù)期的每個(gè)子程序執(zhí)行的次數(shù),以及第二比較模塊,用于比較記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)以監(jiān)測(cè)程序的執(zhí)行,其中,如果記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)不同,則確定程序執(zhí)行錯(cuò)誤。
在本發(fā)明實(shí)施例中采用了一種新的方法,解決了可編程邏輯控制器中程序順序執(zhí)行監(jiān)控的問(wèn)題。通過(guò)本發(fā)明可以準(zhǔn)確定位程序執(zhí)行的錯(cuò)誤位置,便于后期的排查與分析。本發(fā)明方法簡(jiǎn)單,監(jiān)控準(zhǔn)確性高,不需要改變被監(jiān)控程序的現(xiàn)有結(jié)構(gòu),監(jiān)控方法資源占用極少。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法的示意圖;
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法的示意圖;
圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的裝置的示意圖;
圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的裝置的示意圖;
圖5是根據(jù)本發(fā)明的示例性實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法的示意圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲取的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤4送?,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或模塊的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或模塊,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或模塊。
通常,一個(gè)程序包含一個(gè)或多個(gè)子程序。通過(guò)設(shè)計(jì)一個(gè)或多個(gè)子程序,完成整個(gè)程序的設(shè)計(jì)。為了驗(yàn)證程序是否能夠按照預(yù)定的方式執(zhí)行,在程序的各個(gè)子程序設(shè)計(jì)完成后,需要驗(yàn)證程序的各個(gè)子程序是否能夠按照預(yù)設(shè)的順序執(zhí)行。即,程序中的第一個(gè)子程序執(zhí)行后,該第一個(gè)子程序?qū)⒄{(diào)用第二個(gè)要運(yùn)行的子程序,第二個(gè)子程序在第一個(gè)子程序執(zhí)行結(jié)束后運(yùn)行,并且其本身在執(zhí)行結(jié)束后繼續(xù)調(diào)用下一個(gè)要執(zhí)行的子程序,以此類(lèi)推,直至程序中的所有子程序按照調(diào)用關(guān)系執(zhí)行完畢。然而,難以準(zhǔn)確地監(jiān)控程序執(zhí)行的順序。如果程序執(zhí)行的順序錯(cuò)誤,則程序監(jiān)控失效,進(jìn)而導(dǎo)致程序執(zhí)行錯(cuò)誤。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種監(jiān)測(cè)程序的執(zhí)行的方法。圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法的示意圖。根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法包括:S102,按順序執(zhí)行程序的每個(gè)子程序,S104,記錄當(dāng)前執(zhí)行的子程序調(diào)用的子程序的標(biāo)識(shí)符,其中,每個(gè)子程序被分別分配唯一的標(biāo)識(shí)符,S106,獲取當(dāng)前執(zhí)行的子程序的下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符,以及S108,比較下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符以監(jiān)測(cè)程序的執(zhí)行,其中,S110,如果下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符不同,則確定子程序調(diào)用錯(cuò)誤。根據(jù)本發(fā)明實(shí)施例的方法監(jiān)控程序中子程序的調(diào)用關(guān)系。具體地,每個(gè)子程序都被分配唯一的標(biāo)識(shí)符,當(dāng)子程序被執(zhí)行時(shí),可以通過(guò)識(shí)別該標(biāo)識(shí)符監(jiān)控被執(zhí)行的子程序與將被執(zhí)行的子程序,使得為了監(jiān)控子程序的調(diào)用關(guān)系,可以監(jiān)控代表子程序的標(biāo)識(shí)符。調(diào)用關(guān)系涉及當(dāng)前執(zhí)行的子程序以及該子程序調(diào)用的下一個(gè)執(zhí)行的子程序。然而,如果程序受到干擾,那么子程序可能不按照預(yù)定的軌跡運(yùn)行。在這種情況下,下一個(gè)實(shí)際執(zhí)行的子程序?qū)⒉皇亲映绦蛩{(diào)用的子程序,因此,該下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符將與子程序所調(diào)用的子程序的標(biāo)識(shí)符不同。通過(guò)比較下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符,可以確定子程序沒(méi)有按照預(yù)定的軌跡運(yùn)行,則進(jìn)而可以確定子程序調(diào)用錯(cuò)誤。以這樣的方式,根據(jù)本發(fā)明實(shí)施例的方法提供了一種僅通過(guò)比較標(biāo)識(shí)符即可監(jiān)控子程序運(yùn)行軌跡是否正確的解決方案,方法簡(jiǎn)單且準(zhǔn)確性高,占用資源極少。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例提供了監(jiān)測(cè)程序的執(zhí)行的方法。圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法的示意圖。根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法還包括:S202,記錄每個(gè)子程序執(zhí)行的次數(shù),S204,獲取預(yù)期的每個(gè)子程序執(zhí)行的次數(shù),以及S206,比較記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)以監(jiān)測(cè)程序的執(zhí)行,其中,S208,如果記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)不同,則確定程序執(zhí)行錯(cuò)誤。在本發(fā)明的實(shí)施例中,不僅可以監(jiān)控子程序的運(yùn)行軌跡,還可以監(jiān)控各個(gè)子程序是否均正確執(zhí)行。在程序的執(zhí)行過(guò)程中,如果受到干擾或者其他因素導(dǎo)致子程序沒(méi)有按照預(yù)定軌跡運(yùn)行,那么,由于應(yīng)當(dāng)運(yùn)行的子程序沒(méi)有運(yùn)行,而運(yùn)行的是其他的子程序,則在程序執(zhí)行結(jié)束后,各個(gè)子程序執(zhí)行的次數(shù)會(huì)與預(yù)期的執(zhí)行次數(shù)不同。本發(fā)明實(shí)施例的方法能夠記錄每個(gè)子程序執(zhí)行的次數(shù),提供了額外的監(jiān)控方式,如果記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)不同,則說(shuō)明在程序的執(zhí)行中,各個(gè)子程序沒(méi)有按照預(yù)期的順序或者以預(yù)期的方式正確執(zhí)行,進(jìn)一步確定程序執(zhí)行錯(cuò)誤。以這樣的方式,本發(fā)明實(shí)施例的方法提供進(jìn)一步的監(jiān)控方案,該方案僅需要記錄和比較記錄每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)即可實(shí)現(xiàn)監(jiān)控,方法簡(jiǎn)單且占用資源極少。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,其中,標(biāo)識(shí)符是1到n的編號(hào),其中,n是第n個(gè)執(zhí)行的子程序的編號(hào)。在設(shè)定每個(gè)子程序的標(biāo)識(shí)符時(shí),可以采用如字母、數(shù)字、符號(hào)等的各種標(biāo)識(shí)符,本發(fā)明實(shí)施方式不限于此。例如,可以采用數(shù)字編號(hào)作為標(biāo)識(shí)符。第一個(gè)執(zhí)行的子程序的標(biāo)識(shí)符可以采用為1的編號(hào),第二個(gè)執(zhí)行的子程序的標(biāo)識(shí)符采用為2的編號(hào),以此類(lèi)推,程序中的第n個(gè)執(zhí)行的子程序則采用為n的編號(hào)。以這樣的方式,每個(gè)子程序被標(biāo)記有唯一的編號(hào)作為標(biāo)識(shí)符,標(biāo)識(shí)清楚且能夠表示程序中的子程序的執(zhí)行順序,方便程序監(jiān)控過(guò)程中人員的操作。與此同時(shí),這種編號(hào)占用的資源極少。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括:創(chuàng)建變量,變量用于記錄當(dāng)前執(zhí)行的子程序調(diào)用的子程序的編號(hào),變量的初始值為0,其中,如果當(dāng)前執(zhí)行的子程序結(jié)束,則設(shè)變量的值為調(diào)用的子程序的編號(hào)。如果子程序沒(méi)有按照預(yù)定的順序執(zhí)行,那么要執(zhí)行的子程序?qū)?huì)被實(shí)際執(zhí)行的子程序代替使得其沒(méi)有被執(zhí)行,因此,需要一種方法記錄該沒(méi)有被執(zhí)行但應(yīng)當(dāng)被執(zhí)行的子程序。本發(fā)明實(shí)施例采用例如創(chuàng)建變量的方式,用于記錄當(dāng)前執(zhí)行的子程序調(diào)用的子程序的編號(hào)。在沒(méi)有子程序運(yùn)行時(shí),變量的初始值被設(shè)為0。當(dāng)執(zhí)行第一個(gè)子程序后,第一個(gè)子程序?qū)⒄{(diào)用第二個(gè)要執(zhí)行的子程序,該第二個(gè)要執(zhí)行的子程序?qū)?yīng)的編號(hào)2將被記錄為變量的值。當(dāng)觀察或讀取變量中的值時(shí),將能夠知曉當(dāng)前程序調(diào)用的子程序的編號(hào),進(jìn)而知曉調(diào)用的應(yīng)執(zhí)行的子程序。以這樣的方式可以清楚記錄調(diào)用的子程序,占用資源極少,方便程序監(jiān)控過(guò)程中對(duì)子程序運(yùn)行數(shù)據(jù)的采集。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括:創(chuàng)建數(shù)組,數(shù)組用于記錄每個(gè)子程序執(zhí)行的次數(shù),數(shù)組包括n個(gè)元素,數(shù)組的n個(gè)元素的初始值為0,并且,程序中的第一個(gè)子程序開(kāi)始執(zhí)行后,則數(shù)組中對(duì)應(yīng)的第一個(gè)元素的值加1。本發(fā)明實(shí)施例的方法采用例如創(chuàng)建數(shù)組的方式記錄每個(gè)子程序執(zhí)行的次數(shù),每個(gè)子程序在該數(shù)組中都有對(duì)應(yīng)的元素。對(duì)于由n個(gè)子程序構(gòu)成的程序,該數(shù)組中具有相應(yīng)的n個(gè)元素,每個(gè)元素中的值對(duì)應(yīng)于相應(yīng)子程序的執(zhí)行的次數(shù)。在程序執(zhí)行前,每個(gè)子程序的執(zhí)行次數(shù)為0,該數(shù)組中n個(gè)元素的初始值被設(shè)為0。以這樣的方式,可以記錄子程序執(zhí)行的次數(shù),可以清楚確定程序是否按照預(yù)定軌跡運(yùn)行,方法簡(jiǎn)單,占用資源極少。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,其中,如果下一個(gè)實(shí)際執(zhí)行的子程序的編號(hào)與變量的值相同,則確定程序的子程序按順序正確執(zhí)行。在為每個(gè)程序編號(hào)后,根據(jù)本發(fā)明實(shí)施例的方法可以通過(guò)僅比較執(zhí)行的子程序與上一個(gè)子程序調(diào)用的子程序的編號(hào)是否相同,即,比較執(zhí)行的子程序與變量的值是否相同,即可確定執(zhí)行的子程序是否是調(diào)用的子程序,即確定執(zhí)行的子程序是否是應(yīng)當(dāng)執(zhí)行的子程序。如果比較結(jié)果是相同,則能夠確定程序的子程序按照順序正確執(zhí)行。以這樣的方式,僅比較編號(hào)及變量的值即可確定子程序執(zhí)行順序是否正確,方法簡(jiǎn)單,占用資源極少。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括,如果確定程序的子程序按順序正確執(zhí)行,則數(shù)組中與下一個(gè)實(shí)際執(zhí)行的子程序?qū)?yīng)的元素的值加1。根據(jù)本發(fā)明實(shí)施例的方法,如果確定子程序執(zhí)行順序正確,則記錄子程序執(zhí)行的次數(shù),用于后面的程序次數(shù)的監(jiān)控。對(duì)于第一個(gè)執(zhí)行的子程序,數(shù)組的第1個(gè)元素的初始值0加1,代表第一個(gè)子程序執(zhí)行了1次。相應(yīng)地,如果第n個(gè)子程序執(zhí)行,則第n個(gè)子程序在數(shù)組中對(duì)應(yīng)的第n個(gè)元素的值加1。以這樣的方式,可以以數(shù)組記錄每個(gè)子程序執(zhí)行的次數(shù),能夠清晰反映每個(gè)子程序執(zhí)行的次數(shù)。
進(jìn)一步地,根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法,還包括:在所有子程序正確執(zhí)行結(jié)束后,檢查數(shù)組,其中,如果數(shù)組中的各元素的值與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)相同,則確定程序執(zhí)行正確,并且將數(shù)組和變量清零。在程序的所有子程序正確執(zhí)行后,本發(fā)明實(shí)施例的方法提供額外的程序監(jiān)控。在前面的過(guò)程中記錄的各個(gè)子程序執(zhí)行的次數(shù)可以用于與預(yù)計(jì)的各個(gè)子程序的執(zhí)行次數(shù)作比較。對(duì)于正確執(zhí)行的程序,其中各個(gè)子程序的執(zhí)行次數(shù)應(yīng)當(dāng)是預(yù)計(jì)的次數(shù),使用該預(yù)計(jì)的次數(shù)與數(shù)組中代表各個(gè)子程序執(zhí)行次數(shù)的各元素的值作比較,如果比較結(jié)果相同,則確定程序的各個(gè)子程序執(zhí)行次數(shù)正確,進(jìn)一步確定程序執(zhí)行正確。同時(shí),驗(yàn)證了程序執(zhí)行正確后,將用于記錄子程序執(zhí)行次數(shù)的數(shù)組與記錄調(diào)用關(guān)系的變量清零,以用于以后的程序監(jiān)控。以這樣的方式,本發(fā)明實(shí)施例提供了監(jiān)控調(diào)用關(guān)系之外的額外的監(jiān)控方法,采用數(shù)組的方式檢驗(yàn)程序的執(zhí)行是否存在問(wèn)題,進(jìn)一步保證了程序監(jiān)控的準(zhǔn)確性。
本發(fā)明還包括執(zhí)行上述方法的裝置,用于實(shí)現(xiàn)例如可編程邏輯控制器中程序執(zhí)行順序的監(jiān)控。將在下文描述該裝置的實(shí)施例。
根據(jù)本發(fā)明的另一實(shí)施例,提供了一種監(jiān)測(cè)程序的執(zhí)行的裝置。圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的裝置的示意圖。根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的裝置包括:執(zhí)行模塊301,用于按順序執(zhí)行程序的每個(gè)子程序,標(biāo)識(shí)符模塊303,用于記錄當(dāng)前執(zhí)行的子程序調(diào)用的子程序的標(biāo)識(shí)符,其中,每個(gè)子程序被分別分配唯一的標(biāo)識(shí)符,第一獲取模塊305,用于獲取當(dāng)前執(zhí)行的子程序的下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符,以及第一比較模塊307,用于比較下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符以監(jiān)測(cè)程序的執(zhí)行,其中,如果下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符不同,則確定子程序調(diào)用錯(cuò)誤。根據(jù)本發(fā)明實(shí)施例的裝置監(jiān)控程序中由執(zhí)行模塊301執(zhí)行的子程序的調(diào)用關(guān)系。具體地,每個(gè)子程序都被標(biāo)識(shí)符模塊303分配唯一的標(biāo)識(shí)符,當(dāng)子程序被執(zhí)行模塊301執(zhí)行時(shí),可以通過(guò)識(shí)別該標(biāo)識(shí)符監(jiān)控被執(zhí)行的子程序與將被執(zhí)行的子程序,使得為了監(jiān)控子程序的調(diào)用關(guān)系,可以監(jiān)控代表子程序的標(biāo)識(shí)符。調(diào)用關(guān)系涉及當(dāng)前執(zhí)行的子程序以及該子程序調(diào)用的下一個(gè)執(zhí)行的子程序。然而,如果程序受到干擾,那么子程序可能不按照預(yù)定的軌跡運(yùn)行。在這種情況下,下一個(gè)實(shí)際執(zhí)行的子程序?qū)⒉皇亲映绦蛩{(diào)用的子程序,因此,第一獲取模塊305獲取的該下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符將與子程序所調(diào)用的子程序的標(biāo)識(shí)符不同。通過(guò)第一比較模塊307比較下一個(gè)實(shí)際執(zhí)行的子程序的標(biāo)識(shí)符與調(diào)用的子程序的標(biāo)識(shí)符,可以確定子程序沒(méi)有按照預(yù)定的軌跡運(yùn)行,則進(jìn)而可以確定子程序調(diào)用錯(cuò)誤。以這樣的方式,根據(jù)本發(fā)明實(shí)施例的裝置提供了一種僅通過(guò)比較標(biāo)識(shí)符即可監(jiān)控子程序運(yùn)行軌跡是否正確的解決方案,簡(jiǎn)單且準(zhǔn)確性高,占用資源極少。
進(jìn)一步地,根據(jù)本發(fā)明的另一實(shí)施例,提供了一種監(jiān)測(cè)程序的執(zhí)行的裝置。圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的裝置的示意圖。根據(jù)本發(fā)明的一個(gè)實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的裝置包括:次數(shù)記錄模塊401,用于記錄每個(gè)子程序執(zhí)行的次數(shù),第二獲取模塊403,用于獲取預(yù)期的每個(gè)子程序執(zhí)行的次數(shù),以及第二比較模塊405,用于比較記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)以監(jiān)測(cè)程序的執(zhí)行,其中,如果記錄的每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)不同,則確定程序執(zhí)行錯(cuò)誤。在本發(fā)明的實(shí)施例中,不僅可以監(jiān)控子程序的運(yùn)行軌跡,還可以監(jiān)控各個(gè)子程序是否均正確執(zhí)行。在程序的執(zhí)行過(guò)程中,如果受到干擾或者其他因素導(dǎo)致子程序沒(méi)有按照預(yù)定軌跡運(yùn)行,那么,由于應(yīng)當(dāng)運(yùn)行的子程序沒(méi)有運(yùn)行,而運(yùn)行的是其他的子程序,則在程序執(zhí)行結(jié)束后,各個(gè)子程序執(zhí)行的次數(shù)會(huì)與預(yù)期的執(zhí)行次數(shù)不同。本發(fā)明實(shí)施例的裝置能夠采用次數(shù)記錄模塊401記錄每個(gè)子程序執(zhí)行的次數(shù),提供了額外的監(jiān)控方式,如果本發(fā)明實(shí)施例的裝置的第二比較模塊405比較的次數(shù)記錄模塊401記錄的每個(gè)子程序執(zhí)行的次數(shù)與第二獲取模塊403獲取的預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)不同,則說(shuō)明在程序的執(zhí)行中,各個(gè)子程序沒(méi)有按照預(yù)期的順序或者以預(yù)期的方式正確執(zhí)行,進(jìn)一步確定程序執(zhí)行錯(cuò)誤。以這樣的方式,本發(fā)明實(shí)施例的裝置提供進(jìn)一步的監(jiān)控方案,該方案僅需要記錄和比較記錄每個(gè)子程序執(zhí)行的次數(shù)與預(yù)期的每個(gè)子程序執(zhí)行的次數(shù)即可實(shí)現(xiàn)監(jiān)控,簡(jiǎn)單且占用資源極少。
本實(shí)施例中的監(jiān)測(cè)程序的執(zhí)行的裝置還可以執(zhí)行參考上述實(shí)施例中描述的監(jiān)測(cè)程序的執(zhí)行的方法,本實(shí)施例在此不再贅述。
本發(fā)明提供的監(jiān)測(cè)程序的執(zhí)行的方法還可以參考本發(fā)明的示例性實(shí)施例。以下將描述本發(fā)明的示例性實(shí)施例。
圖5是根據(jù)本發(fā)明的示例性實(shí)施例的監(jiān)測(cè)程序的執(zhí)行的方法的示意圖。
首先,在程序的各個(gè)子程序設(shè)計(jì)完成后,分別為每個(gè)子程序Fun(1)~Fun(n)分別分配一個(gè)唯一的編號(hào)Fun_id,例如1~n。例如,F(xiàn)un(1)的Fun1_id為1,F(xiàn)un(1)的Fun2_id為2。
然后,創(chuàng)建一個(gè)n個(gè)元素的數(shù)組E(),其元素為E(1)~E(n),這個(gè)數(shù)組將被用來(lái)記錄每個(gè)子程序被執(zhí)行的次數(shù),設(shè)定數(shù)組的初始值為0。
創(chuàng)建一個(gè)變量R(x),用來(lái)記錄程序的調(diào)用關(guān)系,設(shè)初始值為0。
程序順序執(zhí)行監(jiān)控方法如圖5所示,假設(shè)程序從Fun(1)開(kāi)始執(zhí)行,S502。Fun(1)執(zhí)行后,會(huì)調(diào)用Fun(2)。
當(dāng)Fun(1)首先開(kāi)始執(zhí)行后,其對(duì)應(yīng)的數(shù)組元素E(1)內(nèi)的數(shù)字加1,S504,代表Fun(1)被執(zhí)行了1次。當(dāng)Fun(1)執(zhí)行結(jié)束后,它即將調(diào)用Fun(2)。此時(shí),將R(x)被Fun(1)填入Fun(2)的編號(hào)2,S506。至此,F(xiàn)un(1)執(zhí)行結(jié)束。
假如程序按照正常的軌跡運(yùn)行,那么Fun(2)將被開(kāi)始執(zhí)行,S508。Fun(2)首先需要檢查R(x)內(nèi)的值是否為自己的編號(hào),S510。如果是自己的編號(hào),那么代表子程序間調(diào)用關(guān)系正確,程序正在按照預(yù)定軌跡執(zhí)行。數(shù)組元素E(2)內(nèi)的值加1,S512。
假如程序受到干擾或者因其他因素導(dǎo)致其沒(méi)有按照預(yù)定軌跡運(yùn)行,那么Fun(1)后被執(zhí)行的程序?qū)⒉粫?huì)是Fun(2)。此時(shí),執(zhí)行的程序可以設(shè)為Fun(x),F(xiàn)un(x)開(kāi)始執(zhí)行后,首先檢查R(x)內(nèi)的值是否為自己的編號(hào)。由于R(x)被Fun(1)填入的是2,所以Fun(x)會(huì)發(fā)現(xiàn)自己的編號(hào)與R(x)內(nèi)的編號(hào)不同。此時(shí),可以證明子程序調(diào)用錯(cuò)誤,程序沒(méi)有按照預(yù)定的軌跡運(yùn)行,按照?qǐng)?zhí)行錯(cuò)誤處理,S514。
當(dāng)所有子程序正確執(zhí)行結(jié)束后,最后檢測(cè)子程序CheckFun應(yīng)檢查數(shù)組E(),查看每個(gè)子程序的執(zhí)行次數(shù)是否和預(yù)期的執(zhí)行次數(shù)相同,S516。如果執(zhí)行次數(shù)符合預(yù)期,那么可以認(rèn)為程序執(zhí)行正確,數(shù)組E()和變量R(x)應(yīng)被清零,S518。如果執(zhí)行次數(shù)超過(guò)或者少于預(yù)期的次數(shù),那么可以確定程序的執(zhí)行存在問(wèn)題,按照?qǐng)?zhí)行錯(cuò)誤處理,S520。
最終,子程序順序執(zhí)行結(jié)束,S522。
在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。
本發(fā)明如上描述的方法和裝置解決了可編程邏輯控制器中程序順序執(zhí)行監(jiān)控的問(wèn)題。通過(guò)本發(fā)明實(shí)施例提供的方法和裝置,可以準(zhǔn)確定位程序執(zhí)行的錯(cuò)誤位置,便于后期的排查與分析。本發(fā)明實(shí)施例提供的方法和裝置簡(jiǎn)單,監(jiān)控準(zhǔn)確性高,不需要改變被監(jiān)控程序的現(xiàn)有結(jié)構(gòu),資源占用極少。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的客戶(hù)端,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述模塊的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)模塊或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,模塊或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說(shuō)明的模塊可以是或者也可以不是物理上分開(kāi)的,作為模塊顯示的部件可以是或者也可以不是物理模塊,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)模塊上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能模塊可以集成在一個(gè)處理模塊中,也可以是各個(gè)模塊單獨(dú)物理存在,也可以?xún)蓚€(gè)或兩個(gè)以上模塊集成在一個(gè)模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。