專利名稱:一種用于組態(tài)軟件中庫的管理方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及組態(tài)軟件技術(shù)領(lǐng)域,更具體地說,涉及一種用于組態(tài)軟件中庫的管理 方法及系統(tǒng)。
背景技術(shù):
組態(tài)軟件是指數(shù)據(jù)采集與過程控制的專用軟件,它們是在自動控制系統(tǒng)監(jiān)控層一 級的軟件平臺和開發(fā)環(huán)境,使用靈活的組態(tài)方式,為用戶提供快速構(gòu)建工業(yè)自動控制系統(tǒng) 監(jiān)控功能的、通用層次的軟件工具。組態(tài)軟件的作用主要是利用庫中提供的功能模塊完成 用戶所需要的邏輯控制功能,用組態(tài)軟件中提供的庫代替計(jì)算機(jī)編程,達(dá)到快速高效的完 成任務(wù)的目的。在工業(yè)控制領(lǐng)域,組態(tài)軟件利用庫中提供的強(qiáng)大的功能模塊,方便工程師快速的 組織算法,完成所需功能,組態(tài)軟件中的庫是構(gòu)成算法的基礎(chǔ)。組態(tài)軟件中的庫由一些完成 特定功能的功能塊和函數(shù)構(gòu)成。例如要執(zhí)行(A+B)*C的操作,只需要庫中提供加法功能塊 和乘法功能塊即可。這里的加法和乘法等大量的功能塊,構(gòu)成了組態(tài)軟件中的庫??梢?,庫 是組態(tài)軟件完成任務(wù)的基礎(chǔ),合理高效的管理庫可以使工程人員在組態(tài)軟件中快速高效的 完成任務(wù)。當(dāng)前組態(tài)軟件的庫管理主要采用以下兩種方式第一種方式是,只提供標(biāo)準(zhǔn)庫,用戶不能自定義庫,因此,用戶在完成任務(wù)時(shí)對于 庫的選擇具有很大的局限性。組態(tài)軟件的目的就是最大程度的提高用戶完成任務(wù)的效率, 然而,采用該種庫管理方式的組態(tài)軟件不能很好的實(shí)現(xiàn)這一目的;第二種方式中雖然提供了用戶自定義庫的功能,但是當(dāng)自定義庫發(fā)生改變時(shí),以 前引用該庫的工程文件中該庫的內(nèi)容同樣被自動更新到最新版本。例如庫Lib被工程Pro 引用,之后因?yàn)橛脩舻男枨?,將Lib進(jìn)行了更改。此時(shí),如果工程Pro再次引用庫Lib時(shí),其 引用的庫Lib的內(nèi)容是已發(fā)生修改的庫內(nèi)容。在工業(yè)控制領(lǐng)域,為保證任務(wù)的正確性,某些 任務(wù)需引用固定內(nèi)容的庫,已經(jīng)被當(dāng)前任務(wù)引用的庫將不允許被用戶修改,即使新定義的 庫與已經(jīng)存在的庫具有繼承性。這種情況下,若發(fā)生庫修改,則需要單獨(dú)對每次發(fā)生修改的 庫進(jìn)行存儲??梢?,第二種庫管理方式將造成自定義庫的大量冗余。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例提供一種用于組態(tài)軟件中庫的管理方法及系統(tǒng),以避免 當(dāng)原有庫發(fā)生修改時(shí),外部任務(wù)引用修改后的庫而產(chǎn)生錯誤的情形。本發(fā)明實(shí)施例提供一種用于組態(tài)軟件中庫的管理方法,包括獲取修改指令,根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改;將所述當(dāng)前庫的信息進(jìn)行備份,并對修改后的庫信息進(jìn)行備份;根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修改后的庫信息輸出給 用戶。
優(yōu)選的,所述對修改后的庫信息進(jìn)行備份,包括當(dāng)在預(yù)置訪問周期內(nèi)多次根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改時(shí),僅對最終修改 后的庫信息進(jìn)行備份。優(yōu)選的,所述根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修改后的 庫信息輸出給用戶,包括獲取用戶對所述當(dāng)前庫的調(diào)用請求;判斷所述當(dāng)前庫是否存在修改后的庫信息;根據(jù)所述用戶對所述當(dāng)前庫的調(diào)用請求,判斷是否需要向用戶提供所述修改后的 庫信息;如果否,則將所述當(dāng)前庫信息輸出給用戶。優(yōu)選的,所述判斷所述當(dāng)前庫是否存在修改后的庫信息,包括判斷庫信息中的庫版本信息是否發(fā)生變化,如果是,則確定所述當(dāng)前庫存在修改 后的庫信息;如果否,則確定所述當(dāng)前庫不存在修改后的庫信息。
優(yōu)選的,所述方法還包括更新修改后的庫和原引用庫之間的引用關(guān)系。優(yōu)選的,所述方法還包括判斷修改后的庫和原引用庫之間的引用關(guān)系中是否存在環(huán)的引用關(guān)系,如果是, 則將環(huán)的引用關(guān)系進(jìn)行刪除。一種用于組態(tài)軟件中庫的管理系統(tǒng),包括修改指令獲取裝置,用于獲取修改指令,根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改;備份裝置,用于將所述當(dāng)前庫的信息進(jìn)行備份,并對修改后的庫信息進(jìn)行備份;選擇輸出裝置,用于根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修 改后的庫信息輸出給用戶。優(yōu)選的,當(dāng)在預(yù)置訪問周期內(nèi)多次根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改時(shí),所述 備份裝置僅對最終修改后的庫信息進(jìn)行備份。優(yōu)選的,所述選擇輸出裝置包括調(diào)用請求獲取模塊,用于獲取用戶對所述當(dāng)前庫的調(diào)用請求;庫信息判斷模塊,用于判斷所述當(dāng)前庫是否存在修改后的庫信息;庫輸出判斷模塊,用于根據(jù)所述用戶對所述當(dāng)前庫的調(diào)用請求,判斷是否需要向 用戶提供所述修改后的庫信息;如果否,則將所述當(dāng)前庫信息輸出給用戶。優(yōu)選的,所述系統(tǒng)還包括更新裝置,用于更新修改后的庫和原引用庫之間的引用關(guān)系。優(yōu)選的,所述系統(tǒng)還包括引用關(guān)系刪除裝置,用于判斷修改后的庫和原引用庫之間的引用關(guān)系中是否存在 環(huán)的引用關(guān)系,如果是,則將環(huán)的引用關(guān)系進(jìn)行刪除。同現(xiàn)有技術(shù)相比,本發(fā)明提供的技術(shù)方案中,當(dāng)組態(tài)軟件中的庫通過修改發(fā)生變 化時(shí),將修改后的庫的相關(guān)信息進(jìn)行備份,同時(shí),對修改之前的原有庫的相關(guān)信息進(jìn)行存 儲,使得組態(tài)軟件中針對某一庫既存儲有原信息,也存儲有修改后的新信息。當(dāng)外部任務(wù)調(diào) 用該庫時(shí),可以根據(jù)實(shí)際任務(wù)需要,將原有庫信息或是修改后的庫信息提供給用戶,從而保 證特定任務(wù)需要調(diào)用固定庫信息的需求,避免當(dāng)原有庫發(fā)生修改時(shí),外部任務(wù)引用修改后的庫而產(chǎn)生錯誤的情形;此外,在對庫的某一訪問時(shí)間段內(nèi),如果發(fā)生對庫的多次修改,由于本發(fā)明技術(shù)方 案中僅對最終的庫信息進(jìn)行存儲,因此,避免造成產(chǎn)生大量的自定義庫的冗余。
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中 所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí) 施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖 獲得其他的附圖。圖1為本發(fā)明實(shí)施例提供的一種用于組態(tài)軟件中庫的管理方法步驟流程圖;圖2為本發(fā)明實(shí)施例提供的庫信息輸出的流程示意圖;圖3為本發(fā)明實(shí)施例提供的庫之間的關(guān)系圖;圖4為圖3中關(guān)系圖的數(shù)據(jù)表示;圖5為本發(fā)明實(shí)施例提供的一種用于組態(tài)軟件中庫的管理系統(tǒng)結(jié)構(gòu)示意圖;圖6為本發(fā)明實(shí)施例提供的另一種用于組態(tài)軟件中庫的管理系統(tǒng)結(jié)構(gòu)示意圖;圖7為本發(fā)明實(shí)施例提供的又一種用于組態(tài)軟件中庫的管理系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于 本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。下面首先對本發(fā)明提供的用于組態(tài)軟件中庫的管理方法進(jìn)行說明,參照圖1所 示,所述方法包括步驟101、獲取修改指令,根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改;步驟102、將所述當(dāng)前庫的信息進(jìn)行備份,并對修改后的庫信息進(jìn)行備份;該步驟中,既存儲有修改后的庫信息,同時(shí)存儲有原有庫的信息,從而,便于用戶 根據(jù)實(shí)際任務(wù)需要,引用適當(dāng)?shù)膸煨畔?;步驟103、根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修改后的庫信 息輸出給用戶。該步驟中,判斷是將原有的當(dāng)前庫信息提供給用戶,還是將修改后的庫信息提供 給用戶,取決于實(shí)際任務(wù)的需要。本發(fā)明提供的技術(shù)方案中,當(dāng)組態(tài)軟件中的庫通過修改發(fā)生變化時(shí),將修改后的 庫的相關(guān)信息進(jìn)行備份,同時(shí),對修改之前的原有庫的相關(guān)信息進(jìn)行存儲,使得組態(tài)軟件中 針對某一庫既存儲有原信息,也存儲有修改后的新信息。當(dāng)外部任務(wù)調(diào)用該庫時(shí),可以根據(jù) 實(shí)際任務(wù)需要,將原有庫信息或是修改后的庫信息提供給用戶,從而保證特定任務(wù)需要調(diào) 用固定庫信息的需求,避免當(dāng)原有庫發(fā)生修改時(shí),外部任務(wù)引用修改后的庫而產(chǎn)生錯誤的 情形。在本發(fā)明的一個優(yōu) 選實(shí)施例中,當(dāng)在預(yù)置訪問周期內(nèi)多次根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改時(shí),僅對最終修改后的庫信息進(jìn)行備份。本發(fā)明的目的是在組態(tài)軟件中,增強(qiáng)用戶對庫的可操作性。用戶可以根據(jù)需求添 加自己的庫,從而方便任務(wù)的完成。但是,在對用戶開放這一權(quán)限的同時(shí),也增加了庫管理 的難度,即用戶在對非標(biāo)準(zhǔn)庫進(jìn)行讀寫操作的同時(shí),增加了版本控制的難度。用戶對現(xiàn)有 的庫進(jìn)行寫操作是針對某一任務(wù)的需求。如果每一個任務(wù)都要對現(xiàn)有的相應(yīng)的庫進(jìn)行修 改,并且對所有的修改庫進(jìn)行保存,無疑將占用大量的硬盤空間。本發(fā)明實(shí)施例在庫的版本 控制方面,采用的方式是在庫容器中只儲存最新的庫版本,當(dāng)發(fā)現(xiàn)外部任務(wù)所引用的庫已 發(fā)生修改,可在打開工程時(shí)提示用戶根據(jù)需要選擇是否將引用庫更新到最新版本。圖2示出的是本發(fā)明實(shí)施例中根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫 信息或修改后的庫信息輸出給用戶的具體流程,包括步驟201、獲取用戶對所述當(dāng)前庫的調(diào)用請求;步驟202、判斷所述當(dāng)前庫是否存在修改后的庫信息;如果是,則繼續(xù)步驟203 ;如 果否,則繼續(xù)步驟205 ;步驟203、根據(jù)所述用戶對所述當(dāng)前庫的調(diào)用請求,判斷是否需要向用戶提供所述 修改后的庫信息;如果是,則繼續(xù)步驟204 ;如果否,則繼續(xù)步驟205 ;步驟204、將所述修改后的庫信息輸出給用戶;步驟205,將所述當(dāng)前庫信息輸出給用戶。本發(fā)明實(shí)施例中,以庫版本信息作為判斷庫信息是否發(fā)生變化的標(biāo)識。實(shí)際應(yīng)用 中,為了便于操作,通常可以利用對庫進(jìn)行修改時(shí)的系統(tǒng)時(shí)間作為庫版本信息,其具體實(shí)施 方式如下打開庫文件,為了描述方便,以Libl表示庫文件,根據(jù)任務(wù)的需求,編輯庫Libl, 對Libl做相應(yīng)的修改;編譯完成后保存庫Libl,在保存庫Libl時(shí),可以進(jìn)行相應(yīng)的處理, 記錄庫Libl的變化情況。當(dāng)在記錄庫Libl的變化時(shí),以庫版本值作為唯一標(biāo)識。當(dāng)以 系統(tǒng)時(shí)間作為庫版本信息時(shí),在初始新建Libl庫時(shí),Libl庫的版本值取系統(tǒng)當(dāng)時(shí)的時(shí)間 tl,記為LiblVersionl。當(dāng)庫Libl發(fā)生變化執(zhí)行保存操作時(shí),取當(dāng)前的時(shí)間作為庫Libl 的臨時(shí)版本號,記為LiblVersionTemp。定義庫Libl變化之前的版本號為舊版本號,記為 LiblVersionOld,本實(shí)施例中初始條件下LiblVersionOld等于LiblVersionl。臨時(shí)版本號 代表此時(shí)的庫版本值并沒有被寫入Libl文件中。此時(shí)將舊版本號與臨時(shí)版本號進(jìn)行比較, 如果兩者不相等,則將臨時(shí)版本號寫入庫Libl中作為庫Libl的新版本號;如果兩者相等, 利用Hash函數(shù)法將臨時(shí)版本號中的時(shí)間遞增,再將相應(yīng)時(shí)間值寫入庫Libl文件中作為庫 Libl的版本號。其中,臨時(shí)版本號和舊版本號相等是由于系統(tǒng)時(shí)間設(shè)置的問題造成的。將庫臨時(shí)版本號和舊版本號進(jìn)行比較,保證了庫在變化過程中版本值的唯一性。 在本發(fā)明的庫版本控制法中,取庫的版本號作為庫是否變化的依據(jù),因此,庫的版本值必須 是唯一的。庫Libl執(zhí)行保存操作之后,將覆蓋以前的版本。在本系統(tǒng)中,每個庫都是唯一 的,只保留最新的版本,這樣減少了對硬盤空間的占用。當(dāng)外部任務(wù)Taskl發(fā)起對庫Libl的引用請求,由于Taskl中記錄了更新之前庫 Libl的內(nèi)容,因此,系統(tǒng)默認(rèn)Taskl發(fā)起的引用請求是對應(yīng)于未發(fā)生修改更新的庫。則根據(jù) Taskl中的記錄信息,可以獲知Taskl任務(wù)中記錄的原Libl版本號的信息。比較當(dāng)前硬盤中的庫Libl與Taskl中引用庫Libl相關(guān)信息,比較的對象是Taskl中記錄的Libl的版本值和當(dāng)前硬盤中的庫Libl的版本值。若兩者相等,代表Taskl中引用的庫Libl沒有發(fā)生變化,執(zhí)行打開操作即可;若兩者不相等,說明Taskl中引用的庫Libl 被更新,此時(shí)由系統(tǒng)進(jìn)行提示操作,詢問用戶是否將任務(wù)Taskl中引用的庫Libl更新到最 新版本。此時(shí)用戶根據(jù)任務(wù)需求,如果選擇“是”,即將Taskl中的庫Libl更新到最新版本, 此時(shí)Taskl中引用的庫Libl的信息將被新版本信息所替換;如果選擇“否”,則Taskl中引 用的庫Libl的信息將不被更新,仍保留原版本信息。需要說明的是,本發(fā)明實(shí)施例中,引用庫的任務(wù)包括兩類,既可以包括工程,也可 以是其他的庫,即在庫中也可以引用其他的庫。本發(fā)明實(shí)施例中,針對組態(tài)軟件中的庫,不但增加了自定義庫和在任務(wù)中選擇性 更新庫的功能,而且增加了自定義庫之間可繼承的特性,提高了在組態(tài)軟件中完成任務(wù)的 效率。同時(shí)在自定義庫之間,自定義庫可以引用其它的自定義庫,用戶可以根據(jù)任務(wù)需要, 集成已經(jīng)存在的自定義庫的功能,增加一些新特性,生成新的庫。這一功能增強(qiáng)了自定義庫 的可重用性,進(jìn)一步方便了用戶對庫的操作,提高了組態(tài)軟件使用者完成任務(wù)的效率。當(dāng)存 在引用關(guān)系的多個庫中的某個庫通過修改發(fā)生變化時(shí),需要更新修改后的庫和原引用庫之 間的引用關(guān)系。在本發(fā)明中,為了更高效的管理自定義庫,當(dāng)自定義庫之間存在引用關(guān)系時(shí),以類 鄰接表的方式進(jìn)行儲存,用圖的方式表示自定義庫之間的關(guān)系。首先介紹本發(fā)明實(shí)施例中對于被引用庫和引用庫的定義,假如庫Libl引用庫 Lib2,則庫Libl定義為被引用庫,庫Lib2定義為引用庫。在自定義庫之間建立引用關(guān)系時(shí),通常不允許自定義庫之間的引用關(guān)系存在環(huán)的 情況。環(huán)的概念在庫的管理中定義為庫與庫之間存在相互引用關(guān)系時(shí),即庫Libl引用了 庫Lib2,庫Lib2同時(shí)引用了庫LibldP Libl與Lib2存在相互引用的關(guān)系,此時(shí),Libl與 Lib2之間的引用關(guān)系出現(xiàn)環(huán)。這種情況在庫管理中是不允許的。庫與庫之間是否存在環(huán) 可以依據(jù)庫關(guān)系圖進(jìn)行判斷。此外,庫管理中間接引用關(guān)系可以通過下面的例子進(jìn)行說明 庫Libl引用了庫Lib2,庫Lib3引用了庫Libl,此時(shí),庫Lib3和庫Lib2之間也存在引用關(guān) 系,此時(shí)引用關(guān)系的建立是由于Lib3的引用庫Libl引用庫Lib2。在本發(fā)明中,自定義庫之間的引用關(guān)系圖依據(jù)圖中數(shù)據(jù)結(jié)構(gòu)鄰接表的進(jìn)行存儲。 在本發(fā)明中定義數(shù)據(jù)結(jié)構(gòu)存儲庫節(jié)點(diǎn)(LibAdjNode)信息,在此數(shù)據(jù)結(jié)構(gòu)中用Indegree 表示庫節(jié)點(diǎn)入度,利用Pnext指向庫節(jié)點(diǎn)的鄰接庫節(jié)點(diǎn)。自定義庫之間的關(guān)系圖采用 LibAdjNode進(jìn)行存儲。下面通過一具體實(shí)例對該存儲關(guān)系進(jìn)行詳細(xì)說明。假設(shè)當(dāng)前組態(tài) 軟件中存在A、B、C、D、E、F六個庫,打開庫A時(shí),首先構(gòu)造頭節(jié)點(diǎn)A,B, C,D,E,F(xiàn),之后根據(jù) 構(gòu)造的所有頭節(jié)點(diǎn)信息,依次遍歷查詢所有頭節(jié)點(diǎn)的引用庫信息,在查詢所有頭節(jié)點(diǎn)的引 用庫信息時(shí),要特別注意存在間接引用關(guān)系的情況。首先查詢庫A的所有引用庫信息,假設(shè) 與庫A存在直接引用關(guān)系的庫為庫B和庫C ;在庫A的直接引用庫中,庫B與庫D和E存在 引用關(guān)系;在B的直接引用庫中庫D引用庫F。從以上的關(guān)系分析中可得到庫A和庫D、E、 F存在間接應(yīng)用關(guān)系。因此,庫A與庫B、C、D、E、F存在引用關(guān)系。在查詢庫A的引用庫的 過程中,逐步建立自定義庫之間的關(guān)系圖,如圖3所示。在建立自定義庫之間的關(guān)系圖的同時(shí),初始化每個庫節(jié)點(diǎn)的Indegree和Pnext 值。當(dāng)查詢到庫A的引用庫B時(shí),庫A的數(shù)據(jù)結(jié)構(gòu)中成員Indegree執(zhí)行加一操作,同時(shí)把庫A添加到庫B的Pnext指針鏈表中,查詢到庫A的間接引用庫D時(shí),庫A的成員Indegree 同樣執(zhí)行加一操作,把庫A添加到庫D的Pnext指針鏈表中,依次執(zhí)行。從上面的分析可 知,查詢完庫A的引用庫信息時(shí),庫A的入度為5,同時(shí)庫A存在于庫B、C、D、E、F的指針鏈 表中,代表庫B、C、D、E、F都被庫A引用。同查詢庫A的引用庫過程相同,依次查詢庫B、D、 F、E、C的引用庫。由于庫D引用庫F,且?guī)霧不引用別的庫,則庫D只與庫F存在引用關(guān)系, 在圖3中的表示為F- > D ;庫B引用庫D和E,且?guī)霥引用庫F,所有庫B與庫D、E、F存在 引用關(guān)系,在圖3中的表示即為D->B,E->B, ->8;庫六引用庫隊(duì)C,且?guī)霣與庫D、 E、F存在引用關(guān)系,則庫A與庫B、C、D、E、F存在引用關(guān)系,在圖3中的為B_ > A,C_ > A, D- > A, E- > A, F- > A。根據(jù)庫的引用關(guān)系,建立庫關(guān)系有向圖的數(shù)據(jù)表示,如圖4所示。首先保存A,B, C,D,E,F(xiàn)節(jié)點(diǎn);分別查找每個節(jié)點(diǎn)的鄰接節(jié)點(diǎn),圖4是依據(jù)圖3建立的,節(jié)點(diǎn)A沒有任何鄰 接點(diǎn);節(jié)點(diǎn)B的鄰接節(jié)點(diǎn)為A,在圖4中0表示節(jié)點(diǎn)A的位置,代表節(jié)點(diǎn)A ;節(jié)點(diǎn)B的鄰接節(jié) 點(diǎn)為A ;節(jié)點(diǎn)C的鄰接節(jié)點(diǎn)為A ;節(jié)點(diǎn)D的鄰接節(jié)點(diǎn)為A,B ;節(jié)點(diǎn)E的鄰接節(jié)點(diǎn)為A,B ;節(jié)點(diǎn) F的鄰接節(jié)點(diǎn)為A,B,D。由圖3及圖4,可以獲知A庫沒有被任何庫引用,B庫被A庫引用, C庫被A庫引用,D庫被A,B庫引用,E庫被A、B庫引用,F(xiàn)庫被A、B、D庫引用。生成自定義庫之間的關(guān)系圖之后,仍需要根據(jù)關(guān)系圖判斷是否存在環(huán)。如果發(fā)現(xiàn) 修改后的庫和原引用庫之間存在環(huán)的引用關(guān)系,則將環(huán)的引用關(guān)系進(jìn)行刪除。此外,在建立庫與庫之間的引用關(guān)系時(shí),需要實(shí)時(shí)檢測庫中各引用庫的更新情況, 提示用戶根據(jù)需求進(jìn)行選擇性更新庫操作。根據(jù)第四步對庫F的更新可知,在節(jié)點(diǎn)類的數(shù) 據(jù)結(jié)構(gòu)LibAdjNode中有一成員Pnext,Pnext即指向庫的所有被引用庫。仍以上面例子中 的庫A為例,打開庫A,建立自定義庫之間的關(guān)系圖時(shí),在查詢庫A的所有引用庫信息時(shí),判 斷出庫A的引用庫F已經(jīng)更新,此時(shí)記錄已經(jīng)更新庫F的信息,依次查詢每個庫的引用庫, 同時(shí)記錄已經(jīng)更新的庫信息。當(dāng)在本例中已經(jīng)更新的庫是庫F,之后通過建立的自定義庫之 間的庫關(guān)系圖,遍歷庫F的Pnext成員列表,得到庫F的被引用庫A、B、D。因此,通過向用 戶發(fā)出庫A、B、D的引用庫F已經(jīng)更新的提示信息,用戶可以根據(jù)需求選擇是否更新庫A、B、 D0當(dāng)然,在原有庫之間的引用關(guān)系基礎(chǔ)之上,如果解除某兩庫之間的引用關(guān)系,重新 建立其中某一庫同其他庫的引用關(guān)系時(shí),同樣需要重新建立各庫之間的關(guān)系圖。對此,本發(fā) 明實(shí)施例不再進(jìn)行贅述。需要說明的是,本發(fā)明實(shí)施例中,為了提高算法執(zhí)行速度,環(huán)的查找可以采用拓?fù)?排序與深度優(yōu)先遍歷結(jié)合的方法。首先執(zhí)行拓?fù)渑判蛩惴?,通過拓?fù)渑判颢@得庫關(guān)系圖的 數(shù)據(jù)表示。根據(jù)圖4所示的數(shù)據(jù)結(jié)構(gòu),執(zhí)行深度優(yōu)先遍歷算法,得到各庫之間的應(yīng)用關(guān)系, 同時(shí)判斷出各引用關(guān)系中是否存在環(huán)的引用關(guān)系??梢?,在庫管理中,建立合理的庫關(guān)系圖至關(guān)重要。選擇合適的數(shù)據(jù)結(jié)構(gòu)存儲庫關(guān) 系圖,可以快速的判斷庫與庫之間的引用關(guān)系。綜上所述,本發(fā)明實(shí)施例技術(shù)方案中增加了用戶自定義庫的權(quán)限。用戶可以根據(jù) 任務(wù)需求定義自己的庫文件,在組態(tài)軟件領(lǐng)域,此功能大大提高了完成任務(wù)的效率;當(dāng)工程 中的引用庫發(fā)生變化時(shí),用戶可以根據(jù)需求選擇性更新引用庫信息,增強(qiáng)了用戶對自定義 庫的可控性,并且降低了自定義庫的冗余度;同時(shí),自定義庫之間相互引用,增加了自定義
9庫的可繼承性和可重用性。通過采用圖的思想管理庫與庫之間的引用關(guān)系,可以快速的判 斷出自定義庫之間的引用關(guān)系,降低了算法的復(fù)雜度。相應(yīng)上述現(xiàn)場總線儀表管理系統(tǒng)的數(shù)據(jù)管理方法,本發(fā)明實(shí)施例還提供了一種用 于組態(tài)軟件中庫的管理系統(tǒng),如圖5所示,為該系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)具體可以包括修改指令獲取裝置501,用于獲取修改指令,根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改;備份裝置502,用于將所述當(dāng)前庫的信息進(jìn)行備份,并對修改后的庫信息進(jìn)行備份;選擇輸出裝置503,用于根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或 修改后的庫信息輸出給用戶。該實(shí)施例中,當(dāng)修改指令獲取裝置獲知組態(tài)軟件中的庫通過修改發(fā)生變化時(shí),備 份裝置將修改后的庫的相關(guān)信息進(jìn)行備份,同時(shí),對修改之前的原有庫的相關(guān)信息進(jìn)行存 儲,使得組態(tài)軟件中針對某一庫既存儲有原信息,也存儲有修改后的新信息。當(dāng)外部任務(wù)調(diào) 用該庫時(shí),可以根據(jù)實(shí)際任務(wù)需要,選擇輸出裝置將原有庫信息或是修改后的庫信息提供 給用戶,從而保證特定任務(wù)需要調(diào)用固定庫信息的需求,避免當(dāng)原有庫發(fā)生修改時(shí),外部任 務(wù)引用修改后的庫而產(chǎn)生錯誤的情形。當(dāng)在預(yù)置訪問周期內(nèi)多次根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改時(shí),所述備份裝置 僅對最終修改后的庫信息進(jìn)行備份,以減少自定義庫對硬盤空間的占用。在本發(fā)明的一個優(yōu)選實(shí)施例中,所述選擇輸出裝置包括調(diào)用請求獲取模塊,用于獲取用戶對所述當(dāng)前庫的調(diào)用請求;庫信息判斷模塊,用于判斷所述當(dāng)前庫是否存在修改后的庫信息;庫輸出判斷模塊,用于根據(jù)所述用戶對所述當(dāng)前庫的調(diào)用請求,判斷是否需要向 用戶提供所述修改后的庫信息;如果否,則將所述當(dāng)前庫信息輸出給用戶??梢?,當(dāng)工程中的引用庫發(fā)生變化時(shí),用戶可以根據(jù)需求選擇性更新引用庫信息, 能夠增強(qiáng)用戶對自定義庫的可控性。在本發(fā)明的又一個實(shí)施例中,如圖6所示,所述系統(tǒng)還包括更新裝置504,用于更新修改后的庫和原引用庫之間的引用關(guān)系。當(dāng)存在引用關(guān)系的多個庫中的某個庫通過修改發(fā)生變化時(shí),需要更新修改后的庫 和原引用庫之間的引用關(guān)系。在本發(fā)明的又一個實(shí)施例中,如圖7所示,所述系統(tǒng)還包括引用關(guān)系刪除裝置505,用于判斷修改后的庫和原引用庫之間的引用關(guān)系中是否 存在環(huán)的引用關(guān)系,如果是,則將環(huán)的引用關(guān)系進(jìn)行刪除。環(huán)的引用關(guān)系在庫的管理中不允許出現(xiàn),庫與庫之間是否存在環(huán)可以依據(jù)庫關(guān)系 圖進(jìn)行判斷。對此,上述方法實(shí)施例中已有詳盡描述,此處,不再進(jìn)行贅述。對于系統(tǒng)實(shí)施例而言,由于其基本相應(yīng)于方法實(shí)施例,所以描述得比較簡單,相關(guān) 之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所 述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可 以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。 可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于計(jì)算機(jī)可讀取存儲介質(zhì) 中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為 磁碟、光盤、只讀存儲記憶體(Read-OnlyMemory,ROM)或隨機(jī)存儲記憶體(Random Access Memory, RAM)等。對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。 對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的 一般原理可以在不脫離本發(fā)明實(shí)施例的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此, 本發(fā)明實(shí)施例將不會被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和 新穎特點(diǎn)相一致的最寬的范圍。
權(quán)利要求
一種用于組態(tài)軟件中庫的管理方法,其特征在于,所述方法包括獲取修改指令,根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改;將所述當(dāng)前庫的信息進(jìn)行備份,并對修改后的庫信息進(jìn)行備份;根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修改后的庫信息輸出給用戶。
2.根據(jù)權(quán)利要求1所述的用于組態(tài)軟件中庫的管理方法,其特征在于,所述對修改后 的庫信息進(jìn)行備份,包括當(dāng)在預(yù)置訪問周期內(nèi)多次根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改時(shí),僅對最終修改后的 庫信息進(jìn)行備份。
3.根據(jù)權(quán)利要求1所述的用于組態(tài)軟件中庫的管理方法,其特征在于,所述根據(jù)用戶 對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修改后的庫信息輸出給用戶,包括獲取用戶對所述當(dāng)前庫的調(diào)用請求; 判斷所述當(dāng)前庫是否存在修改后的庫信息;根據(jù)所述用戶對所述當(dāng)前庫的調(diào)用請求,判斷是否需要向用戶提供所述修改后的庫信 息;如果否,則將所述當(dāng)前庫信息輸出給用戶。
4.根據(jù)權(quán)利要求3所述的用于組態(tài)軟件中庫的管理方法,其特征在于,所述判斷所述 當(dāng)前庫是否存在修改后的庫信息,包括判斷庫信息中的庫版本信息是否發(fā)生變化,如果是,則確定所述當(dāng)前庫存在修改后的 庫信息;如果否,則確定所述當(dāng)前庫不存在修改后的庫信息。
5.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的用于組態(tài)軟件中庫的管理方法,其特征在于,所 述方法還包括更新修改后的庫和原引用庫之間的引用關(guān)系。
6.根據(jù)權(quán)利要求5所述的用于組態(tài)軟件中庫的管理方法,其特征在于,所述方法還包括判斷修改后的庫和原引用庫之間的引用關(guān)系中是否存在環(huán)的引用關(guān)系,如果是,則將 環(huán)的引用關(guān)系進(jìn)行刪除。
7.一種用于組態(tài)軟件中庫的管理系統(tǒng),其特征在于,所述系統(tǒng)包括修改指令獲取裝置,用于獲取修改指令,根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改; 備份裝置,用于將所述當(dāng)前庫的信息進(jìn)行備份,并對修改后的庫信息進(jìn)行備份; 選擇輸出裝置,用于根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修改后 的庫信息輸出給用戶。
8.根據(jù)權(quán)利要求7所述的用于組態(tài)軟件中庫的管理系統(tǒng),其特征在于,當(dāng)在預(yù)置訪問 周期內(nèi)多次根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改時(shí),所述備份裝置僅對最終修改后的庫信 息進(jìn)行備份。
9.根據(jù)權(quán)利要求7所述的用于組態(tài)軟件中庫的管理系統(tǒng),其特征在于,所述選擇輸出 裝置包括調(diào)用請求獲取模塊,用于獲取用戶對所述當(dāng)前庫的調(diào)用請求; 庫信息判斷模塊,用于判斷所述當(dāng)前庫是否存在修改后的庫信息; 庫輸出判斷模塊,用于根據(jù)所述用戶對所述當(dāng)前庫的調(diào)用請求,判斷是否需要向用戶2提供所述修改后的庫信息;如果否,則將所述當(dāng)前庫信息輸出給用戶。
10.根據(jù)權(quán)利要求7-9中任一項(xiàng)所述的用于組態(tài)軟件中庫的管理系統(tǒng),其特征在于,所 述系統(tǒng)還包括更新裝置,用于更新修改后的庫和原引用庫之間的引用關(guān)系。
11.根據(jù)權(quán)利要求10所述的用于組態(tài)軟件中庫的管理系統(tǒng),其特征在于,所述系統(tǒng)還 包括引用關(guān)系刪除裝置,用于判斷修改后的庫和原引用庫之間的引用關(guān)系中是否存在環(huán)的 引用關(guān)系,如果是,則將環(huán)的引用關(guān)系進(jìn)行刪除。
全文摘要
本發(fā)明公開了一種用于組態(tài)軟件中庫的管理方法和系統(tǒng),其中,所述方法包括獲取修改指令,根據(jù)所述修改指令對當(dāng)前庫進(jìn)行修改;將所述當(dāng)前庫的信息進(jìn)行備份,并對修改后的庫信息進(jìn)行備份;根據(jù)用戶對所述當(dāng)前庫的調(diào)用請求,將所述當(dāng)前庫信息或修改后的庫信息輸出給用戶。通過本發(fā)明,可以避免當(dāng)原有庫發(fā)生修改時(shí),外部任務(wù)引用修改后的庫而產(chǎn)生錯誤的情形,同時(shí),避免由于庫的修改,而導(dǎo)致的自定義庫的冗余。
文檔編號G06F9/44GK101853165SQ20101019258
公開日2010年10月6日 申請日期2010年6月1日 優(yōu)先權(quán)日2010年6月1日
發(fā)明者孔令秋, 施波, 李宗杰, 王常力 申請人:杭州和利時(shí)自動化有限公司