專利名稱:現(xiàn)場裝置管理設備的制作方法
技術領域:
本發(fā)明涉及一種現(xiàn)場裝置管理設備。具體地說,本發(fā)明涉及對利用Microsoft Windows操作系統(tǒng)在個人計算機上管理現(xiàn)場裝置的現(xiàn)場裝置管理設備的改進。
背景技術:
本申請下文所引述或者指出的所有專利、專利申請、專利公開、科學文獻等在此都通過引用而整體并入本文,從而更完整地描述本發(fā)明所屬的現(xiàn)有技術的狀態(tài)?,F(xiàn)場裝置管理設備對諸如化工廠之類的過程控制系統(tǒng)所包含的現(xiàn)場裝置進行管理。圖5是圖示出根據(jù)現(xiàn)有技術的現(xiàn)場裝置管理設備的實例的框圖?,F(xiàn)場裝置管理設備50通過通信通路61與作為管理對象的現(xiàn)場裝置60進行通信。 現(xiàn)場裝置管理設備50通過使用公知的裝置類型管理器(DTM)規(guī)范以及裝置描述(DD)規(guī)范來接收現(xiàn)場裝置60的裝置數(shù)據(jù)。裝置數(shù)據(jù)例如是裝置標簽、諸如序列號之類的各自的數(shù)據(jù)、以及裝置參數(shù)。現(xiàn)場裝置管理設備50執(zhí)行參數(shù)設置、裝置調節(jié)、維護操作等。如圖5所示,現(xiàn)場裝置管理設備50包括輸入單元51、顯示單元52、用戶應用處理單元53、DD應用處理單元M、虛擬通信單元55、DD 56、DTM應用處理單元57、DTM 58、以及通信單元59。通信單元59通過通信通路61連接至現(xiàn)場裝置60。DD 56包括描述數(shù)據(jù)56a。描述數(shù)據(jù)56a描述了諸如現(xiàn)場裝置60的參數(shù)以及訪問裝置數(shù)據(jù)的方法的定義。當根據(jù)現(xiàn)場裝置的狀態(tài)執(zhí)行諸如對參數(shù)的條件分支處理之類的信息處理時,DTM 58包括執(zhí)行信息處理的算法或程序?,F(xiàn)場裝置管理設備50通過使用DD 56 和DTM 58來接收與現(xiàn)場裝置60相關的裝置數(shù)據(jù)。利用腳本語言來描述DD 56。因此,開發(fā)的負擔對于制造者來說減輕了。但是,DD 56很難執(zhí)行諸如條件分支處理之類的復雜處理。這種復雜處理通過利用ActiveX 控制的 DTM 58執(zhí)行。將描述從現(xiàn)場裝置60接收裝置數(shù)據(jù)的現(xiàn)場裝置管理設備50的操作。一開始,用戶應用處理單元53通過輸入單元51接收來自用戶的裝置數(shù)據(jù)接收請求信號。輸入單元51 例如是鍵盤和鼠標。當接收DD規(guī)范中的裝置數(shù)據(jù)時,DD應用處理單元M從用戶應用處理單元53接收裝置數(shù)據(jù)接收請求信號。DD應用處理單元M通過虛擬通信單元55讀取DD 56中的描述數(shù)據(jù)56a。隨后,DD應用處理單元M通過DD 56、通信單元59和通信通路61并根據(jù)描述數(shù)據(jù)56a中描述的定義與現(xiàn)場裝置60通信,以接收來自現(xiàn)場裝置60的裝置數(shù)據(jù)。用戶應用處理單元53接收已經被DD應用處理單元M接收的裝置數(shù)據(jù),從而使顯示單元52顯示裝置數(shù)據(jù)的顯示數(shù)據(jù)。顯示單元52例如是CRT (陰極射線管)或LCD (液晶顯不器)O當接收DTM規(guī)范中的裝置數(shù)據(jù)時,DTM應用處理單元57從用戶應用處理單元53 接收裝置數(shù)據(jù)接收請求信號。DTM應用處理單元57激活DTM 58。DTM 58通過通信單元59 和通信通路61與現(xiàn)場裝置60通信,以接收來自現(xiàn)場裝置60的裝置數(shù)據(jù)。隨后,用戶應用處理單元53接收已經被DTM應用處理單元57接收的裝置數(shù)據(jù),從而使顯示單元52顯示裝置數(shù)據(jù)的顯示數(shù)據(jù)。在圖5的現(xiàn)場裝置管理設備50中,使用了在Microsoft Windows操作系統(tǒng)中運行的軟件庫。例如,現(xiàn)場裝置的DD文件格式的兼容性已經保持了超過13年。并且,對DD文件進行電子閱讀的軟件庫DDS (裝置描述服務)已經使用了超過13年。通過使用C編程語言來產生前述軟件庫。因此,與已知作為現(xiàn)代編程語言的C++ 編程語言相比,前述軟件庫著重利用了全局變量和靜態(tài)變量。圖6是圖示出圖5的現(xiàn)場裝置管理設備50中的傳統(tǒng)庫(legacy library)的正常使用的示意圖。諸如DDS之類的軟件庫被設置在一個DLL (動態(tài)鏈接庫)110中,并且由客戶程序服務器1中存儲的客戶程序獨立地激活。在圖6中,DLL 110包括示例111,示例111包括傳統(tǒng)庫12、成員變量13和全局/靜態(tài)變量14。示例111是可由編程語言的命令所操縱的對象,例如值、變量、函數(shù)或數(shù)據(jù)結構。另一方面,存在被稱為COM (Component Object Model,組件對象模型)的編程形式的類型,它是一種主要的形式,并且在Microsoft Windows操作系統(tǒng)中運行。DTM是利用了使得使用數(shù)字域技術變得簡單的COM的標準。已經進行了新的實驗來結合成熟的傳統(tǒng)技術(例如DDS)和新技術(例如COM)。 圖7是圖示出激活圖5的現(xiàn)場裝置管理設備50中的多個COM示例的傳統(tǒng)庫中的DLL的使用的示意圖。當使用COM時,通常激活多個COM示例。一個COM示例包括一個傳統(tǒng)庫,并且多個傳統(tǒng)庫被激活。在圖7的實例中,存在兩個COM示例以及與兩個現(xiàn)場裝置或硬件相對應的兩個傳統(tǒng)庫。在圖7中,COM處理中服務器210包括COM示例211和COM示例221。COM 示例211包括傳統(tǒng)庫12和成員變量13。COM示例221包括傳統(tǒng)庫22和成員變量23。成員變量13、成員變量23和全局/靜態(tài)變量14是數(shù)據(jù)域。根據(jù)C編程語言或C++ 編程語言的規(guī)范,全局/靜態(tài)變量14在COM處理中服務器210中被當作公共數(shù)據(jù)域。初始地,假設全局/靜態(tài)變量14被單個傳統(tǒng)庫12所使用,如圖6所示。全局/靜態(tài)變量14未被假設為用作如圖7所示的公共數(shù)據(jù)域。但是,即使開發(fā)中使用了 C編程語言, 全局/靜態(tài)變量14被用作如圖7所示的公共數(shù)據(jù)域以便降低開發(fā)的人工小時數(shù)。在應用COM技術時,如果全局/靜態(tài)變量在COM處理中服務器中被當作公共數(shù)據(jù)域,那么傳統(tǒng)庫不會正常工作。因此,在將COM技術應用至傳統(tǒng)庫時選擇下述(1)或(2)之
ο(1)重寫傳統(tǒng)庫的所有源代碼以改變其設計,從而不使用全局/靜態(tài)變量。(2)通過將圖7中的處理中服務器改變?yōu)閳D8的本地服務器來利用EXE,從而不會出現(xiàn)公共數(shù)據(jù)域。圖8是圖示出激活圖5的現(xiàn)場裝置管理設備中的多個COM示例的傳統(tǒng)庫中的EXE 的使用的示意圖。客戶程序服務器1可包括客戶程序??蛻舫绦虮惠斎胫罜OM本地服務器 1310和COM本地服務器2320。COM本地服務器1310包括COM示例211。COM本地服務器1320包括COM示例221。在COM示例211中,傳統(tǒng)庫12被輸入至成員變量13的數(shù)據(jù)域和全局/靜態(tài)變量14的數(shù)據(jù)域。在COM示例221中,傳統(tǒng)庫22被輸入至成員變量23的數(shù)據(jù)域和全局/靜態(tài)變量14的數(shù)據(jù)域。日本未審查專利申請首次公開No. 2010-026843公開了一種現(xiàn)場裝置管理設備、 現(xiàn)場裝置管理系統(tǒng)、計算機程序、記錄介質以及特別是一種對與現(xiàn)場裝置管理相關的應用進行綜合的技術。"Isao Hirooka et al., FieldMate Field Device Management Tool for New Era, Yokogawa Technical Report English Edition, No. 44, 2007, pp. 9-12.,,(Isao Hirooka et al. , FieldMate Field Device Management Tool for New Era, Yokogawa Technical Report, Vol. 51,No. 2,2007,pp. 45-48. ” 的英文版)公開了一種利用了裝置描述(DD)規(guī)范和裝置類型管理器(DTM)規(guī)范的現(xiàn)場裝置管理設備。但是,(1)的方法需要改變來自基本部分的傳統(tǒng)庫的源代碼,這需要大量人工時間。在許多情況下,不可能根據(jù)(1)的方法來改變設計。具體地說,諸如DDS之類的先前初始地利用C編程語言制成的傳統(tǒng)庫往往大量利用全局/靜態(tài)變量,如上所述。當將COM技術應用至傳統(tǒng)庫時會出現(xiàn)大量困難。另一方面,在O)的方法中,傳統(tǒng)庫本身不會改變,但是COM的格式變化,因此,要求少量的人工時間。但是,設備的處理速度會急速下降。
發(fā)明內容
一種現(xiàn)場裝置管理設備可包括多個COM處理中服務器,每個COM處理中服務器獲取并管理與相應的一個現(xiàn)場裝置相關的裝置數(shù)據(jù);以及發(fā)動程序COM處理中服務器,其存儲發(fā)動程序,所述發(fā)動程序對所述多個COM處理中服務器中的每一個中的示例進行激活/ 關閉,所述發(fā)動程序防止四個不同函數(shù)在所述多個COM處理中服務器中直接被0S(操作系統(tǒng))所執(zhí)行。可以在Microsoft Windows操作系統(tǒng)中初始化所述多個COM處理中服務器, 以在不同存儲器空間中產生COM對象。一種現(xiàn)場裝置管理設備可包括客戶服務器,其包括客戶程序;第一 COM處理中服務器,其獲取并管理與第一現(xiàn)場裝置相關的裝置數(shù)據(jù),所述第一 COM處理中服務器包括第一 COM示例;第二 COM處理中服務器,其獲取并管理與第二現(xiàn)場裝置相關的裝置數(shù)據(jù),所述第二 COM處理中服務器包括第二 COM示例;以及發(fā)動程序COM處理中服務器,其存儲發(fā)動程序,所述發(fā)動程序防止四個不同函數(shù)在第一和第二 COM處理中服務器中執(zhí)行??梢栽?Microsoft Windows操作系統(tǒng)中初始化第一 COM處理中服務器以在第一 COM示例中在第一存儲器空間中產生第一 COM對象,并且可以在Microsoft Windows操作系統(tǒng)中初始化第二 COM處理中服務器以在第二 COM示例中在第二存儲器空間中產生第二 COM對象,所述第一存儲器空間不同于所述第二存儲器空間。一種現(xiàn)場裝置管理方法可包括獲取并管理與相應的一個現(xiàn)場裝置相關的裝置數(shù)據(jù);存儲發(fā)動程序,所述發(fā)動程序防止四個不同函數(shù)直接被 OS所執(zhí)行;并且在不同存儲器空間中產生COM對象。
結合附圖并根據(jù)對特定優(yōu)選實施例的下述描述,本發(fā)明的上述特征和優(yōu)勢將變得更明顯,其中圖1是圖示出根據(jù)本發(fā)明第一優(yōu)選實施例的現(xiàn)場裝置管理設備的操作的框圖;圖2是圖示出圖1的偽COM示例的啟動時的操作的流程圖;圖3是圖示出圖1的偽COM示例的終止時的操作的流程圖;圖4是圖示出圖1的現(xiàn)場裝置管理設備的主要組件的實施例的框圖;圖5是圖示出根據(jù)現(xiàn)有技術的現(xiàn)場裝置管理設備的實例的框圖;圖6是圖示出圖5的現(xiàn)場裝置管理設備中的傳統(tǒng)庫的正常使用的示意圖;圖7是圖示出激活圖5的現(xiàn)場裝置管理設備中的多個COM示例的傳統(tǒng)庫中的DLL 的使用的示意圖;以及圖8是圖示出激活圖5的現(xiàn)場裝置管理設備中的多個COM示例的傳統(tǒng)庫中的EXE 的使用的示意圖。
具體實施例方式現(xiàn)在將參考示例性實施例來描述本發(fā)明。本領域技術人員將認識到,利用本發(fā)明的指教可以完成多種替換實施例,并且本發(fā)明并不限于用于示例目的而示出的實施例。現(xiàn)場裝置管理設備可包括多個COM (組件對象模型)處理中服務器,每個COM處理中服務器獲取并管理與相應的一個現(xiàn)場裝置相關的裝置數(shù)據(jù);以及發(fā)動程序COM處理中服務器,其存儲發(fā)動程序,所述發(fā)動程序對所述多個COM處理中服務器中的每一個中的示例進行激活/關閉,所述發(fā)動程序防止四個不同函數(shù)在所述多個COM處理中服務器中直接被 OS (操作系統(tǒng))所執(zhí)行。在Microsoft Windows操作系統(tǒng)中初始化所述多個COM處理中服務器,以在不同存儲器空間中產生COM對象。所述發(fā)動程序可防止產生新示例的函數(shù)“GetClassObject”的執(zhí)行。如果第一次調用函數(shù)“GetClassObject”,則可從主體DLL(動態(tài)鏈接庫)調用函數(shù)“GetClassObject”。如果第二次或者更多次調用函數(shù)“GetClassObject”,則主體DLL 可被復制至副本DLL,副本DLL具有與主體DLL不同的名字,并且可從副本DLL調用函數(shù) "GetClassObject,,。副本DLL的數(shù)據(jù)可被存儲在示例陣列中。在示例終止時僅能調用函數(shù)“CanUnloadNow”。所述四個不同的函數(shù)可以是“GetClassObject”、“CanUnloadNow”、 “RegisterServer“以及"UnregisterServer,,。COM對象可包括全局變量和靜態(tài)變量中的至少一個?,F(xiàn)場裝置管理設備可包括客戶服務器,其包括客戶程序;第一 COM處理中服務器,其獲取并管理與第一現(xiàn)場裝置相關的裝置數(shù)據(jù),所述第一 COM處理中服務器包括第一 COM示例;第二 COM處理中服務器,其獲取并管理與第二現(xiàn)場裝置相關的裝置數(shù)據(jù),所述第二 COM處理中服務器包括第二 COM示例;以及發(fā)動程序COM處理中服務器,其存儲發(fā)動程序,所述發(fā)動程序防止四個不同函數(shù)在第一和第二 COM處理中服務器中執(zhí)行。在Microsoft Windows操作系統(tǒng)中初始化第一 COM處理中服務器以在第一 COM示例中在第一存儲器空間中產生第一 COM對象,并且在Microsoft Windows操作系統(tǒng)中初始化第二 COM處理中服務器以在第二 COM示例中在第二存儲器空間中產生第二 COM對象,所述第一存儲器空間不同
7于所述第二存儲器空間。 所述發(fā)動程序可防止產生新示例的函數(shù)“GetClassObject”的執(zhí)行。
如果客戶程序第一次調用函數(shù)“GetClassObject,,,則可從主體DLL調用函數(shù) “GetClassObject”。如果客戶程序第二次或者更多次調用函數(shù)“GetClassObject”,則主體 DLL可被復制至副本DLL,副本DLL具有與主體DLL不同的名字,并且可從副本DLL調用函數(shù)"GetClassObject,,。副本DLL的數(shù)據(jù)可被存儲在第一和第二 COM示例陣列中。在第一和第二示例終止時僅能調用函數(shù)“CanUnloadNow”。所述四個不同的函數(shù)可能是“GetClassObject”、“CanUnloadNow”、 “RegisterServer“以及"UnregisterServer,,。COM對象可包括全局變量和靜態(tài)變量中的至少一個。一種現(xiàn)場裝置管理方法可包括獲取并管理與現(xiàn)場裝置相關的裝置數(shù)據(jù);存儲發(fā)動程序,所述發(fā)動程序防止四個不同函數(shù)直接被OS所執(zhí)行;并且在不同存儲器空間中產生 COM對象。所述發(fā)動程序可防止產生新示例的函數(shù)“GetClassObject”的執(zhí)行。如果第一次調用函數(shù)“GetClassObject”,則可從主體DLL調用函數(shù) “GetClassObject”。如果第二次或者更多次調用函數(shù)“GetClassObject”,則主體DLL可被復制至副本DLL,副本DLL具有與主體DLL不同的名字,并且可從副本DLL調用函數(shù) "GetClassObject,,。在示例終止時僅能調用函數(shù)“CanUnloadNow”。所述四個不同的函數(shù)可以是“GetClassObject”、“CanUnloadNow,,、 “RegisterServer“以及"UnregisterServer,,。COM對象可包括全局變量和靜態(tài)變量中的至少一個。將描述本發(fā)明的第一優(yōu)選實施例。圖1是圖示出根據(jù)本發(fā)明第一優(yōu)選實施例的現(xiàn)場裝置管理設備的操作的框圖。在圖1中,與圖8中的組件相同的組件標有相同的標號。 圖1與圖8不同之處在于,在圖1中,包括發(fā)動程序的發(fā)動程序C0M(組件對象模型)處理中服務器2被布置在客戶程序服務器1和偽COM處理中服務器110/偽COM處理中服務器 220之間??蛻舫绦蚍掌?包括客戶程序??蛻舫绦蛟趩?終止時之外的時間被輸入至偽COM處理中服務器110和偽COM處理中服務器220??蛻舫绦蛟趩?終止時通過包括發(fā)動程序的發(fā)動程序COM處理中服務器2輸入至偽COM處理中服務器110和偽COM處理中服務器220。偽COM處理中服務器110包括偽COM示例11。偽COM處理中服務器220包括偽COM示例21。示例是可由編程語言的命令操縱的對象,例如值、變量、函數(shù)或數(shù)據(jù)結構。 在偽COM示例11中,傳統(tǒng)庫12被輸入至成員變量13的數(shù)據(jù)域以及全局/靜態(tài)變量14的數(shù)據(jù)域。在偽COM示例21中,傳統(tǒng)庫22被輸入至成員變量23的數(shù)據(jù)域以及全局/靜態(tài)變量M的數(shù)據(jù)域。在多個偽COM示例11和21啟動/終止時操作發(fā)動程序。發(fā)動程序激活/關閉偽 COM示例11和21。在多個偽COM示例11和21啟動/終止時之外的時間操作客戶程序。在現(xiàn)有技術中,當在Microsoft Windows操作系統(tǒng)中初始化多個COM處理中服務器時,在公共的數(shù)據(jù)域中產生所有的全局/靜態(tài)變量,如圖7所示。在本發(fā)明的第一優(yōu)選實施例中,進行控制以在彼此不同的存儲器空間中產生多個COM對象,即使它們使用處理中服務器。在本發(fā)明的第一優(yōu)選實施例中,Microsoft Windows操作系統(tǒng)的下述規(guī)范(1)和 (2)被利用來在完全不會改變傳統(tǒng)代碼的情況下實現(xiàn)上述結構。(1)需要被COM處理中服務器支持的函數(shù)是4個函數(shù)KetClassObject、 CanUnloadNow、RegisterServer 以及 UnregisterServer0(2)具有其它名字的DLL(動態(tài)鏈接庫)被布置在其它存儲器空間中,即使是相同的 DLL。將描述根據(jù)本發(fā)明的第一優(yōu)選實施例的現(xiàn)場裝置管理設備的操作。初始地,發(fā)動禾呈序對 GetClassObject、CanUnloadNow、RegisterServer 以及 UnregisterServer 這四個函數(shù)全部進行攔截。換言之,發(fā)動程序調用這4個函數(shù),從而防止這4個函數(shù)被OS (操作系統(tǒng))所直接調用和執(zhí)行。在下文的描述中,省略了對函數(shù)Registei^erver以及函數(shù) Unregisterkrver的描述,因為它們與現(xiàn)有技術一樣。在本發(fā)明的第一優(yōu)選實施例中,可以與現(xiàn)有技術一樣的方式實施函數(shù)RegisterServer以及函數(shù)UnregisterServer0函數(shù)GetClassOb ject產生新示例。如果發(fā)動程序攔截了函數(shù)GetClassOb ject以使其不會被OS直接執(zhí)行,并且客戶程序調用了函數(shù)GetClassObject,那么將執(zhí)行圖2所示的操作。圖2是圖示出圖1的偽COM示例的啟動時的操作的流程圖。在步驟S20中,操作開始。在步驟S21中,客戶程序調用存儲在發(fā)動程序中的函數(shù)GetClassObject。根據(jù)所調用的函數(shù)GetClassObject產生新示例。在步驟S22中,判斷新示例是否是第一示例。如果新示例是第一示例,那么處理進入步驟S23。如果新示例不是第一示例而是更多次的示例, 那么處理進入步驟S24。在步驟S23中,發(fā)動程序從主體DLL “body, dll”調用具有相同名字的函數(shù)作為目標數(shù)據(jù),并且存儲在發(fā)動程序的預定存儲域中。從而,本發(fā)明的操作變得與現(xiàn)有技術一樣。在步驟S24中,主體DLL "body, dll”被復制至具有唯一名字(例如“tmpx. dll”) 的另一 DLL中。在步驟S25中,復制的DLL被稱為目標數(shù)據(jù)并且被存儲在發(fā)動程序的預定存儲域中。針對第一示例的存儲器空間不同于針對更多次示例的存儲器空間,它們具有彼此不同的名稱。隨后,處理進入步驟S26。在步驟S^中,發(fā)動程序根據(jù)步驟S23或步驟S25中的目標數(shù)據(jù)從主體DLL “body, dll”或復制的DLL“tmpx. dll”的內部調用函數(shù)GetClassObject。在步驟S27中,對于終止操作,復制的DLL "tmpx. dll”的數(shù)據(jù)被存儲在發(fā)動程序中的陣列示例[]數(shù)據(jù)存儲單元中。存儲在陣列示例[]數(shù)據(jù)存儲單元中的數(shù)據(jù)包括第一數(shù)據(jù)和第二數(shù)據(jù)。第一數(shù)據(jù)表示直接使用主體DLL還是使用復制的DLL。第二數(shù)據(jù)表示當主體DLL被復制時所使用的文件名,如果復制的DLL被使用的話。隨后,在步驟S28中,處理結束。圖3是圖示出圖1的偽COM示例終止時的操作的流程圖。在偽COM示例終止時, 調用處理被匯總為函數(shù)CanUnloadNow,并且復制的DLL "tmpx. dll”被刪除。在圖3的步驟S30中,處理開始。在步驟S31中,客戶程序調用存儲在發(fā)動程序中的函數(shù)CanUnloadNow。在步驟S32中,所調用的函數(shù)CanUnloadNow在陣列示例[]數(shù)據(jù)存
9儲單元中循環(huán)。在步驟S33中,調用示例[χ]的CanUnloadNow函數(shù)。此處,χ是示例陣列。在步驟S34中,判斷示例[χ]的所調用的函數(shù)CanUnloadNow的返回值是否是真 (TRUE)。如果返回值不是真,則處理進入步驟S35,并且返回值被設置為假(FALSE)。如果返回值是真,則在步驟S36中,復制的DLL“tmpx. dll”的傳統(tǒng)庫被打開,并且在步驟S37中, 刪除復制的DLL "tmpx. dll”的文件。在步驟S38中,判斷是否結束在步驟S32和步驟S35/S37之間的循環(huán)。如果判斷不結束循環(huán),而處理進入步驟S32,并且步驟S32和步驟S37之間一系列操作重復直到循環(huán)結束。如果判斷結束循環(huán),則處理進入步驟S39。在步驟S39中,返回函數(shù)CanUnloadNow的返回值TRUE/FALSE。隨后在步驟S40中,在示例終止時的一系列操作結束。圖4是圖示出圖1的現(xiàn)場裝置管理設備的主要組件的實施例的框圖。發(fā)動程序2 包括函數(shù)存儲單元25、DLL文件數(shù)據(jù)存儲單元沈、陣列示例[]數(shù)據(jù)存儲單元27、以及返回值管理單元觀。主體DLL3包括函數(shù)存儲單元31。在啟動時,客戶程序調用存儲在發(fā)動程序2的函數(shù)存儲單元25中的函數(shù) GetClassObject0如果新產生的示例是第一示例,那么發(fā)動程序2從主體DLL 3的函數(shù)存儲單元31 調用函數(shù)GetClassObject,并且將其存儲在發(fā)動程序2的DLL文件數(shù)據(jù)存儲單元沈中。如果新產生的示例不是第一示例,那么發(fā)動程序2將主體DLL復制至具有唯一名字的另一 DLL文件,并且將復制的DLL的文件數(shù)據(jù)作為調用目標數(shù)據(jù)存儲在與主體DLL不同的存儲器空間中,即不同于當發(fā)動程序2的DLL文件數(shù)據(jù)存儲單元沈的示例是第一示例時的存儲器空間。對于終止處理,發(fā)動程序2將復制的DLL "tmpx. dll”存儲在發(fā)動程序2的陣列示例[]數(shù)據(jù)存儲單元27中。發(fā)動程序2從主體DLL 3的函數(shù)存儲單元31調用函數(shù) GetClassObject,并且將其存儲在發(fā)動程序2的DLL文件數(shù)據(jù)存儲單元沈中。在終止時,客戶程序調用存儲在發(fā)動程序2的函數(shù)存儲單元25中的函數(shù) CanUnloadNow0所調用的函數(shù)CanUnloadNow在陣列示例[]數(shù)據(jù)存儲單元27中循環(huán),并且示例 [χ]的函數(shù)CanUnloadNow被調用。返回值管理單元28判斷所調用的示例[χ]的函數(shù)CanUnloadNow的返回值是否為真。如果返回值不是真,則返回值被設置為假。如果返回值是真,則存儲在DLL文件數(shù)據(jù)存儲單元沈中的復制的DLL "tmpx. dll”的傳統(tǒng)庫被打開,并且刪除復制的DLL "tmpx. dll” 的文件。通過上述操作,即使在COM處理中服務器中采用了使用全局/靜態(tài)變量的傳統(tǒng)庫, 也可以如現(xiàn)有技術一樣保持正常操作。首先,用于傳統(tǒng)庫的人工時間數(shù)為零,這是因為傳統(tǒng)庫根本未被處理。其次,執(zhí)行速度沒有降低,因為這是由處理中服務器保持的。由于這兩點,與現(xiàn)有技術相比提供了有利效果。在本發(fā)明的第一優(yōu)選實施例的上述描述中,現(xiàn)場裝置管理設備的示例被描述。本發(fā)明可應用至將COM用于模塊的情況,該模塊包括利用全局/靜態(tài)變量的軟件庫。
具體地說,在很難從舊的軟件庫中刪除全局/靜態(tài)變量時或者在舊的軟件庫被應用至Microsoft. NET Framework時更有效。在這種情況下,全局/靜態(tài)變量通常成為問題,但是如果應用了本發(fā)明,則舊的軟件庫可通過少量人工時間而變得對應于Microsoft. NETFramework0并且,用于驗證的人工時間數(shù)減少,這是因為主體DLL的代碼未變。如上所述,本發(fā)明提供了一種現(xiàn)場裝置管理設備,其在不改變常規(guī)的傳統(tǒng)庫的情況下防止了執(zhí)行速度的下降。本文所使用的下列方向術語“向前、向后、向上、向下、右、左、垂直、水平、之下、和橫向”以及其它類似的方向術語是指配備了本發(fā)明的設備的那些方向。因此,用來說明本發(fā)明的這些術語將被解釋為相對于配備了本發(fā)明的設備。術語“配置”用來描述部件、部分或裝置的一部分,包括硬件和/或構造和/或編程來執(zhí)行期望功能的軟件。此外,權利要求中以“裝置+功能”表述的術語應包括可以用來執(zhí)行本發(fā)明的該部分功能的任何結構。本文使用的諸如“基本上” “大約”、“接近”和“大略”之類的程度術語,表示與所修飾的術語的合理偏離量從而最終結果不會顯著改變。例如,如果該偏離沒有否定它所修飾的詞語的含義,則這些術語可以解釋為包括對所修飾術語的至少士5%的偏離。術語“單元”用來描述部件、部分或一部分硬件和/或被構造和/或編程來執(zhí)行期望功能的軟件。硬件的典型示例可以包括但不局限于裝置和電路。盡管已經如上描述并說明了本發(fā)明的優(yōu)選實施例,但應當理解本發(fā)明的這些示例不應當認為是限制??梢栽诓幻撾x本發(fā)明范圍的情況下做出添加、省略、替代以及其它修改。因此,本發(fā)明不應認為由前面的說明來進行限制,而僅由權利要求的范圍進行限制。
權利要求
1.一種現(xiàn)場裝置管理設備,包括多個COM處理中服務器,每個COM處理中服務器獲取并管理與相應的一個現(xiàn)場裝置相關的裝置數(shù)據(jù);以及發(fā)動程序COM處理中服務器,其存儲發(fā)動程序,所述發(fā)動程序對所述多個COM處理中服務器中的每一個中的示例進行激活和關閉,所述發(fā)動程序防止四個不同函數(shù)在所述多個 COM處理中服務器中直接被OS所執(zhí)行,并且其中在Microsoft Windows操作系統(tǒng)中初始化所述多個COM處理中服務器,以在不同存儲器空間中產生COM對象。
2.根據(jù)權利要求1所述的現(xiàn)場裝置管理設備,其中所述發(fā)動程序對產生新示例的函數(shù)“GetClassObject”的執(zhí)行進行防止。
3.根據(jù)權利要求2所述的現(xiàn)場裝置管理設備,其中如果第一次調用函數(shù)“GetClassObject”,則從主體DLL調用函數(shù)“GetClassObject”, 如果第二次或者更多次調用函數(shù)“GetClassObject”,則主體DLL被復制至副本DLL,副本DLL具有與主體DLL不同的名字,并且從副本DLL調用函數(shù)“GetClassObject”。
4.根據(jù)權利要求3所述的現(xiàn)場裝置管理設備,其中副本DLL的數(shù)據(jù)被存儲在示例陣列中。
5.根據(jù)權利要求1所述的現(xiàn)場裝置管理設備,其中在示例終止時僅調用函數(shù)“CanUnloadNow”。
6.根據(jù)權利要求1所述的現(xiàn)場裝置管理設備,其中所述四個不同的函數(shù)是“GetClassObject,,、“CanUnloadNow,,、“Registei^erver” 以及 “ Unregi sterServer,,。
7.根據(jù)權利要求1所述的現(xiàn)場裝置管理設備,其中 COM對象包括全局變量和靜態(tài)變量中的至少一個。
8.一種現(xiàn)場裝置管理設備,包括 客戶服務器,其包括客戶程序;第一 COM處理中服務器,其獲取并管理與第一現(xiàn)場裝置相關的裝置數(shù)據(jù),所述第一 COM 處理中服務器包括第一 COM示例;第二 COM處理中服務器,其獲取并管理與第二現(xiàn)場裝置相關的裝置數(shù)據(jù),所述第二 COM 處理中服務器包括第二 COM示例;以及發(fā)動程序COM處理中服務器,其存儲發(fā)動程序,所述發(fā)動程序防止四個不同函數(shù)在第一和第二 COM處理中服務器中執(zhí)行,并且其中在Microsoft Windows操作系統(tǒng)中初始化第一 COM處理中服務器以在第一 COM示例中在第一存儲器空間中產生第一 COM對象,并且在Microsoft Windows操作系統(tǒng)中初始化第二 COM處理中服務器以在第二 COM示例中在第二存儲器空間中產生第二 COM對象,所述第一存儲器空間不同于所述第二存儲器空間。
9.根據(jù)權利要求8所述的現(xiàn)場裝置管理設備,其中所述發(fā)動程序對產生新示例的函數(shù)“GetClassObject”的執(zhí)行進行防止。
10.根據(jù)權利要求9所述的現(xiàn)場裝置管理設備,其中如果客戶程序第一次調用函數(shù)“GetClassObject”,則從主體DLL調用函數(shù)"GetClassObject,,,如果客戶程序第二次或者更多次調用函數(shù)“GetClassObject”,則主體DLL被復制至副本DLL,副本DLL具有與主體DLL不同的名字,并且從副本DLL調用函數(shù)“GetClassObject”。
11.根據(jù)權利要求10所述的現(xiàn)場裝置管理設備,其中副本DLL的數(shù)據(jù)被存儲在第一和第二 COM示例陣列中。
12.根據(jù)權利要求8所述的現(xiàn)場裝置管理設備,其中在第一和第二示例終止時僅調用函數(shù)“CanUnloadNow”。
13.根據(jù)權利要求8所述的現(xiàn)場裝置管理設備,其中所述四個不同的函數(shù)是“GetClassObject,,、“CanUnloadNow,,、“Registei^erver” 以及 “ Unregi sterServer,,。
14.根據(jù)權利要求8所述的現(xiàn)場裝置管理設備,其中 COM對象包括全局變量和靜態(tài)變量中的至少一個。
15.一種現(xiàn)場裝置管理方法,包括 獲取并管理與現(xiàn)場裝置相關的裝置數(shù)據(jù);存儲發(fā)動程序,所述發(fā)動程序防止四個不同函數(shù)直接被OS所執(zhí)行;并且在不同存儲器空間中產生COM對象。
16.根據(jù)權利要求15所述的現(xiàn)場裝置管理方法,其中所述發(fā)動程序對產生新示例的函數(shù)“GetClassObject”的執(zhí)行進行防止。
17.根據(jù)權利要求16所述的現(xiàn)場裝置管理方法,其中如果第一次調用函數(shù)“GetClassObject”,則從主體DLL調用函數(shù)“GetClassObject”, 如果第二次或者更多次調用函數(shù)“GetClassObject”,則主體DLL被復制至副本DLL,副本DLL具有與主體DLL不同的名字,并且從副本DLL調用函數(shù)“GetClassObject”。
18.根據(jù)權利要求15所述的現(xiàn)場裝置管理方法,其中在示例終止時僅調用函數(shù)“CanUnloadNow”。
19.根據(jù)權利要求15所述的現(xiàn)場裝置管理方法,其中所述四個不同的函數(shù)是“GetClassObject,,、“CanUnloadNow,,、“Registei^erver” 以及 “ Unregi sterServer,,。
20.根據(jù)權利要求15所述的現(xiàn)場裝置管理方法,其中 COM對象包括全局變量和靜態(tài)變量中的至少一個。
全文摘要
一種現(xiàn)場裝置管理設備可包括多個COM處理中服務器,每個COM處理中服務器獲取并管理與相應的一個現(xiàn)場裝置相關的裝置數(shù)據(jù);以及發(fā)動程序COM處理中服務器,其存儲發(fā)動程序,所述發(fā)動程序對所述多個COM處理中服務器中的每一個中的示例進行激活,所述發(fā)動程序防止四個不同函數(shù)在所述多個COM處理中服務器中直接被OS所執(zhí)行。在Microsoft Windows操作系統(tǒng)中初始化所述多個COM處理中服務器,以在不同存儲器空間中產生COM對象。
文檔編號G06F9/52GK102236583SQ20111011702
公開日2011年11月9日 申請日期2011年5月5日 優(yōu)先權日2010年5月7日
發(fā)明者鹿子木宏明 申請人:橫河電機株式會社