專利名稱:支持多個(gè)客戶數(shù)據(jù)交換協(xié)議的工業(yè)過(guò)程控制數(shù)據(jù)訪問(wèn)服務(wù)器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體上涉及計(jì)算機(jī)化過(guò)程控制網(wǎng)絡(luò)領(lǐng)域。本發(fā)明尤其涉及為管理層客戶應(yīng)用程序提供對(duì)過(guò)程控制信息的訪問(wèn)的數(shù)據(jù)訪問(wèn)服務(wù)器系統(tǒng)。
背景技術(shù):
工業(yè)過(guò)程控制技術(shù)中地顯著進(jìn)步已大大促進(jìn)了工廠和車間操作的所有方面。在當(dāng)今的現(xiàn)代化工業(yè)過(guò)程控制系統(tǒng)引入前,工業(yè)過(guò)程由人工和初等的機(jī)械控制所操作和控制。因而,過(guò)程控制的復(fù)雜性和程度被速度所限制,這里所說(shuō)的速度是一人或多人確定不同過(guò)程狀態(tài)變量的目前狀態(tài)、將當(dāng)前狀態(tài)與所需的操作級(jí)別相比較、計(jì)算矯正操作(如果需要)以及向控制點(diǎn)實(shí)施更改以便影響狀態(tài)變量的變化的速度。
過(guò)程控制技術(shù)的進(jìn)步使得更大和更復(fù)雜的工業(yè)過(guò)程能夠通過(guò)程序化控制處理機(jī)控制??刂铺幚頇C(jī)執(zhí)行控制程序以讀取過(guò)程狀態(tài)變量,執(zhí)行基于狀態(tài)變量數(shù)據(jù)和所需的設(shè)定點(diǎn)信息的控制算法以產(chǎn)生工業(yè)過(guò)程中的控制點(diǎn)的輸出值。這樣的控制處理機(jī)和程序支持充分自運(yùn)行的工業(yè)過(guò)程(一旦確立了設(shè)定點(diǎn))。
雖然工業(yè)過(guò)程有能力在無(wú)干擾的情況下在先前確立的設(shè)定點(diǎn)在程序化過(guò)程處理器的控制下運(yùn)行,但還是需要對(duì)控制處理機(jī)及其有關(guān)過(guò)程進(jìn)行管理控制和監(jiān)控。這種監(jiān)視由人工以及多層過(guò)程控制網(wǎng)絡(luò)的應(yīng)用程序/人工接口層的高層控制程序提供。這種監(jiān)視一般需要驗(yàn)證在低層過(guò)程控制器下的受控過(guò)程的正確執(zhí)行以及配置受控過(guò)程的設(shè)定點(diǎn)。
數(shù)據(jù)訪問(wèn)服務(wù)器有助于將過(guò)程控制數(shù)據(jù)放置在多個(gè)高層監(jiān)控/控制客戶應(yīng)用程序所能訪問(wèn)的范圍內(nèi)。操作過(guò)程中,過(guò)程控制器生成關(guān)于有關(guān)過(guò)程的狀態(tài)和控制信息??刂破鞯倪^(guò)程狀態(tài)和控制信息存儲(chǔ)在過(guò)程控制數(shù)據(jù)中和/或分送到過(guò)程控制網(wǎng)絡(luò)中的多個(gè)地址。其他過(guò)程信息在具有數(shù)字?jǐn)?shù)據(jù)通信能力的域設(shè)備(如,智能發(fā)射機(jī))中生成/存儲(chǔ)。過(guò)程信息被數(shù)據(jù)服務(wù)器從數(shù)據(jù)庫(kù)和域設(shè)備中取出,以便過(guò)程控制系統(tǒng)進(jìn)一步處理/使用。例如,數(shù)據(jù)訪問(wèn)服務(wù)器將取出的信息提供給多個(gè)提供高層控制和監(jiān)控(既有人工也有計(jì)算機(jī)化的)服務(wù)的客戶應(yīng)用程序。
高層控制和監(jiān)控應(yīng)用程序的正確操作依賴于過(guò)程控制系統(tǒng)的過(guò)程控制/域設(shè)備層和高層管理/監(jiān)控層之間的正確的數(shù)據(jù)接口。過(guò)程控制系統(tǒng)的控制/域設(shè)備層處的原始數(shù)據(jù)根據(jù)包含在過(guò)程控制系統(tǒng)中的標(biāo)準(zhǔn)以多種格式存儲(chǔ)。同樣地,與過(guò)程控制系統(tǒng)的管理和監(jiān)控層有關(guān)的客戶應(yīng)用程序可根據(jù)多個(gè)現(xiàn)有(或?qū)?lái)的)應(yīng)用程序數(shù)據(jù)接口協(xié)議中的一個(gè)(或多個(gè))接收來(lái)自數(shù)據(jù)訪問(wèn)服務(wù)器的數(shù)據(jù)。
目前有許多不同的管理層客戶應(yīng)用程序依賴由過(guò)程控制系統(tǒng)的低層組件提供的數(shù)據(jù)。管理層客戶應(yīng)用程序通過(guò)諸如動(dòng)態(tài)數(shù)據(jù)交換(DDE)、SuiteLink(加州Irvine市100 Technology Dr.的WonderWare公司的傳輸協(xié)議)和OPC(過(guò)程控制的OLE)這樣的已知工業(yè)標(biāo)準(zhǔn)協(xié)議訪問(wèn)/共享過(guò)程數(shù)據(jù)。已知的管理層客戶應(yīng)用程序不僅封裝了從域設(shè)備提取過(guò)程數(shù)據(jù)所涉及的邏輯/過(guò)程,還封裝了提取/接收數(shù)據(jù)的客戶通信的實(shí)現(xiàn)。這種相對(duì)靜態(tài)的有限的客戶應(yīng)用程序?qū)崿F(xiàn)方法導(dǎo)致了人力的重復(fù)/浪費(fèi)(為每個(gè)可能用于取出該數(shù)據(jù)的通信標(biāo)準(zhǔn)創(chuàng)建一個(gè)不同的提取設(shè)備數(shù)據(jù)的客戶應(yīng)用程序版本)。這種相對(duì)靜態(tài)、有限的客戶應(yīng)用程序?qū)崿F(xiàn)方法導(dǎo)致了勞動(dòng)力的加倍/重復(fù)(為每個(gè)可能用于提取數(shù)據(jù)的通信標(biāo)準(zhǔn)創(chuàng)建不同版本的提取設(shè)備數(shù)據(jù)的客戶應(yīng)用程序)。此方法還使得數(shù)據(jù)訪問(wèn)服務(wù)器開發(fā)者無(wú)法平衡現(xiàn)有服務(wù)器版本。由于與現(xiàn)有數(shù)據(jù)提供者的通信協(xié)議不兼容,用戶從現(xiàn)有客戶應(yīng)用程序轉(zhuǎn)移到結(jié)合了經(jīng)過(guò)多年開發(fā)出的更有效的協(xié)議的新的客戶應(yīng)用程序的過(guò)程是緩慢的。
由于考慮到已知的數(shù)據(jù)訪問(wèn)服務(wù)器的局限,特別是考慮到根據(jù)新的或先前不支持客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)協(xié)議提供數(shù)據(jù)的可擴(kuò)展性,因此需要更容易擴(kuò)展/修改的數(shù)據(jù)訪問(wèn)服務(wù)器。
發(fā)明內(nèi)容
本發(fā)明對(duì)過(guò)程控制系統(tǒng)中的客戶應(yīng)用程序接口提供了新程度的可擴(kuò)展性。通過(guò)從客戶應(yīng)用程序用來(lái)從數(shù)據(jù)訪問(wèn)服務(wù)器請(qǐng)求數(shù)據(jù)的客戶數(shù)據(jù)交換協(xié)議中分離數(shù)據(jù)訪問(wèn)服務(wù)器引擎功能,從而在數(shù)據(jù)訪問(wèn)服務(wù)器中實(shí)現(xiàn)了增強(qiáng)的可擴(kuò)展性/靈活性。本發(fā)明通過(guò)在一個(gè)用戶可安裝/可選擇/可替換的程序模塊集(如插件)中提取出客戶應(yīng)用程序數(shù)據(jù)通信協(xié)議,從而實(shí)現(xiàn)所述的分離。這些程序模塊安裝在數(shù)據(jù)訪問(wèn)服務(wù)器上,有助于根據(jù)客戶應(yīng)用程序使用的多種協(xié)議向客戶應(yīng)用程序表示數(shù)據(jù)。安裝后,程序模塊向客戶應(yīng)用程序提供特定協(xié)議接口,并通過(guò)標(biāo)準(zhǔn)化通用接口集與數(shù)據(jù)訪問(wèn)服務(wù)器引擎通信。從而,通過(guò)在數(shù)據(jù)訪問(wèn)服務(wù)器上提供和安裝新的數(shù)據(jù)交換協(xié)議模塊實(shí)現(xiàn)了結(jié)合了本發(fā)明的數(shù)據(jù)訪問(wèn)服務(wù)器的擴(kuò)展。要在數(shù)據(jù)訪問(wèn)服務(wù)器系統(tǒng)中包括新的數(shù)據(jù)交換協(xié)議模塊,不需要修改數(shù)據(jù)訪問(wèn)服務(wù)器上的現(xiàn)有軟件,包括數(shù)據(jù)訪問(wèn)服務(wù)器引擎和先前安裝的特定協(xié)議的協(xié)議模塊。
本發(fā)明集中于數(shù)據(jù)訪問(wèn)服務(wù)器的可擴(kuò)展結(jié)構(gòu)??蓴U(kuò)展結(jié)構(gòu)有助于擴(kuò)展數(shù)據(jù)訪問(wèn)服務(wù)器支持的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議集--甚至在安裝數(shù)據(jù)訪問(wèn)服務(wù)器相當(dāng)長(zhǎng)一段時(shí)間后。尤其地,本發(fā)明包括一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器,它包括一組單獨(dú)編程和可安裝的組件,但作為集成系統(tǒng)運(yùn)行。集成組件包括一個(gè)在數(shù)據(jù)訪問(wèn)服務(wù)器和客戶應(yīng)用程序之間提供特定數(shù)據(jù)交換特定接口的客戶數(shù)據(jù)交換協(xié)議模塊集。數(shù)據(jù)訪問(wèn)服務(wù)器還包括一個(gè)執(zhí)行一個(gè)核心功能集的數(shù)據(jù)訪問(wèn)服務(wù)器引擎。核心功能執(zhí)行(即處理和響應(yīng))客戶應(yīng)用程序請(qǐng)求,請(qǐng)求過(guò)程控制系統(tǒng)提供的數(shù)據(jù)??蛻魯?shù)據(jù)交換協(xié)議模塊集和數(shù)據(jù)訪問(wèn)服務(wù)器引擎之間的通信根據(jù)標(biāo)準(zhǔn)化接口集實(shí)現(xiàn)。標(biāo)準(zhǔn)化接口集提供了一個(gè)介于客戶數(shù)據(jù)交換協(xié)議以及獲取過(guò)程數(shù)據(jù)并向發(fā)出請(qǐng)求的客戶應(yīng)用程序提供過(guò)程數(shù)據(jù)的引擎功能之間的提取層。提取層將數(shù)據(jù)訪問(wèn)服務(wù)器與數(shù)據(jù)訪問(wèn)服務(wù)器所支持的客戶數(shù)據(jù)交換協(xié)議的更改隔絕開來(lái)。相反地,DAS引擎可以在不影響客戶協(xié)議模塊的情況下修改/替換-假設(shè)以前的提取層/接口被DAS引擎的任何更改或DAS引擎的替換所支持。
本發(fā)明還包括唯一一組由數(shù)據(jù)訪問(wèn)服務(wù)器實(shí)現(xiàn)的步驟/階段集,以便通過(guò)一個(gè)可擴(kuò)展的多客戶數(shù)據(jù)交換協(xié)議接口向客戶應(yīng)用程序提供過(guò)程控制系統(tǒng)數(shù)據(jù)。該方法包括在提取層由特定客戶協(xié)議模塊和數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的中間步驟。特定客戶模塊根據(jù)提取層接口規(guī)范向數(shù)據(jù)訪問(wèn)服務(wù)器引擎提供請(qǐng)求,數(shù)據(jù)訪問(wèn)服務(wù)器引擎從過(guò)程控制系統(tǒng)獲取被請(qǐng)求信息,數(shù)據(jù)訪問(wèn)服務(wù)器引擎通過(guò)提取層接口規(guī)范生成對(duì)客戶數(shù)據(jù)交換協(xié)議模塊的響應(yīng)。
實(shí)現(xiàn)本發(fā)明的過(guò)程數(shù)據(jù)服務(wù)器的一個(gè)優(yōu)點(diǎn)是可擴(kuò)展性。在過(guò)程控制網(wǎng)絡(luò)上配置了過(guò)程數(shù)據(jù)服務(wù)器后,過(guò)程數(shù)據(jù)服務(wù)器支持結(jié)合支持新客戶應(yīng)用程序的附加協(xié)議,并繼續(xù)支持與歷史客戶有關(guān)的現(xiàn)有數(shù)據(jù)共享/傳遞協(xié)議。現(xiàn)在,結(jié)合本發(fā)明的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器的可以配置一個(gè)可再度使用的、可擴(kuò)展的、最優(yōu)化的(例如,僅安裝需要的協(xié)議)過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器以便與數(shù)據(jù)源通信。
附錄的權(quán)利要求書分細(xì)目闡明了本發(fā)明的功能。根據(jù)下列聯(lián)系附圖的詳細(xì)說(shuō)明可以最好地理解本發(fā)明及其目的和優(yōu)點(diǎn),附圖中
圖1是描述本發(fā)明的一個(gè)示例性過(guò)程控制環(huán)境的示意圖,在該環(huán)境中一個(gè)過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器取出/接收過(guò)程控制信息并將這種信息提供給位于一個(gè)過(guò)程控制網(wǎng)絡(luò)的監(jiān)控/管理層的多個(gè)客戶應(yīng)用程序;
圖2是概括實(shí)現(xiàn)本發(fā)明的一個(gè)示例性數(shù)據(jù)訪問(wèn)服務(wù)器的一般接口配置的示意圖3是描述結(jié)合本發(fā)明的一個(gè)示例性數(shù)據(jù)訪問(wèn)服務(wù)器的軟件結(jié)構(gòu)的示意圖4是概括將一個(gè)插件結(jié)合到實(shí)現(xiàn)本發(fā)明的一個(gè)現(xiàn)有數(shù)據(jù)訪問(wèn)服務(wù)器的示例性步驟序列的序列圖5是概括啟動(dòng)一個(gè)實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)訪問(wèn)服務(wù)器的示例性步驟序列的序列圖6是概括關(guān)閉一個(gè)實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)訪問(wèn)服務(wù)器的示例性步驟序列的序列圖7是概括由一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器執(zhí)行的根據(jù)特定的數(shù)據(jù)交換協(xié)議執(zhí)行響應(yīng)客戶應(yīng)用程序向過(guò)程控制系統(tǒng)中的特定數(shù)據(jù)源請(qǐng)求過(guò)程數(shù)據(jù)的示例性步驟序列的序列圖8概括了一個(gè)由數(shù)據(jù)交換協(xié)議插件實(shí)現(xiàn)的接口集;以及
圖9概括了一個(gè)由一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器引擎實(shí)現(xiàn)的接口集。
具體實(shí)施例方式
如這里先前所提到的,就結(jié)合新的客戶數(shù)據(jù)交換協(xié)議(例如,DDE/SuiteLinK/OPC)來(lái)說(shuō)示例性數(shù)據(jù)訪問(wèn)服務(wù)器結(jié)構(gòu)是可擴(kuò)展的??蓴U(kuò)展性由一個(gè)使用諸如插件這樣的模塊化程序擴(kuò)展的數(shù)據(jù)訪問(wèn)服務(wù)器結(jié)構(gòu)實(shí)現(xiàn)。模塊化程序擴(kuò)展向一個(gè)執(zhí)行對(duì)應(yīng)于接口調(diào)用的一組操作的數(shù)據(jù)訪問(wèn)服務(wù)器引擎發(fā)出接口調(diào)用。模塊化程序擴(kuò)展將根據(jù)特定數(shù)據(jù)交換協(xié)議從客戶應(yīng)用程序接收到的請(qǐng)求傳送給使用接口調(diào)用的數(shù)據(jù)訪問(wèn)服務(wù)器引擎。每個(gè)模塊化擴(kuò)展獨(dú)立于其他模塊化程序擴(kuò)展存在。每個(gè)模塊化程序擴(kuò)展運(yùn)行時(shí)在功能上與數(shù)據(jù)訪問(wèn)服務(wù)器引擎連接/可連接(不需要編程)。在過(guò)程控制系統(tǒng)/網(wǎng)絡(luò)中配置了服務(wù)器后,通過(guò)程序/系統(tǒng)數(shù)據(jù)交換協(xié)議擴(kuò)展的模塊性能以及數(shù)據(jù)訪問(wèn)服務(wù)器的可擴(kuò)展結(jié)構(gòu)可以擴(kuò)展由數(shù)據(jù)訪問(wèn)服務(wù)器支持的客戶數(shù)據(jù)交換協(xié)議集。
轉(zhuǎn)到圖1,說(shuō)明性地描述了一個(gè)過(guò)程控制網(wǎng)絡(luò)10的示例性部分。過(guò)程控制網(wǎng)絡(luò)10可被看作連接到一個(gè)或多個(gè)與過(guò)程控制網(wǎng)絡(luò)10的特定層有關(guān)的網(wǎng)絡(luò)鏈接的設(shè)備集。在示例性實(shí)施方式中,過(guò)程控制網(wǎng)絡(luò)10中描述出的部分包括一個(gè)域總線層12、一個(gè)本地控制層14以及一個(gè)管理控制層16。雖然示例性實(shí)施方式被描述為具有三層,本領(lǐng)域技術(shù)熟練者將容易欣賞到本發(fā)明可應(yīng)用到具有更多、更少或相同網(wǎng)絡(luò)層數(shù)的多種過(guò)程控制網(wǎng)絡(luò)結(jié)構(gòu)。所描述出的說(shuō)明性的網(wǎng)絡(luò)10體現(xiàn)了一個(gè)多層總線拓?fù)洹5?,本發(fā)明可結(jié)合到一個(gè)實(shí)現(xiàn)其他網(wǎng)絡(luò)拓?fù)?如星形網(wǎng)絡(luò)、總線/星形混合網(wǎng)絡(luò)等)的過(guò)程控制網(wǎng)絡(luò)中。
在過(guò)程控制網(wǎng)絡(luò)的示例性部分中,一組智能域設(shè)備集20位于域總線層12。域設(shè)備包括感知受控工業(yè)過(guò)程中的壓力、溫度、液體流量等的智能過(guò)程變量發(fā)射機(jī)。域設(shè)備還包括調(diào)節(jié)器,如那些能夠使池、燃燒室等中的液體流量閥門打開和關(guān)閉的調(diào)節(jié)器。
本地控制層14的一個(gè)或多個(gè)控制處理機(jī)30根據(jù)智能域設(shè)備集20執(zhí)行本地控制功能。控制處理機(jī)30接收智能域設(shè)備20提供的過(guò)程狀態(tài)信息。狀態(tài)信息包括壓力、溫度、質(zhì)量流量、容積流量等??刂铺幚頇C(jī)將接收到的狀態(tài)信息加到過(guò)程的所需設(shè)定點(diǎn)上,然后向調(diào)節(jié)器發(fā)送控制信息,以便獲取或保持所需要的設(shè)定點(diǎn)。控制處理機(jī)被編程/配置為存儲(chǔ)與其控制功能有關(guān)的狀態(tài)和控制信息。
管理控制層16包括幫助和/或?qū)崿F(xiàn)做出企業(yè)/工廠層決策和管理(如,設(shè)定點(diǎn))控制值指定功能的高層控制應(yīng)用程序。一個(gè)告警服務(wù)器40接收來(lái)自多個(gè)低層源,包括控制處理機(jī)30和域設(shè)備的過(guò)程狀態(tài)數(shù)據(jù)。告警服務(wù)器40比較接收到的狀態(tài)數(shù)據(jù)與告警/事件條件集,并響應(yīng)檢測(cè)到的告警/事件條件向監(jiān)控器或控制處理機(jī)(如控制處理機(jī)30)發(fā)布相應(yīng)的通知??刂铺幚頇C(jī)30向受控域設(shè)備/調(diào)節(jié)器發(fā)布相應(yīng)的信號(hào)以處理事件/告警條件。一個(gè)同樣在管理控制層16運(yùn)行的歷史記錄機(jī)42將從過(guò)程控制系統(tǒng)的上述任何層接收到的數(shù)據(jù)歸檔。這種數(shù)據(jù)能被多個(gè)應(yīng)用程序?qū)彶楹万?yàn)證。一個(gè)人機(jī)接口(HMI)44是另一個(gè)連接到管理控制層16的節(jié)點(diǎn)。人機(jī)接口44提供圖形/文本用戶功能集,使得人類可以查看關(guān)于與圖1所描述的項(xiàng)目有關(guān)的過(guò)程控制系統(tǒng)的受控過(guò)程的操作/狀態(tài)。
在本發(fā)明一個(gè)示例性實(shí)施方式中,數(shù)據(jù)訪問(wèn)服務(wù)器50介于過(guò)程控制系統(tǒng)的管理控制層16的處理節(jié)點(diǎn)和低層(如本地控制層14和場(chǎng)總線層12)之間。數(shù)據(jù)訪問(wèn)服務(wù)器50從域設(shè)備20(通過(guò)信道52)和/或控制處理機(jī)30(通過(guò)信道54)接收和/或提取數(shù)據(jù),并將相應(yīng)的(可能已經(jīng)重新設(shè)置了格式)數(shù)據(jù)提供給過(guò)程控制網(wǎng)絡(luò)10的管理控制層16的處理節(jié)點(diǎn)。數(shù)據(jù)訪問(wèn)服務(wù)器50執(zhí)行向多個(gè)客戶應(yīng)用程序提供數(shù)據(jù)的任務(wù),其中客戶應(yīng)用程序根據(jù)特定數(shù)據(jù)交換協(xié)議獲取數(shù)據(jù),否則不能訪問(wèn)在本地控制層14和域總線層12提供的過(guò)程控制數(shù)據(jù)。當(dāng)新的客戶應(yīng)用程序使用新開發(fā)的數(shù)據(jù)交換協(xié)議,或者目前不被數(shù)據(jù)訪問(wèn)服務(wù)器50支持的現(xiàn)有數(shù)據(jù)交換協(xié)議時(shí),保持?jǐn)?shù)據(jù)訪問(wèn)服務(wù)器50向新的管理層客戶應(yīng)用程序提供過(guò)程控制/制造數(shù)據(jù)的能力可能是一個(gè)不小的、成本很高的任務(wù)。
但是,結(jié)合了本發(fā)明的數(shù)據(jù)訪問(wèn)服務(wù)器50提供了一個(gè)可擴(kuò)展的客戶接口結(jié)構(gòu),它引入了DAS50的擴(kuò)展,以支持附加的數(shù)據(jù)交換協(xié)議,即使數(shù)據(jù)訪問(wèn)服務(wù)器50已配置在了過(guò)程控制網(wǎng)絡(luò)中。這樣的附加協(xié)議支持是通過(guò)結(jié)合模塊化程序/系統(tǒng)擴(kuò)展(如插件)來(lái)實(shí)現(xiàn)的,該模塊化程序/系統(tǒng)擴(kuò)展支持符合添加到在網(wǎng)絡(luò)10的管理控制層16運(yùn)行的應(yīng)用程序集的新客戶應(yīng)用程序的數(shù)據(jù)訪問(wèn)要求的特定數(shù)據(jù)交換協(xié)議。在本發(fā)明的一個(gè)示例性實(shí)施方式中(下面參照?qǐng)D3進(jìn)行了說(shuō)明),數(shù)據(jù)訪問(wèn)服務(wù)器50中的一個(gè)庫(kù)將激活模塊化程序/系統(tǒng)擴(kuò)展。激活的擴(kuò)展通過(guò)訪問(wèn)由數(shù)據(jù)訪問(wèn)服務(wù)器50中的一個(gè)引擎執(zhí)行的應(yīng)用程序接口集支持的核心數(shù)據(jù)訪問(wèn)服務(wù)器功能來(lái)執(zhí)行客戶應(yīng)用程序。
安裝數(shù)據(jù)交換協(xié)議擴(kuò)展模塊的過(guò)程可在數(shù)據(jù)訪問(wèn)服務(wù)器50的使用期限的任何時(shí)刻進(jìn)行,包括最初安裝了數(shù)據(jù)訪問(wèn)服務(wù)器50后。當(dāng)升級(jí)到支持新客戶應(yīng)用程序版本的附加數(shù)據(jù)交換協(xié)議(如OPC的新版本)時(shí),不需要安裝新版本數(shù)據(jù)訪問(wèn)服務(wù)器50。而是由先前安裝的數(shù)據(jù)訪問(wèn)服務(wù)器50軟件的開發(fā)者/維護(hù)者新建一個(gè)支持新的OPC數(shù)據(jù)交換協(xié)議的客戶協(xié)議插件。然后新的OPC插件被添加到現(xiàn)有的結(jié)合了可擴(kuò)展的、基于插件的數(shù)據(jù)訪問(wèn)服務(wù)器結(jié)構(gòu)的數(shù)據(jù)訪問(wèn)服務(wù)器中。
另外,注意到本發(fā)明不限于任何特定的過(guò)程控制系統(tǒng)網(wǎng)絡(luò)拓?fù)浠蚣夹g(shù)。例如,所發(fā)布的示例性過(guò)程控制網(wǎng)絡(luò)包括一個(gè)分級(jí)配置的數(shù)字系統(tǒng)。但是,在一個(gè)替換網(wǎng)絡(luò)實(shí)施方式中,本發(fā)明被結(jié)合到一個(gè)連接到單層過(guò)程控制網(wǎng)絡(luò)的DAS中,該網(wǎng)絡(luò)的域設(shè)備、控制處理機(jī)、管理控制應(yīng)用程序組成單條總線上的節(jié)點(diǎn)。在另一種情況中,DAS接收關(guān)于使用過(guò)程通信的4-20毫安標(biāo)準(zhǔn)的常規(guī)模擬域設(shè)備的數(shù)據(jù)。
轉(zhuǎn)到圖2,示意性地描述了數(shù)據(jù)訪問(wèn)服務(wù)器50的一般接口配置。在數(shù)據(jù)源一側(cè),數(shù)據(jù)訪問(wèn)服務(wù)器50通過(guò)特定制造商數(shù)據(jù)輸入邏輯58從諸如域設(shè)備20或過(guò)程控制器30這樣的物理設(shè)備56獲取數(shù)據(jù)。結(jié)合到特定制造商數(shù)據(jù)輸入邏輯的特定制造商數(shù)據(jù)訪問(wèn)協(xié)議的例子為DF1和Allen Bradley PLC的可編程控制器控制命令(PCCC)。數(shù)據(jù)訪問(wèn)服務(wù)器50將獲取的數(shù)據(jù)轉(zhuǎn)換為一般的格式,并將轉(zhuǎn)化后的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)訪問(wèn)服務(wù)器50保持的一個(gè)數(shù)據(jù)庫(kù)中。響應(yīng)特定的客戶請(qǐng)求,數(shù)據(jù)訪問(wèn)服務(wù)器從數(shù)據(jù)庫(kù)取出數(shù)據(jù),并根據(jù)與向客戶60、62和64傳輸數(shù)據(jù)所需的各個(gè)不同的客戶數(shù)據(jù)交換協(xié)議有關(guān)的特定客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議傳輸數(shù)據(jù)。在本發(fā)明的一個(gè)示例性實(shí)施方式中,三個(gè)結(jié)合在數(shù)據(jù)訪問(wèn)服務(wù)器50中的特定協(xié)議的插件支持通過(guò)三個(gè)不同的數(shù)據(jù)交換協(xié)議(DDE、Suite Logic和OPC)向客戶60、62和64提供過(guò)程控制數(shù)據(jù)訪問(wèn)。結(jié)合在DAS50中的特定數(shù)據(jù)交換協(xié)議的插件分別為客戶60、62和64的數(shù)據(jù)訪問(wèn)產(chǎn)生DDE接口70、SuiteLink接口72和OPC2.0接口74。
轉(zhuǎn)到圖3,示意性地描述了結(jié)合本發(fā)明的一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器的軟件結(jié)構(gòu)。如圖3所示,結(jié)合本發(fā)明的一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器的結(jié)構(gòu)包括,例如,三個(gè)不同的功能組件。一個(gè)客戶數(shù)據(jù)交換組件80負(fù)責(zé)接收客戶應(yīng)用程序請(qǐng)求并根據(jù)所支持的特定數(shù)據(jù)交換協(xié)議將響應(yīng)數(shù)據(jù)提出給客戶應(yīng)用程序。一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器(DAS)引擎90組件根據(jù)由客戶應(yīng)用程序請(qǐng)求發(fā)起的來(lái)自客戶協(xié)議組件80的先前的請(qǐng)求向客戶協(xié)議組件80提出全局?jǐn)?shù)據(jù)。DAS引擎90還與設(shè)備協(xié)議組件96接口。設(shè)備協(xié)議組件96負(fù)責(zé)將從諸如域設(shè)備和控制處理機(jī)這樣的數(shù)據(jù)源接收的數(shù)據(jù)發(fā)送到DAS引擎90。然后DAS引擎90將接收到的數(shù)據(jù)傳遞回到客戶協(xié)議組件80的一個(gè)特定的協(xié)議模塊或者存儲(chǔ)接收到的數(shù)據(jù),等待由客戶應(yīng)用程序請(qǐng)求的由DAS50通過(guò)客戶數(shù)據(jù)交換協(xié)議組件80接收到的以后的請(qǐng)求或更新。
如前所述,客戶數(shù)據(jù)交換協(xié)議組件80有助于根據(jù)DAS50當(dāng)前支持的特定數(shù)據(jù)交換協(xié)議向客戶應(yīng)用程序提供數(shù)據(jù)。如圖3所示,客戶數(shù)據(jù)交換協(xié)議組件80結(jié)合了一個(gè)模塊結(jié)構(gòu)。尤其地,客戶數(shù)據(jù)交換協(xié)議組件80包括一組可擴(kuò)展的客戶數(shù)據(jù)交換協(xié)議模塊集(如插件84、86和88),該模塊集支持DAS50和一組根據(jù)特定數(shù)據(jù)交換協(xié)議與DAS50通信的客戶應(yīng)用程序集之間的特定數(shù)據(jù)交換協(xié)議的交互。這種數(shù)據(jù)交換協(xié)議包括,例如,DDE、OPC2.0、和SuiteLink。這三種數(shù)據(jù)交換協(xié)議的每一個(gè)分別由安裝于并同時(shí)激活在DAS50上的DDE插件84、OPC2.0插件86和SL插件88處理。
插件84、86和88通過(guò)一個(gè)結(jié)合在插件84、86和88以及DAS引擎90中的標(biāo)準(zhǔn)接口集(下文中參照?qǐng)D8和9說(shuō)明)與DAS引擎90交互。一個(gè)標(biāo)準(zhǔn)接口集82(參見(jiàn)圖9)包括任何一個(gè)插件可能需要的接口操作集,以使得DAS引擎90能夠響應(yīng)由插件從在過(guò)程控制系統(tǒng)的管理控制層執(zhí)行的客戶應(yīng)用程序接收的請(qǐng)求。插件和DAS引擎90之間的標(biāo)準(zhǔn)化接口還有助于在不影響插件與替換DAS引擎90的兼容性的情況下替換DAS引擎90。
數(shù)據(jù)交換協(xié)議組件80的插件雖然遵循由DAS引擎90提供的特定接口,但卻是以多種方法產(chǎn)生的??蛻魯?shù)據(jù)交換協(xié)議層80的插件可隨意寫成。但是,在本發(fā)明的一個(gè)實(shí)施方式中,插件是由一個(gè)工具包生成的,該工具包包括結(jié)合在DAS引擎90中的包括對(duì)標(biāo)準(zhǔn)接口的調(diào)用的插件的部分指定的接口程序。特定協(xié)議編程完成每個(gè)對(duì)應(yīng)于特定數(shù)據(jù)交換協(xié)議的插件。
數(shù)據(jù)交換協(xié)議組件80的特定協(xié)議插件使得數(shù)據(jù)訪問(wèn)服務(wù)器50能夠?qū)AS 50接收的從過(guò)程控制系統(tǒng)中的域設(shè)備和控制處理機(jī)生成的數(shù)據(jù),根據(jù)客戶應(yīng)用程序所使用的特定數(shù)據(jù)交換協(xié)議的語(yǔ)言、方法和要求提供給客戶應(yīng)用程序。從而,數(shù)據(jù)交換協(xié)議組件80有助于為利用過(guò)程控制系統(tǒng)處理機(jī)和域設(shè)備提供的信息的客戶應(yīng)用程序建立特定數(shù)據(jù)交換協(xié)議接口。客戶應(yīng)用程序反過(guò)來(lái)可以利用接收到的信息實(shí)現(xiàn)對(duì)工業(yè)/制造過(guò)程的管理控制。
當(dāng)然,僅當(dāng)數(shù)據(jù)交換協(xié)議組件80支持特定客戶應(yīng)用程序使用的數(shù)據(jù)交換協(xié)議時(shí),DAS50才能接收數(shù)據(jù)請(qǐng)求并向特定客戶應(yīng)用程序提供信息。在本發(fā)明的說(shuō)明性實(shí)施方式中,這種特定協(xié)議支持是由一個(gè)安裝在DAS50上的通過(guò)標(biāo)準(zhǔn)接口集82與DAS引擎90提供的核心功能接口的數(shù)據(jù)交換協(xié)議插件提供的。因此,如果一個(gè)新的客戶應(yīng)用程序使用目前安裝DAS50上的插件不支持的數(shù)據(jù)交換協(xié)議,則一個(gè)新的插件被安裝在數(shù)據(jù)交換協(xié)議組件80處。如果當(dāng)前一個(gè)特定數(shù)據(jù)交換協(xié)議不存在插件,則為以前不支持的數(shù)據(jù)交換協(xié)議開發(fā)新的插件。
所發(fā)布的DAS結(jié)構(gòu)有助于使得增加DAS50以結(jié)合一個(gè)以前不支持的由新的客戶應(yīng)用程序所使用的數(shù)據(jù)交換協(xié)議對(duì)現(xiàn)有的DAS50程序的影響最小。新插件由系統(tǒng)管理員通過(guò)使用幾個(gè)已熟知的安裝程序中的任何一個(gè)在不修改現(xiàn)有DAS50程序的情況下安裝在DAS50上。通過(guò)安裝新插件擴(kuò)展DAS50能力以支持新的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議,不需要重新開發(fā)DAS50軟件,也不需要重寫現(xiàn)有DAS50軟件的局部。從而,圖3所示的DAS50尤其是數(shù)據(jù)交換協(xié)議組件80的結(jié)構(gòu),減少了增加和/或升級(jí)由配置在一個(gè)過(guò)程控制網(wǎng)絡(luò)/系統(tǒng)中的DAS50所支持的當(dāng)前數(shù)據(jù)交換集所需要的勞動(dòng)力。
在本發(fā)明的一個(gè)實(shí)施方式中,DAS50的實(shí)現(xiàn)是部分基于熟知的MICROSOFT公司的COM/DCOM技術(shù)的。為覆蓋盡可能多的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議,數(shù)據(jù)訪問(wèn)服務(wù)器50既支持動(dòng)態(tài)插件也支持靜態(tài)插件。動(dòng)態(tài)插件是一類封裝了客戶協(xié)議的插件(如OPC),其中服務(wù)器能夠被客戶應(yīng)用程序請(qǐng)求(由動(dòng)態(tài)插件接收)所激活。通常這樣的插件的客戶通過(guò)一個(gè)服務(wù)控制管理器(SCM)激活服務(wù)器(在這里是DAS50),被激活的服務(wù)器的生存期由客戶參考計(jì)數(shù)所決定。當(dāng)DAS的客戶參考計(jì)數(shù)達(dá)到0時(shí),服務(wù)器關(guān)閉或進(jìn)入某種形式的非活動(dòng)狀態(tài)(至少對(duì)于該特定插件部分)。另一方面,靜態(tài)插件是一類旨在與不具有服務(wù)器激活設(shè)備(如DDE和SuiteLind數(shù)據(jù)交換協(xié)議客戶應(yīng)用程序)的客戶通信并預(yù)期數(shù)據(jù)訪問(wèn)服務(wù)器在客戶試圖與數(shù)據(jù)訪問(wèn)服務(wù)器連接和通信時(shí)被激活的插件。本發(fā)明的實(shí)施方式包括靜態(tài)和動(dòng)態(tài)插件中的一種或兩種。
所發(fā)布的數(shù)據(jù)訪問(wèn)服務(wù)器結(jié)構(gòu)的可擴(kuò)展數(shù)據(jù)交換協(xié)議接口有助于實(shí)現(xiàn)在DAS引擎90中實(shí)現(xiàn)的數(shù)據(jù)訪問(wèn)服務(wù)器的核心組件的獨(dú)立開發(fā)/修改,以及實(shí)現(xiàn)在特定協(xié)議插件中實(shí)現(xiàn)的數(shù)據(jù)交換協(xié)議的開發(fā)/結(jié)合。如果在完成數(shù)據(jù)訪問(wèn)服務(wù)器50的開發(fā)和配置后需要支持新的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議,則對(duì)新協(xié)議的支持是通過(guò)開發(fā)和安裝一個(gè)根據(jù)標(biāo)準(zhǔn)接口集82的接口要求開發(fā)的新的特定協(xié)議插件來(lái)建立的。從而,數(shù)據(jù)訪問(wèn)服務(wù)器50的配置不會(huì)由于需要建立對(duì)新的或目前不支持的數(shù)據(jù)交換協(xié)議而一直繼續(xù)。下文說(shuō)明的圖4描述了當(dāng)新的數(shù)據(jù)交換協(xié)議插件被安裝在執(zhí)行數(shù)據(jù)訪問(wèn)服務(wù)器50的網(wǎng)絡(luò)節(jié)點(diǎn)上時(shí),在數(shù)據(jù)訪問(wèn)服務(wù)器50上執(zhí)行的事件序列。此后,圖5和6描述了實(shí)現(xiàn)了所發(fā)布的包括插件形式的客戶協(xié)議擴(kuò)展模塊的可擴(kuò)展數(shù)據(jù)訪問(wèn)服務(wù)器結(jié)構(gòu)的一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器的激活和關(guān)閉過(guò)程中的事件序列及執(zhí)行它們的實(shí)體。
DAS引擎90邏輯地組織從設(shè)備接收到的數(shù)據(jù)以便通過(guò)標(biāo)準(zhǔn)接口集82向插件(如DDE插件84)提供一個(gè)標(biāo)準(zhǔn)/普通數(shù)據(jù)訪問(wèn)接口。如上文所說(shuō)明的,數(shù)據(jù)交換協(xié)議組件80的插件,提供對(duì)接收到的數(shù)據(jù)的特定客戶協(xié)議訪問(wèn)。從而,DAS引擎90與被修改以兼容先前不支持的數(shù)據(jù)交換協(xié)議的數(shù)據(jù)交換協(xié)議組件80相比保持相對(duì)穩(wěn)定(不修改DAS引擎90)。
在DAS引擎90處以標(biāo)準(zhǔn)方式(不論發(fā)出請(qǐng)求的客戶的協(xié)議如何)執(zhí)行響應(yīng)一個(gè)特定客戶協(xié)議插件所指定的請(qǐng)求的數(shù)據(jù)激活或?qū)Υ鎯?chǔ)數(shù)據(jù)的實(shí)際取出。在本發(fā)明的一個(gè)實(shí)施方式中,特定客戶協(xié)議插件根據(jù)特定數(shù)據(jù)交換協(xié)議接收所需項(xiàng)目的數(shù)據(jù)請(qǐng)求,并將請(qǐng)求轉(zhuǎn)化成一個(gè)或多個(gè)對(duì)與標(biāo)準(zhǔn)接口集82有關(guān)的特定操作的調(diào)用。調(diào)用被DAS引擎90中的核心數(shù)據(jù)訪問(wèn)功能處理。DAS引擎90向設(shè)備協(xié)議發(fā)出相應(yīng)的請(qǐng)求(或者取出已由設(shè)備協(xié)議提供的數(shù)據(jù))。如果需要,設(shè)備請(qǐng)求從過(guò)程控制系統(tǒng)中的數(shù)據(jù)源(如,域設(shè)備和控制處理機(jī))取出被請(qǐng)求的數(shù)據(jù)。DAS引擎90通過(guò)結(jié)合在DAS引擎到插件接口中的標(biāo)準(zhǔn)接口插件操作返回?cái)?shù)據(jù)(參見(jiàn)圖8和圖9)。
DAS引擎90軟件管理群組以及群組涉及的項(xiàng)目。一般地,一個(gè)群組是項(xiàng)目或者可能是其他具有相似要求的群組(在嵌套配置中)的集合。一個(gè)項(xiàng)目代表/對(duì)應(yīng)于數(shù)據(jù)訪問(wèn)服務(wù)器50上的一個(gè)數(shù)據(jù)源。DAS引擎90還管理群組和項(xiàng)目的等級(jí)層次一低層端點(diǎn)為單個(gè)物理項(xiàng)目(如,諸如可編程邏輯控制器這樣的數(shù)據(jù)供應(yīng)設(shè)備中的一個(gè)對(duì)象)。DAS引擎90支持群組與特定涉及的項(xiàng)目之間的n到1關(guān)系。從而,DAS引擎90最優(yōu)化了對(duì)項(xiàng)目的訪問(wèn),以便如果多個(gè)(n)客戶/群組訪問(wèn)/涉及一個(gè)相同的數(shù)據(jù)項(xiàng),則DAS引擎90只獲取數(shù)據(jù)項(xiàng)一次,然后將數(shù)據(jù)提供給多個(gè)(n)請(qǐng)求者-有可能根據(jù)所支持的多個(gè)數(shù)據(jù)交換協(xié)議。在本發(fā)明的一個(gè)特定實(shí)施方式中,DAS引擎90將取出的一個(gè)數(shù)據(jù)值存儲(chǔ)為一個(gè)物理項(xiàng),所有涉及該數(shù)據(jù)項(xiàng)的客戶(群組項(xiàng))使用所存儲(chǔ)的物理項(xiàng)的屬性。每個(gè)物理項(xiàng)保持/提供一個(gè)相應(yīng)數(shù)據(jù)項(xiàng)的當(dāng)前值、時(shí)間戳和質(zhì)量(VTQ)。每個(gè)群組項(xiàng)存儲(chǔ)群組項(xiàng)接收到的所涉及項(xiàng)目的最新更新的值和質(zhì)量。在取出了對(duì)應(yīng)于一個(gè)所涉及的物理項(xiàng)的被請(qǐng)求的特定數(shù)據(jù)后,DAS引擎90訪問(wèn)數(shù)據(jù)交換協(xié)議組件80中所包含的數(shù)據(jù)交換協(xié)議插件之一,以根據(jù)一個(gè)特定數(shù)據(jù)交換協(xié)議將所涉及的項(xiàng)目的數(shù)據(jù)提供給一個(gè)客戶應(yīng)用程序。
數(shù)據(jù)訪問(wèn)服務(wù)器50的軟件結(jié)構(gòu)的最低層是設(shè)備協(xié)議組件(或“服務(wù)器特定部分”)96。設(shè)備協(xié)議組件96實(shí)現(xiàn)硬件(還可能是數(shù)據(jù)庫(kù))協(xié)議,以便將實(shí)際數(shù)據(jù)從域設(shè)備20和控制處理機(jī)30發(fā)送到DAS引擎90。設(shè)備協(xié)議組件96實(shí)現(xiàn)一個(gè)或多個(gè)不同的數(shù)據(jù)提取接口標(biāo)準(zhǔn),以便從過(guò)程控制系統(tǒng)/網(wǎng)絡(luò)環(huán)境中的多個(gè)域設(shè)備和控制處理機(jī)中獲取過(guò)程控制信息。
最后,盡管在圖3中沒(méi)有特別描述,但DAS50包括一個(gè)支持功能庫(kù),包括與WINDWOS操作系統(tǒng)的COM/DCOM組件有關(guān)的標(biāo)準(zhǔn)支持功能。這些支持功能有助于圖3中所描述的DAS50的組件的啟動(dòng)和關(guān)閉。這些支持功能的操作在下文中聯(lián)系DAS50執(zhí)行的示例性方法說(shuō)明。
現(xiàn)轉(zhuǎn)到圖4,描述了通過(guò)插件將一個(gè)新的客戶協(xié)議添加到數(shù)據(jù)訪問(wèn)服務(wù)器50的步驟集。插件本身包括一個(gè)或多個(gè)在配置時(shí)復(fù)制到目標(biāo)服務(wù)器系統(tǒng)上的軟件模塊(如dll或exe文件)。例如,DAS50是一個(gè)執(zhí)行Wonderware的數(shù)據(jù)訪問(wèn)服務(wù)器軟件的計(jì)算節(jié)點(diǎn)。在本例中,插件被打包在一個(gè)可由管理員執(zhí)行的自安裝程序/實(shí)用程序中。增加過(guò)程在高層處理,不需要用人工編程技能完成。在步驟100,一位系統(tǒng)工程師啟動(dòng)一個(gè)熟知的設(shè)計(jì)的安裝程序,該設(shè)計(jì)在步驟102中生成一個(gè)窗口(或一系列窗口),窗口上給出與特定客戶協(xié)議插件有關(guān)的自定義選項(xiàng)集。在步驟104中,插件軟件模塊被配置在DAS50上(以及其他任何執(zhí)行插件軟件的計(jì)算設(shè)備上)。
接下來(lái),在步驟106中,調(diào)用注冊(cè)命令,以根據(jù)插件軟件配置其上的特定操作環(huán)境/系統(tǒng)的要求來(lái)注冊(cè)插件軟件。正如本領(lǐng)域技術(shù)熟練者將欣賞的那樣,根據(jù)不同系統(tǒng)的通知要求,不同系統(tǒng)間的這些要求是不同的。在本發(fā)明的一個(gè)示例性實(shí)施方式中,插件注冊(cè)在一個(gè)插件庫(kù)中。在示例性實(shí)施方式中,使用WINDWOS“組件類別”機(jī)制在MICROSOFT WINDOW環(huán)境中實(shí)現(xiàn)插件庫(kù)。在WINDOWS環(huán)境中,組件類別機(jī)制采用WINDOWS注冊(cè)表作為標(biāo)識(shí)的注冊(cè)協(xié)議擴(kuò)展插件的存儲(chǔ)區(qū)域。通過(guò)這種注冊(cè)配置,既可以對(duì)邏輯上相關(guān)的組件進(jìn)行分組,還可以用使用該插件的客戶應(yīng)用程序枚舉注冊(cè)組件。在協(xié)議啟用步驟108中,執(zhí)行步驟以使得使用啟用的特定客戶數(shù)據(jù)交換協(xié)議的客戶應(yīng)用程序能夠看到啟用插件的DAS50。例如,在OPC客戶的情況下,DAS50注冊(cè)在WINDOWS注冊(cè)表的OPC類別中。步驟108建立了客戶應(yīng)用程序和注冊(cè)插件中實(shí)現(xiàn)的特定客戶訪問(wèn)協(xié)議間的鏈接。在協(xié)議啟用步驟108中,DAS50激活注冊(cè)的協(xié)議插件根據(jù)特定客戶協(xié)議促進(jìn)與發(fā)出請(qǐng)求的客戶的交互的能力。此后,啟用的插件作為協(xié)議接口運(yùn)行在DAS50存儲(chǔ)的過(guò)程數(shù)據(jù)和使用啟用的插件中包含的數(shù)據(jù)傳輸協(xié)議的發(fā)出請(qǐng)求的客戶之間。雖然在示例性實(shí)施方式中使用了WINDOWS注冊(cè)表,但是在本發(fā)明的替換實(shí)施方式中插件或其他擴(kuò)展模塊的注冊(cè)可通過(guò)其他注冊(cè)庫(kù)產(chǎn)生。
在說(shuō)明了客戶協(xié)議插件如何添加到現(xiàn)有系統(tǒng)后,注意力轉(zhuǎn)到圖5,一個(gè)概括性的步驟集描述了DAS50如何被激活/初始化,在這個(gè)特定的例子中是與一個(gè)OPC客戶請(qǐng)求有關(guān)的。在特定例子中,響應(yīng)初始客戶請(qǐng)求使用MICROSOFT WINDOWS SCM實(shí)用程序動(dòng)態(tài)激活DAS50。但是,在本發(fā)明的替換實(shí)施方式中,DAS50和/或客戶協(xié)議特定插件是在接收到來(lái)自客戶應(yīng)用程序的特定請(qǐng)求之前靜態(tài)激活的。在初始啟動(dòng)過(guò)程中DAS50被激活,并確立支持?jǐn)?shù)據(jù)交換協(xié)議組件80和DAS引擎90的客戶數(shù)據(jù)交換協(xié)議插件之間的連接的對(duì)象和數(shù)據(jù)結(jié)構(gòu)。特別地,在駐留DAS50的所有插件的DAS引擎90的激活過(guò)程中,訪問(wèn)所安裝的插件庫(kù)(如,WINDDOWS注冊(cè)表內(nèi))并激活所安裝的客戶協(xié)議插件。在激活過(guò)程中,DAS引擎90執(zhí)行一個(gè)步驟序列,以便根據(jù)基于MICROSOFT的COM(組件對(duì)象模型)的技術(shù)激活安裝的每個(gè)動(dòng)態(tài)激活的插件。從而,從DAS50的客戶的觀點(diǎn)來(lái)看,DAS50(及其被激活的協(xié)議插件)對(duì)客戶應(yīng)用程序來(lái)說(shuō)是執(zhí)行特定客戶使用的特定客戶協(xié)議的單個(gè)實(shí)體。實(shí)際中,DAS50是一個(gè)多組件系統(tǒng),它具有多個(gè)客戶接口組件(如插件),為DAS50提供了擴(kuò)展其所支持的客戶協(xié)議接口集,以便向多個(gè)實(shí)踐多種不同的數(shù)據(jù)交換協(xié)議的不同客戶提供數(shù)據(jù)。要強(qiáng)調(diào)的是這些步驟是示例性的,本領(lǐng)域技術(shù)熟練者將樂(lè)意欣賞在本發(fā)明的替換實(shí)施方式中修改DAS50及其安裝的插件的啟動(dòng)步驟。
在步驟200中,一個(gè)OPC客戶請(qǐng)求(來(lái)自任何通過(guò)OPC協(xié)議與DAS50接口的應(yīng)用程序)調(diào)用“CoCreateInstance”WINDOWS API。隨后的步驟創(chuàng)建一個(gè)圖3中所表現(xiàn)的類型的完整功能數(shù)據(jù)訪問(wèn)服務(wù)器,它包括客戶數(shù)據(jù)交換協(xié)議插件集84、86和88,DAS引擎90和設(shè)備協(xié)議組件96,以及使得這些組件能夠在DAS50中彼此間傳遞請(qǐng)求和數(shù)據(jù)的結(jié)構(gòu)。CoCreateInstance API被調(diào)用一次,以啟用一個(gè)DA服務(wù)器可執(zhí)行文件。由于在本發(fā)明的一個(gè)首選實(shí)施方式中,DA服務(wù)器的單個(gè)可執(zhí)行實(shí)例支持多個(gè)到標(biāo)識(shí)的DA服務(wù)器的不同連接上的(并且可能使用不同的數(shù)據(jù)交換協(xié)議)多個(gè)客戶請(qǐng)求,因此啟動(dòng)可執(zhí)行文本的附加復(fù)本不但沒(méi)必要還有可能降低DAS50的性能。
響應(yīng)CoCreateInstance調(diào)用,在步驟202中WINDWOS操作系統(tǒng)的一個(gè)系統(tǒng)控制管理器(SCM)發(fā)起一個(gè)“CreateInstance”WINDOWS API調(diào)用,以創(chuàng)建一個(gè)IOS_Activate_Class_Factory對(duì)象實(shí)例。接下來(lái),在步驟204中,IOS_ActivateClassFactory創(chuàng)建一個(gè)IOS_Server對(duì)象。此操作僅發(fā)生一次(在DAS的初始啟動(dòng)中)。IOS_Server對(duì)象是從一個(gè)為特定設(shè)備協(xié)議組件96行為編寫的特定設(shè)備協(xié)議DLL創(chuàng)建的邏輯實(shí)體。IOS_Server對(duì)象支持DAS引擎90和DAS50的設(shè)備協(xié)議組件96之間的交互。在步驟204中創(chuàng)建IOS_Server對(duì)象后,在步驟206中IOS_Server對(duì)象調(diào)用IOT_Server對(duì)象的創(chuàng)建。從一個(gè)標(biāo)準(zhǔn)DAS引擎DLL生成的IOT_Server對(duì)象,建立了支持DAS引擎90和數(shù)據(jù)交換協(xié)議組件80(包括相應(yīng)于特定數(shù)據(jù)交換協(xié)議的插件(如OPC))以及DAS50的設(shè)備協(xié)議組件96之間的交互的連接。
在步驟208中,IOS_ActivateClassFactory初始化在步驟204中創(chuàng)建的IOS_Server對(duì)象實(shí)例。步驟208中的初始化包括傳遞使DAS引擎90和設(shè)備協(xié)議組件96能夠通信的信息。在步驟210中,IOS_Server建立橋?qū)ο螅鶕?jù)設(shè)備協(xié)議組件96支持的規(guī)范修改DAS引擎90的缺省行為(顯示出的對(duì)象和功能群組)。在步驟212和213,IOS_Server對(duì)象和IOT_Server對(duì)象交叉初始化橋?qū)ο?,以便IOS_Server對(duì)象和IOT_Server對(duì)象均能引用橋?qū)ο蟆?br>
在步驟214中,IOT_Server標(biāo)識(shí)所有安裝在運(yùn)行DAS50的計(jì)算機(jī)上的插件。在步驟214中標(biāo)識(shí)插件后,在步驟216中,IOT_Server對(duì)象調(diào)用指定一個(gè)插件(如OPC插件)的CoCreateInstance API。API調(diào)用導(dǎo)致根據(jù)所指定的(如OPC)插件初始化PluginCreator插件。步驟214和216對(duì)所有插件重復(fù)。完成步驟214和216后(有可能對(duì)于所支持的多個(gè)客戶數(shù)據(jù)交換協(xié)議而進(jìn)行多次重復(fù)),DAS90已準(zhǔn)備好處理來(lái)自客戶應(yīng)用程序的請(qǐng)求-包括在執(zhí)行步驟200至216時(shí)產(chǎn)生的一個(gè)第一客戶請(qǐng)求。
圖5的剩余步驟是關(guān)于創(chuàng)建一個(gè)特定客戶連接的邏輯數(shù)據(jù)訪問(wèn)(DA)服務(wù)器對(duì)象。這些剩余步驟只用于基于COM的客戶(如OPC)。在非COM客戶情況下,特定數(shù)據(jù)交換協(xié)議的插件處理客戶連接服務(wù)器對(duì)象的創(chuàng)建。在步驟218中,SCM調(diào)用IOS_Activate_ClassFactory對(duì)象上的CreateInstance操作,以初始化對(duì)應(yīng)于特定客戶-服務(wù)器連接的邏輯DA服務(wù)器對(duì)象的創(chuàng)建。在步驟220中,DAS50的IOS_Activate_ClassFactory對(duì)象創(chuàng)建一個(gè)IOS_Activate對(duì)象以便為創(chuàng)建來(lái)服務(wù)新的客戶應(yīng)用程序/DA服務(wù)器連接的邏輯DA服務(wù)器對(duì)象實(shí)例建立一個(gè)標(biāo)識(shí)。在步驟222中,IOS_Activate_ClassFactory對(duì)象將DA服務(wù)器的實(shí)例計(jì)數(shù)從0增加為1。實(shí)例計(jì)數(shù)代表DA服務(wù)器的當(dāng)前用戶數(shù)目。當(dāng)實(shí)例計(jì)數(shù)為0時(shí),DA服務(wù)器實(shí)例被刪除。
此后,步驟224、226、228和230中的調(diào)用集傳遞調(diào)用,在便為特定客戶連接創(chuàng)建新的邏輯DA服務(wù)器對(duì)象。在步驟224中,IOS_Activate_Class_Factory調(diào)用IOS_Activate對(duì)象上的為接口(邏輯DA服務(wù)器實(shí)例)指定標(biāo)識(shí)的QueryInterface方法。在步驟226中,IOS_Activate用標(biāo)識(shí)的接口調(diào)用IOS_Server對(duì)象上的SystemQueryInterface方法。在步驟228和230中,傳遞建立客戶應(yīng)用程序和DAS 50之間的特定邏輯接口的請(qǐng)求以建立一個(gè)邏輯DA服務(wù)器對(duì)象時(shí),IOS_Server對(duì)象將接口標(biāo)識(shí)傳遞給IOT_Server對(duì)象,IOT_Server對(duì)象將接口標(biāo)識(shí)傳遞給PlugInCreator。
在步驟232中,PlugInCreator在現(xiàn)有DA服務(wù)器對(duì)象實(shí)例集中查找標(biāo)識(shí)的DA服務(wù)器對(duì)象實(shí)例。如果存在DA服務(wù)器對(duì)象實(shí)例,則來(lái)自基于COM的客戶(如OPC)的請(qǐng)求被指派給DA服務(wù)器對(duì)象。否則,在步驟234中為特定客戶連接創(chuàng)建邏輯DA服務(wù)器對(duì)象實(shí)例。
現(xiàn)參見(jiàn)圖6,描述了當(dāng)一個(gè)客戶應(yīng)用程序釋放一個(gè)邏輯DA服務(wù)器對(duì)象實(shí)例集中的最后一個(gè)實(shí)例時(shí)關(guān)閉DAS50的步驟集。注意到之前的例子是關(guān)于一個(gè)基于COM(如OTC)的插件連接的。在非COM插件的情況下,由插件本身進(jìn)行關(guān)閉。由于可能有多個(gè)插件和多個(gè)客戶同時(shí)連接到DAS50,在順序關(guān)閉中,DAS50確保在關(guān)閉其本身之前斷開所有連接的服務(wù)器。圖6描述的步驟說(shuō)明了通過(guò)為每個(gè)連接的客戶執(zhí)行握手程序執(zhí)行順序關(guān)閉的示例性方法。在步驟300中,一個(gè)客戶應(yīng)用程序通過(guò)調(diào)用相應(yīng)的IOS_Activate對(duì)象關(guān)閉與DAS50的連接-DAS50目前服務(wù)的連接中的最后一個(gè)。作為響應(yīng),在步驟302中,與客戶連接有關(guān)的IOS_Activate對(duì)象開始刪除與連接有關(guān)的DA服務(wù)器。在步驟304和306中,對(duì)象刪除和程序清除通過(guò)在圖5中概括的步驟中創(chuàng)建的IOS_Server和IOT_Server向PlugInCreator級(jí)聯(lián)。在步驟308中,PlugInCreator查找關(guān)于與斷開的客戶有關(guān)的數(shù)據(jù)交換協(xié)議的對(duì)象。在步驟310中,PlugInCreator調(diào)用DA服務(wù)器對(duì)象上相應(yīng)于客戶連接的釋放方法,在步驟312中DA服務(wù)器對(duì)象被銷毀。
如上文所說(shuō)明的,當(dāng)所有連接被關(guān)閉后,DAS50本身關(guān)閉。在步驟320中,連接的對(duì)象計(jì)數(shù)減1。假設(shè)當(dāng)前連接是DAS50的最后連接,對(duì)象計(jì)數(shù)達(dá)到0,即沒(méi)有連接。在步驟322中IOS_Activate對(duì)象調(diào)用IOS_server對(duì)象上的suggestshutdown方法。IOS_server將調(diào)用傳遞到IOT_server對(duì)象上。IOT_server以IsShutdownPossible方法調(diào)用的形式將關(guān)閉請(qǐng)求傳遞給PlugInCreator對(duì)象。如果關(guān)閉確實(shí)可能,則在步驟328中IOT_server對(duì)象調(diào)用PlugIn中心上的釋放方法。然后PlugIn中心關(guān)閉客戶用于所關(guān)閉的連接的特定數(shù)據(jù)交換協(xié)議的插件。最后,在步驟332中,IOT服務(wù)器清除創(chuàng)建來(lái)支持DAS50及其集成的客戶和設(shè)備接口協(xié)議組件的臨時(shí)結(jié)構(gòu)。
現(xiàn)轉(zhuǎn)到圖7,概括了DAS50響應(yīng)一個(gè)客戶應(yīng)用程序請(qǐng)求的示例性步驟集。同樣,請(qǐng)求是基于COM(如OPC)的客戶應(yīng)用程序。但是,不基于COM的客戶應(yīng)用程序被認(rèn)為屬于本發(fā)明的范圍之內(nèi)。對(duì)于非COM應(yīng)用程序過(guò)程步驟可能不同。在步驟400中,OPC客戶發(fā)出請(qǐng)求,調(diào)用圖5中描述所有或部分步驟(取決于這是否DAS50的第一個(gè)客戶連接)以便創(chuàng)建連接的一個(gè)DA服務(wù)器對(duì)象。一旦被激活,DAS50通過(guò)插件接收來(lái)自客戶應(yīng)用程序的請(qǐng)求。然后請(qǐng)求從適當(dāng)插件通過(guò)下文參考圖9說(shuō)明的標(biāo)準(zhǔn)接口操作調(diào)用傳遞到DAS引擎90。在DAS50建立起適當(dāng)?shù)腄A服務(wù)器對(duì)象以支持到客戶的連接后,在步驟402中客戶調(diào)用插件上的AddGroup功能,以建立一個(gè)容器,在其中存儲(chǔ)/訪問(wèn)客戶所請(qǐng)求的過(guò)程控制數(shù)據(jù)。在步驟404中,AddGroup請(qǐng)求被插件(如OPC插件86)通過(guò)標(biāo)準(zhǔn)接口操作“AddGroup”傳遞到DAS引擎90。在步驟406中,客戶應(yīng)用程序?qū)τ谒砑拥娜航M中的被標(biāo)識(shí)的數(shù)據(jù)的更改請(qǐng)求預(yù)訂服務(wù),在步驟408中預(yù)訂請(qǐng)求被傳遞到DAS引擎90。接下來(lái),在步驟410中,客戶應(yīng)用程序請(qǐng)求插件將特定數(shù)據(jù)項(xiàng)(如壓力傳感器讀數(shù))添加到在步驟402中添加的群組中。在步驟412中插件將請(qǐng)求傳遞到DAS引擎90。
此后,在步驟414中DAS引擎90通過(guò)向設(shè)備協(xié)議組件的請(qǐng)求獲取被請(qǐng)求的數(shù)據(jù)。在步驟416中,設(shè)備協(xié)議組件96執(zhí)行請(qǐng)求,以便使用特定設(shè)備協(xié)議從域設(shè)備數(shù)據(jù)提供者(包括控制處理機(jī))請(qǐng)求數(shù)據(jù)來(lái)獲取數(shù)據(jù)。在步驟418中,相應(yīng)于被請(qǐng)求的數(shù)據(jù)項(xiàng)的設(shè)備數(shù)據(jù)被域設(shè)備數(shù)據(jù)提供者提供給設(shè)備協(xié)議組件。在步驟420中,設(shè)備協(xié)議組件96將設(shè)備數(shù)據(jù)返回給DAS引擎90。接下來(lái),在步驟422中,DAS引擎90將設(shè)備數(shù)據(jù)提供給適當(dāng)?shù)牟寮?。插件?zhí)行消除未變化的數(shù)據(jù)所需的數(shù)據(jù)變化過(guò)濾,并在步驟424中將變化的數(shù)據(jù)轉(zhuǎn)發(fā)。
注意到對(duì)于圖7中描述的步驟序列,DAS(OPC)插件垂直線左側(cè)的步驟是根據(jù)一個(gè)客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議(如OPC2.0)執(zhí)行的。特定客戶應(yīng)用程序協(xié)議插件(如OPC插件86)根據(jù)特定數(shù)據(jù)交換協(xié)議與客戶通信。DAS插件垂直線右側(cè)的步驟是根據(jù)為所有插件和DAS引擎90通用定義的接口(操作)集執(zhí)行的一參見(jiàn)下文說(shuō)明的圖8和9。從而,DAS插件充當(dāng)特定客戶應(yīng)用程序協(xié)議和DAS引擎90之間的協(xié)議轉(zhuǎn)換器。
說(shuō)明了實(shí)現(xiàn)本發(fā)明的一個(gè)示例性數(shù)據(jù)訪問(wèn)服務(wù)器結(jié)構(gòu)后,以下觀察是對(duì)于服務(wù)器的模塊客戶協(xié)議接口結(jié)構(gòu)作出的。首先,特定設(shè)備數(shù)據(jù)的編碼與客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議是分離的。因此,開發(fā)數(shù)據(jù)訪問(wèn)服務(wù)器的兩個(gè)不同方面是自動(dòng)的。第二,使數(shù)據(jù)訪問(wèn)服務(wù)器50與采用支持插件的數(shù)據(jù)交換協(xié)議之一的客戶應(yīng)用程序接口不需要特別的客戶應(yīng)用程序協(xié)議配置。假定特定數(shù)據(jù)交換協(xié)議的插件存在,則系統(tǒng)管理員通過(guò)常規(guī)方式獲取和安裝插件。不需要更新DAS的核心功能—它是保持不變的。第三,支持“動(dòng)態(tài)”插件(對(duì)于基于COM的客戶)和“靜態(tài)”插件(對(duì)于不基于COM的客戶)。靜態(tài)插件不會(huì)激活DAS(即DAS必須獨(dú)立于插件啟動(dòng))。在出現(xiàn)靜態(tài)插件的情況下,提供DAS控制客戶以便用戶能夠在調(diào)用靜態(tài)插件處理客戶數(shù)據(jù)請(qǐng)求前啟動(dòng)DAS。動(dòng)態(tài)插件激活相關(guān)的服務(wù)器軟件,當(dāng)服務(wù)器的客戶引用計(jì)數(shù)達(dá)到0時(shí)服務(wù)器關(guān)閉。第四,通過(guò)本發(fā)明,可以對(duì)結(jié)合了初始安裝之后添加的插件的服務(wù)器庫(kù)的現(xiàn)有數(shù)據(jù)訪問(wèn)服務(wù)器進(jìn)行平衡(即提供現(xiàn)成的平臺(tái)),以便通過(guò)新的數(shù)據(jù)交換協(xié)議與新的客戶應(yīng)用程序接口。
在本發(fā)明的一個(gè)實(shí)施方式中,開發(fā)插件時(shí),插件是過(guò)程中組件(如,動(dòng)態(tài)鏈接庫(kù)(DLL))。但是,在本發(fā)明的一個(gè)替換實(shí)施方式中,插件被開發(fā)為數(shù)據(jù)訪問(wèn)服務(wù)器50的過(guò)程外組件(如*.exe)。關(guān)于線程,DAS引擎90被開發(fā)為多線程單元(MTA)。如果采用MTA,則避免了proxy/stub對(duì)(這減慢了性能)。對(duì)于封裝了基于COM的協(xié)議的插件,插件為MTA,以確保遵循IUnknown標(biāo)識(shí)的COM規(guī)則(MICROSOFT COM規(guī)范的一部分)。從而,每當(dāng)COM對(duì)象為請(qǐng)求者時(shí),它返回相同的接口以提供其IUnknow接口。對(duì)于其他接口沒(méi)有此要求。關(guān)于粒度,數(shù)據(jù)交換協(xié)議插件處理寬范圍的與取出數(shù)據(jù)有關(guān)的對(duì)象,包括服務(wù)器和群組對(duì)象。服務(wù)器對(duì)象給出全球服務(wù)器服務(wù)。服務(wù)器還被指定為涉及其他群組對(duì)象或特定數(shù)據(jù)項(xiàng)的群組對(duì)象的容器。
在本發(fā)明的一個(gè)實(shí)施方式中,插件和DAS引擎90之間的接口是基于COM接口的。下文說(shuō)明圖8中所標(biāo)識(shí)的由插件所執(zhí)行和由DAS引擎90所調(diào)用的接口操作的結(jié)構(gòu)和內(nèi)容。通過(guò)由DAS引擎90調(diào)用的和由所安裝的不同插件執(zhí)行的操作,DAS引擎90可與客戶應(yīng)用程序通過(guò)插件進(jìn)行過(guò)程數(shù)據(jù)通信。雖然下文標(biāo)識(shí)和說(shuō)明了接口操作及其相關(guān)操作的基本集合,但應(yīng)理解對(duì)于本領(lǐng)域技術(shù)熟練者,本發(fā)明的替換實(shí)施方式包括不同的接口操作和規(guī)范。
DAS引擎90到插件的接口以以下方式說(shuō)明。首先,一個(gè)接口“聲明(Declaration)”標(biāo)識(shí)與該接口有關(guān)的操作集。接下來(lái),聲明部分標(biāo)識(shí)的操作在以“操作(Operations)”為標(biāo)題而標(biāo)識(shí)出的子部分中單獨(dú)說(shuō)明。插件所執(zhí)行的操作是聯(lián)系所傳遞的示例性的參數(shù)和插件執(zhí)行的一般功能說(shuō)明的。
一個(gè)IioPiData接口500包括一個(gè)操作集,它被DAS引擎90調(diào)用,在插件內(nèi)執(zhí)行,是關(guān)于從DAS引擎90到數(shù)據(jù)交換協(xié)議的通知(包括數(shù)據(jù)),該通知是關(guān)于從一個(gè)被DAS引擎90管理/監(jiān)控的過(guò)程數(shù)據(jù)源讀出數(shù)據(jù)和向其寫入數(shù)據(jù),以便過(guò)程數(shù)據(jù)能夠被DAS引擎90通過(guò)設(shè)備協(xié)議96訪問(wèn)。以下是IioPiData接口500的聲明/概要示例。
Declaration [ object, uuid(7AA39773-AC55-11D2-8203-00A024A866AC), helpstring(″IIoPiData Interface″), pointer_default(unigue) ] interface IIoPiDataIUnknown { HRESULT OnData( [in] PIHANDLE hGroup, [in] DWORD dwCount, [in,size_is(dwCount)]PIHANDLE * phPlugInItems, [in,size_is(dwCount)]VARIANT * pvValues, [in,size_is(dwCount)]WORD * pwQualities, [in,size_is(dwCount)]FILETIME * pftTimeStamps,<!-- SIPO <DP n="20"> --><dp n="d20"/> [in,size_is(dwCount)]HRESULT * pErrors, [out]UPDATECODE * updatecode);HRESULT OnReadComplete( [in] DWORD dwCount, [in,size_is(dwCount)]PIHANDLE * phPlugInItems, [in,size_is(dwCount)]VARIANT * pvValues, [in,size_is(dwCount)]WORD * pwQualities, [in,size_is(dwCount)]FILETIME * pftTimeStamps, [in,size_is(dwCount)]HRESULT * PErrors, [in]CTTRANSACTIONDEF TransactionDef);HRHSULT OnWriteComplete( [in]DWORD dwCount, [in,size_is(dwCount)]PIHANDLE * phPlugInItems, [in,size_is(dwCount)]HRESULT * pErrors, [in]CTTRANSACTIONDEF TransactionDef
以下是對(duì)在一個(gè)特定數(shù)據(jù)交換協(xié)議插件中實(shí)現(xiàn)IioPiData接口500的示例性操作的說(shuō)明。
OperationsOnDataDeclarationHRESULT OnData( [in]PIHANDLE hGroup, [in]DWORD dwCoun, [in,size_is(dwCount)]PIHANDLE * phPlugInItems, [in,size_is(dwCount)]VARIANT * pvValues, [in,size_is(dwCount)]WORD * pwQualities, [in,size_is(dwCount)]FILETIME * pftTimeStamps, [in,size_is(dwCount)] HRESULT * pErrors, [out]UPDATECODE * updatecode )
OnData操作的參數(shù)說(shuō)明
備注
對(duì)于活動(dòng)項(xiàng)目,當(dāng)特定服務(wù)器協(xié)議引擎(在DAS50的設(shè)備協(xié)議層96處)確定某項(xiàng)目具有新值時(shí),該項(xiàng)目被添加到列表。在協(xié)議周期末尾(由協(xié)議引擎確定),新項(xiàng)目VTQ的列表被DAS引擎90通過(guò)此方法發(fā)送到特定數(shù)據(jù)交換協(xié)議插件。由DAS引擎90確定值的實(shí)際變化。只有那些接收了新更新的值的項(xiàng)目才被放進(jìn)列表中。
OnReadComplete Declaration HRESULT OnReadComplete( [in]DWORD dwCount, [in,size_is(dwCount)]PIHANDLE * phPlugInItems, [in,size_is(dwCount)]VARIANT * pvValues, [in,size_is(dwCount)]WORD * pwQualities, [in,size_is(dwCount)]FILETIME * pftTimeStamps, [in,size_is(dwCount)]HRESULT * pErrors, [in]CTTRANSACTIONDEF TransactionDef )
OnReadComplete操作的參數(shù)說(shuō)明
備注
對(duì)于請(qǐng)求讀取上的項(xiàng)目列表,值可由DAS引擎90以帶外方式使用此方法向發(fā)出請(qǐng)求的插件報(bào)告。對(duì)于活動(dòng)項(xiàng)目,OnReadComplete方法的工作方式與OnData方法相同。
OnWriteComplete
Declaration
HRESULT OnWriteComplete(
[in]DWORD dwCount,
[in,size_is(dwCoun)]PIHANDLE * phPlugInItems,
[in,size_is(dwCount)]HRESULT * pErrors,
[in]CTTRANSACTIONDEF TransactionDef
)
OnWriteComplete操作的參數(shù)定義
備注
對(duì)于DAS引擎90寫入的項(xiàng)目列表,使用此方法向特定數(shù)據(jù)交換協(xié)議插件報(bào)告寫入完成事件。對(duì)于命令讀取項(xiàng)目,OnWriteComplete方法的工作方式與OnReadComplete方法相同,只不過(guò)寫入的數(shù)據(jù)不需要VTQ。
繼續(xù)參考圖8,IioPlugIn接口502是每個(gè)到DAS引擎層90的插件所給出的主要接口。IioPlugIn接口502有助于DAS引擎層90對(duì)插件進(jìn)行一般操作。以下概括了IioPlugIn接口502的示例性實(shí)現(xiàn)的內(nèi)容。
Declaration [ object, uuid(7AA3977A-AC55-llD2-8203-00A024A866AC), helpstring(″IIoPlugIn Interface″), pointer_default(unique) ] interface IIoPlugInIUnknown { HRESULT Init( [in]IIotDbServer* pIotDbServer, [out]DWORD* nNumInterfaces ); HRESULT Get IEnumGUID( [in] REFIID riid, [out,iid_is(riid)]LPUNKNOWN* ppUnk ); HRESULT Shutdown(); HRESULT IsShutdownPossible([out]BOOL*bShutdown);}
以下是實(shí)現(xiàn)IioPlugin接口502的示例性操作的說(shuō)明。
Operations
GetIEnumGUID
Declaration
HRESULT GetIEnumGUID(
[in]REFIID riid,
[out,iid_is(riid)] LPUNKNOWN * ppUnk
)
GetEnumGuiD操作的參數(shù)說(shuō)明InitDeclarationHRESULT Init(
[in]IIotDbServer* pIotDbServer,
[out]DWORD* nNumInterfaces
)
Init操作的參數(shù)說(shuō)明
備注
通過(guò)init操作DAS引擎90可以初始化此插件,并將一個(gè)接口指針提供回到DAS引擎90中,被插件所用。
IsShutdownPossible
Declaration
HRESULT IsShutdownPossible([out]BOOL *bShutdown)
備注
通過(guò)IsShutdownPossible,DAS引擎90可詢問(wèn)各插件該插件是否能被關(guān)閉。通常插件會(huì)回答
-TRUE當(dāng)沒(méi)有外部客戶附加到插件上時(shí)以及回答
-FALSE當(dāng)有外部客戶附加到插件上時(shí)
返回代碼
S_OK-成功
S_FAIL-失敗,表示插件可能處于未定義狀態(tài)
Shutdown
Declaration
HRESULT Shutdown()
備注
通過(guò)Shutdown操作DAS引擎90可以通知特定插件數(shù)據(jù)訪問(wèn)服務(wù)器50將被關(guān)閉。響應(yīng)此通知插件可能
1.釋放所有到DAS引擎的接口引用
2.通知客戶(如果存在)DA服務(wù)器在斷開連接中(以與IOPCShutdown∷ShutdownRequest(…)相同的方式)
注意shutdown不判定插件是否能被關(guān)閉。插件被通知可能的關(guān)閉,并以某種方法寫入,以使得服務(wù)器可在調(diào)用Shutdonw()方法后的任何時(shí)刻被關(guān)閉。
返回代碼
S_OK-成功
S_FALSE-部分成功,表示插件可能處于未定義狀態(tài)
現(xiàn)轉(zhuǎn)到圖9,標(biāo)識(shí)了DAS引擎層90中執(zhí)行的操作所支持的接口集。DAS引擎層90響應(yīng)特定數(shù)據(jù)交換協(xié)議插件的調(diào)用執(zhí)行這些接口,以幫助數(shù)據(jù)訪問(wèn)服務(wù)器50與以可通信方式連接的可能根據(jù)數(shù)據(jù)訪問(wèn)服務(wù)器的客戶協(xié)議插件集所支持的多種數(shù)據(jù)交換協(xié)議操作的客戶應(yīng)用程序之間的數(shù)據(jù)通信。從而,下文說(shuō)明的接口代表DAS引擎90所執(zhí)行的用于與所有可安裝DAS50上的實(shí)現(xiàn)本發(fā)明的所支持的數(shù)據(jù)交換協(xié)議插件交互的接口操作的父集。
通過(guò)IiotDbServer接口600數(shù)據(jù)交換協(xié)議插件可操縱DAS引擎90處理的群組,并調(diào)用特定的通用服務(wù),如設(shè)置本地標(biāo)識(shí)符,驗(yàn)證數(shù)據(jù)項(xiàng)等。
Declaration[ object, uuid(AD50D6D1-BAA1-11D2-A9BF-00A0C9ED0BF0), helpstring(″IIotDbServer Interface″), pointer_default(unique)]interface IIotDbServerIUnknown{ HRESULT GetModuleName( [out,string]LPWSTR* ppModuleName );<!-- SIPO <DP n="27"> --><dp n="d27"/>HRESULT AddGroup( [in,string] LPCWSTR szName, [in] BOOL bActive, [in] DWORD dwRequestedUpdateRate, [in] PIHANDLE hPlugInGroup, [unique,in] LONG *pTimeBias, [in] FLOAT*pPercentDeadband, [in] DWORD dwLCID, [out] CTHANDLE *phServerGroup, [out] DWORD*pRevisedUpdateRate, [in] IIopiData* pIIopiData, [in] REFIIDriid, [out,iid_is(riid)] LPUNKNOWN*ppUnk);HRESULT GetStatus( [out] CTSERVERSTATUS ** ppServerStatus);HRESULT RemoveGroup( [in]CTHANDLE hServerGroup, [in]BOOL bForce);HRESULT GetErrorString( [in]HRESULT dwError, [in]LCID dwLocale, [out,string] LPWSTR* ppString);HRESULT QueryAvailableLocaleIDs( [out] DWORD *pdwCount, [out,size_is(,*pdwCount)]LCID **pdwLcid );HRESULT ValidateItems( [in] DWORD dwNumItems, [in,size_is(dwNumItems)] CTITEMDEF * pItemArray, [out,size_is(,dwNumItems)] CTITEMRESULT**ppValidationResults, [out,size_is(,dwNumItems)] HRESULT **ppErrors );HRESULT QueryOrganization( [out]CTNAMESPACETYPE * pNameSpaceType );<!-- SIPO <DP n="28"> --><dp n="d28"/>HRESULT BrowseCfgNode( [in]CSHANDLE hCfgNode, [out] CSHANDLE * phParent, [in] BOOLbBranches, [out] DWORD *pdwBranchCount, [out,size_is(,*pdwBranchCount)]CSHANDLE **pphBranches, [in] BOOLbLeafs, [out] DWORD *pdwLeafCount, [out,Size_is(,*pdwLeafCount)]CSHANDLE **pphLeaves, [in] BOOLbTopics, [out] DWORD *pdwTopicCount, [out,size_is(,*pdwTopicCount)]CSHANDLE **pphTopics );HRESULT GetCfgNodeByNameId( [in,string]LPCWSTR szName, [out] CSHANDLE *hNode );HRESULT GetCfgNodeByPartialName( [in]CSHANDLE hCurrentNode, [in,string]LPCWSTR szName, [out] CSHANDLE *hNode );HRESULT GetCfgNodeByTopicName( [in,string]LPCWSTR szTopicName, [out] CSHANDLE* bNode );HRESULT GetCfgNameIdByNode( [in] CSHANDLE hNode, [out,string] LPWSTR *ppName );<!-- SIPO <DP n="29"> --><dp n="d29"/> HRESULT GetCfgNodeAttributes( [in]DWORD dwNumCfgNodes, [in,size_is(dwNumCfgNodes)]const CSHANDLE*pCfgNodeArray, [out,size_is(,dwNumCfgNodes)]CTCFGNODEATTRIBUTES **ppCtCfgNodeAttributes );}
以下是對(duì)IioDbServer接口600的范圍內(nèi)提供的示例性操作的說(shuō)明。
Operations AddGroup Declaration HRESULT AddGroup( [in,string]LPCWSTRszName, [in]BOOL bActive, [in]DWORD dwRequestedUpdateRate, [in]PIHANDLE hplugInGroup, [unique,in]LONG * pTimeBias, [in]FLOAT* pPercentDeadband, [in]DWORD dwLCID, [out] CTHANDLE * phServerGroup, [out] DWORD* pRevisedUpdateRate, [in]IIoPiData*pIIoPiData, [in]REFIID riid, [out,riid_is(riid)]LPUNKNOWN* ppUnk )
參數(shù)
備注
通過(guò)此操作數(shù)據(jù)交換協(xié)議插件可請(qǐng)求DAS引擎90創(chuàng)建群組。此操作可要求DAS引擎90從DAS50的設(shè)備協(xié)議層96處的特定服務(wù)器代碼獲取詳細(xì)信息。
BrowseCfgNode Declaration HRESULT BrowseCfgNode( [in] CSHANDLE hCfgNode, [out] CSHANDLE * phParent, [in] BOOL bBranches,<!-- SIPO <DP n="31"> --><dp n="d31"/> [out] DWORD *pdwBranchCount, [out,size_is(,*pdwBranchCount)]CSHANDLE **pphBranches, [in] BOOL bLeafs, [out] DWORD *pdwLeafCount, [out,size_is(,*pdwLeafCount)]CSHANDLE **pphLeaves, [in] BOOLbTopics, [out] DWORD *pdwTopicCount, [out,size_is(,*pdwTopicCount)]CSHANDLE ** pphTopics )
參數(shù)
備注
通過(guò)此操作客戶應(yīng)用程序可以通過(guò)一個(gè)特定的數(shù)據(jù)交換協(xié)議插件請(qǐng)求DAS引擎90瀏覽指定節(jié)點(diǎn)并取出所有子對(duì)象子分支、葉和訪問(wèn)路徑/標(biāo)題。GetCfgNameIdByNodeDeclarationHRESULT GetCfgNameIdByNode(
[in] CSHANDLE hNode,
[out,string] LPWSTR *ppName
)參數(shù)
備注
通過(guò)GetCfgNameIdByNode操作插件可以取出節(jié)點(diǎn)的完全合格名稱標(biāo)識(shí)符(包括直到節(jié)點(diǎn)的分隔符的完整名稱路徑)
GetCfgNodeAttributes
Declaration
HRESULT GetCfgNodeAttributes(
[in]
DWORD dwNumCfgNodes,
[in,size_is(dwNumCfgNodes)] const CSHANDLE * PCfgNodeArray,
[out,size_is(,dwNumCfgNodes)]CTCFGNODEATTRIBUTES **
ppCtCfgNodeAttributes
)
參數(shù)
備注
通過(guò)此操作客戶應(yīng)用程序可以通過(guò)一個(gè)特定的數(shù)據(jù)交換協(xié)議插件請(qǐng)求DAS引擎90瀏覽指定節(jié)點(diǎn)并取出所有子對(duì)象子分支、葉和訪問(wèn)路徑/標(biāo)題。
GetCfgNodeByNameId
Declaration
HRESULT GetCfgNodeByNameId(
[in,string] LPCWSTR szName,
[out] CSHANDLE * hNode
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90提供一個(gè)相應(yīng)于一個(gè)由插件指定的完全合格的名稱標(biāo)識(shí)符(包括直到節(jié)點(diǎn)的分隔符的完整名稱路徑)的節(jié)點(diǎn)句柄。
GetCfgNodeByPartialName
Declaration
HRESUT GetCfgNodeByPartialName(
[in]CSHANDLEhCurrentNode,
[in,string]LPCWSTRszName,
[out] CSEANDLE * hNode
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90提供一個(gè)對(duì)應(yīng)于由當(dāng)前節(jié)點(diǎn)和開始于當(dāng)前節(jié)點(diǎn)的名稱片段所完全指定的名稱標(biāo)識(shí)符的節(jié)點(diǎn)句柄。
GetCfgNodeByropicName
Declaration
HRESULT GetCfgNodeByTopicName(
[in,string] LPCWSTR szTopicName,
[out] CSHANDLE * hNode
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90通過(guò)指定一個(gè)完全合格的標(biāo)題/OPC訪問(wèn)路徑的名稱標(biāo)識(shí)符來(lái)提供一個(gè)節(jié)點(diǎn)句柄。
GetErrorString
Declaration
HRESULT GetErrorString(
[in] HRESULT dwError,
[in] LCID dwLocale,
[out,string] LPWSTR * ppString
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90為指定的錯(cuò)誤代碼和位置提供錯(cuò)誤文本。
GetModuleName
Declaration
HRESULT GetModuleName(
[out,string]LPWSTR* ppModuleName
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90返回DAS 50的EXE模塊名稱,去掉任何文件擴(kuò)展名。
GetStatus
DeclarationHRESULT GetStatus(
[out] CTSERVERSTATUS ** ppServerStatus
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90提供一個(gè)指向DAS 50總體狀態(tài)的指針。
QueryAvailableLocaleIDs
Declaration
HRESULT QueryAvailableLocaleIDs(
[out]DWORD *pdwCoun,
[out,size_is(,*pdwCount)] LCID **pdwLcid
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90提供所支持的位置標(biāo)識(shí)符的列表。
QueryOrganization
Declaration
HRESULT QueryOrganization(
[out] CTNAMESPACETYPE * pNameSpaceType
)
參數(shù)
備注
通過(guò)此操作插件可以查詢服務(wù)器的配置組織。服務(wù)器的配置為平級(jí)的或分等級(jí)的。
RemoveGroup
Declaration
HRESULT RemoveGroup(
[in] CTHANDLE hServerGroup,
[in] BOOL bForce
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90刪除先前創(chuàng)建的群組。
ValidateItems
Declaration
HRESULT ValidateItems(
[in] DWORD dwNumItems,
[in,size_is(dwNumItems)]CTITEMDEF* pItemArray,
[out,size_is(,dwNumItems)] CTITEMRESULT** ppValidationResults,
[out,size_is(,dwNumItems)] HRESULT ** ppErrors
)
參數(shù)
備注
此操作與群組對(duì)象的IIotItemMgt接口606中的AddItems操作(在下文中說(shuō)明)相同。由于項(xiàng)目語(yǔ)法獨(dú)立于群組,此操作在項(xiàng)目定義上執(zhí)行相同的驗(yàn)證。通過(guò)此操作插件可以滿足無(wú)群組的客戶活動(dòng)(僅對(duì)于請(qǐng)求的調(diào)用)。
通過(guò)IiotDemand接口602插件可以在創(chuàng)建、添加和激活了群組和物理數(shù)據(jù)項(xiàng)后為指定數(shù)據(jù)項(xiàng)的數(shù)組向DAS引擎90提交帶外請(qǐng)求(在常規(guī)更新時(shí)段外)
Declaration[ object, uuid(AD50D6D5-B4A1-11D2-A9BF-00A0C9ED0BF0), helpstring(″IIotDemand Interface″), pointer_default(unique)]<!-- SIPO <DP n="39"> --><dp n="d39"/>interface IIotDemandIUnknown{ HRESULT ReadCache( [in] DWORDdwNumItems, [in,size_is(dwNumItems)] CTHANDLE * phCoreToolkit, [out,size_is(,dwNumItems)] CTITEMSTATE ** ppItemValues, [out,size_is(,dwNumItems)] HRESULT ** ppErrors ); HRESULT ReadDevice( [in] DWORD dwCount, [in,size_is(dwCount)] CTHANDLE * phCoreToolkit, [in] CTTRANSACTIONDEF TransactionDef, [unique,in]LONG * pTimeBias, [in]DWORD dwLCID, [out,size_is(,dwCount)]HRESULT ** ppErrors, [out]CTHANDLE* CancelID ); HRESULT WriteDevice( [in] DWORD dwCount, [in,size_is(dwCount) ] CTHANDLE * phCoreToolkit, [in,size_is(dwCount) ] VARIANT * pItemValues, [in] CTTRANSACTIONDEF TransactionDef, [unique,in]LONG * pTimeBias, [in]DWORDdwLCID, [out,size_is(,dwCount)] HRESULT ** ppErrors, [out] CTHANDLE* CancelID ); HRESULT Cancel( [in] CTHANDLE CancelID );}
說(shuō)明
在創(chuàng)建、添加和激活群組和項(xiàng)目后,通過(guò)此接口插件可以向DAS引擎90保存/監(jiān)控的指定項(xiàng)目數(shù)組提交帶外數(shù)據(jù)訪問(wèn)請(qǐng)求。在很多情況下,這些操作將花費(fèi)很長(zhǎng)時(shí)間,并將異步進(jìn)行。這些異步調(diào)用的完成將在IIoPiData接口的方法上報(bào)告。
以下是對(duì)于實(shí)現(xiàn)IiotDemand接口602的示例性操作的說(shuō)明。
Operations
Cancel
Declaration
HRESULT Cancel(
[in]CTHANDLECancelID
)
參數(shù)
備注
通過(guò)此操作插件可以取消任何DAS引擎90先前請(qǐng)求的待處理的異步交易(請(qǐng)求調(diào)用或刷新)。
ReadCsche
Declaration
HRESULT ReadCache(
[in] DWORDdwNumItems,
[in,size_is(dwNumItems)]CTHANDLE * phCoreToolkit,
[out,size_is(,dwNumItems)] CTITEMSTATE ** ppItemValues,
[out,size_is(,dwNumItems)] HRESULT ** ppErrors
)
參數(shù)
備注
此操作同步進(jìn)行,并調(diào)用DAS引擎90從包含dwNumItems項(xiàng)目的數(shù)組的高速緩沖存儲(chǔ)器返回當(dāng)前VTQ。
ReadDevice Declaration HRESULT ReadDevice( [in] DWORD dwCount, [in,size_is(dwCount)] CTHANDLE * phCoreToolkit, [in] CTTRANSACTIONDEF TransactionDef, [unique,in]LONG * pTimeBias, [in]DWORDdwLCID, [out,size_is(,dwCount)]HRESULT ** ppErrors, [out]CTHANDLE* CancelID )
參數(shù)
備注
此操作異步進(jìn)行。DAS引擎90在IIoPiData∷OnReadComplete()上通知完成。通過(guò)此操作插件可以請(qǐng)求DAS引擎90執(zhí)行項(xiàng)目列表的請(qǐng)求讀取。一旦任何總線活動(dòng)完成即開始此請(qǐng)求讀取,并且以高于任何掃描的數(shù)據(jù)的優(yōu)先權(quán)返回。
WriteDeviceDeclarationHRESULT WriteDevice( [in]DwORD dwCount, [in,size_is(dwCount)] CTHANDLE * phCoreToolkit, [in,size_is(dwCount)] VARIANT * pItemValues, [in] CTTRANSACTIONDEFTransactionDef, [unique,in]LONG * pTimeBias, [in]DWORD dwLCID, [out,size_is(,dwCount)] HRESULT ** ppErrors, [out] CTHANDLE* CancelID )
參數(shù)
備注
此操作異步進(jìn)行。DAS引擎90在IIoPiData∷OnReadComplete()上通知完成。通過(guò)此操作插件可以請(qǐng)求DAS引擎90執(zhí)行項(xiàng)目列表寫入。一旦任何總線活動(dòng)完成即開始此寫入,并且以高于任何掃描的數(shù)據(jù)的優(yōu)先權(quán)返回。
通過(guò)IiotGroupStateMgt接口604插件可操縱在DAS 50上創(chuàng)建的群組。
Declaration [ object, uuid(2030A921-0788-11d3-82C2-00A024A866AC), helpstring(″IIotGroupStateMgt Interface″), pointer_default(unique) ] interface IIotGroupStateMgtIUnknown { HRESULT GetState( [out] DWORD * pUpdateRate, [out] BOOL * pActive, [out,string] LPWSTR * ppName, [out] LONG * pTimeBias, [out] FLOAT * pPercentDeadband, [out] DWORD * pLCID, [out] PIHANDLE * phPlugInGroup, [out] CTHANDLE * phCoreToolkitGroup ); HRESULT SetState( [unique,in] DWORD * pRequestedUpdateRate, [out] DWORD * pRevisedUpdateRate, [unique,in] BOOL * pActive, [unique,in] LONG * pTimeBias, [unique,in] FLOAT * pPercentDeadband, [unique,in] DWORD * pLCID, [unique,in] PIHANDLE * phClientGroup ); HRESULT SetName ( [in,string] LPCWSTR szName ); HRESULT CloneGroup( [in,string] LPCWSTR szName, [in] IIoPiData*pIIoPiData, [out]CTHANDLE *phServerHandle, [in] REFIID riid, [out,iid_is(riid)] LPUNKNOWN * ppUnk );}
說(shuō)明
通過(guò)此接口插件可操縱在DAS 50上創(chuàng)建的群組。
以下是對(duì)于實(shí)現(xiàn)IiotGroupStateMgt接口604的示例性操作的說(shuō)明。
Operations
CloneGroup
Declaration
HRESULT CloneGroup(
[in,string] LPCWSTR szName,
[in] IIoPiData*pIIoPiData,
[out]CTHANDLE *phServerHandle,
[in] REFIID riid,
[out,iid_is(riid)] LPUNKNOWN *ppUnk
)
參數(shù)
備注
此操作創(chuàng)建現(xiàn)有群組的復(fù)本,與原群組具有相同特征。
GetState Declaration HRESULT GetState( [out] DWORD * pUpdateRate, [out] BOOL * pActive, [out,string] LPWSTR * ppName, [out] LONG * pTimeBias, [out] FLOAT * pPercentDeadband, [out] DWORD * pLCID, [out] PIHANDLE * phPlugInGroup, [out] CTHSANDLE * phCoreToolkitGroup )
參數(shù)
備注此操作獲取群組的當(dāng)前狀態(tài)。
SetName
Declaration
HRESULT SetName(
[in,string] LPCWSTR szName
)
參數(shù)
備注
此操作更改現(xiàn)有群組的名稱。名稱必須是唯一的。
SetState Declaration HRESULT SetState( [unique,in] DWORD * pRequestedUpdateRate, [out] DWORD * pRevisedUpdateRate, [unique,in] BOOL * pActive, [unique,in] LONG * pTimeBias, [unique,in] FLOAT * pPercentDeadband, [unique,in] DWORD * pLCID, [unique,in] PIHANDLE * phClientGroup )
參數(shù)
備注
通過(guò)此操作客戶可設(shè)置群組的多種屬性。使用指向“in”項(xiàng)目的指針以便客戶可通過(guò)傳遞NULL指針忽略客戶不希望更改的屬性。pRevisedUpdateRate變量必須包含有效指針。
通過(guò)一個(gè)IiotItemMgt接口606插件可以請(qǐng)求DAS引擎90在群組中添加、驗(yàn)證和刪除項(xiàng)目。IiotItemMgt接口606由一個(gè)群組對(duì)象在DAS引擎90中實(shí)現(xiàn)。
Declaration[ object, uuid(AD50D6D3-B4A1-11D2-A9BF-00A0C9ED0BF0), helpstring(″IIotItemMgt Interface″), pointer_default(unique)]interface IIotItemMgtIUnknown{ HRESULT AddItems( [in] DWORDdwNumItems, [in,size_is(dwNumItems)]CTITEMDEF * pItemArray, [out,size_is(,dwNumItems)] CTITEMRESULT ** ppAddResults, [out,size_is(,dwNumItems)] HRESULT ** ppErrors ); HRESULT ValidateItems( [in] DWORDdwNumItems, [in,ize_is(dwNumItems)] CTITEMDEF * pItemArray, [out,size_is(,dwNumItems)) CTITEMRESULT ** ppValidationResults, [out,size_is(,dwNumItems)] HRESULT ** ppErrors ); HRESULT RemoveItems ( [in] DWORDdwNumItems, [in,size_is(dwNumItems)]CTHANDLE * phCoreToolkit, [out,size_is(,dwNumItems)] HRESULT ** ppErrors ); HRESULT SetActiveState ( [in] DWORDdwNumItems, [in,size_is(dwNumItems)]CTHANDLE * phCoreToolkit, [in] BOOL bActive, [out,size_is(,dwNumItems)] HRESULT ** ppErrors );<!-- SIPO <DP n="49"> --><dp n="d49"/> HRESULT SetClientHandles( [in] DWORD dwNumItems, [in,size_is(dwNumItems)] CTHANDLE * phCoreToolkit, [in,size_is(dwNumItems)] PIHANDLE * phPlugIn, [out,size_is(,dwNumItems)] HRESULT ** ppErrors ); HRESULT SetDatatypes( [in] DWORD dwCount, [in,size_is(dwCount)] CTHANDLE * phCoreToolkit, [in,size_is(dwCount)] VARTYPE * pRsquestedDatatypes, [out,size_is(,dwCount)] HRESULT ** ppErrors ); HRESULT CreateEnumerator( [in] REFIID riid, [out,iid_is(riid)] LPUNKNOWN* ppUnk ); HRESULT GetItemCount( [out] DWORD* dwItemCount ); HRESULT Refresh( [in] CTDATASOURCE dwSource, [in] CTTRANSACTIONDEF TransactionDef, [out] DWORD *pdwCancelID );}
說(shuō)明
IiotItemMgt接口606由一個(gè)群組對(duì)象在DAS引擎90中實(shí)現(xiàn)。通過(guò)此操作可以在群組中添加、驗(yàn)證和刪除項(xiàng)目。以下是實(shí)現(xiàn)IiotItemMgt接口606的示例性操作的說(shuō)明。
Openations
AddItems
Declaration
HRESULT AddItems(
[in] DWORD dwNumItems,
[in,size_is(dwNumItems)]CTITEMDEF * pItemArray,
[out,size_is(,dwNumItems)] CTITEMRESULT ** ppAddResults,
[out,size_is(,dwNumItems)] HRESULT** ppErrors
)
參數(shù)
備注
此操作提供與OPC相同的列表接口功能。通過(guò)此操作插件可以請(qǐng)求DAS引擎90創(chuàng)建項(xiàng)目列表(或提供其地址,如果存在)并返回整個(gè)列表的結(jié)果代碼。
CreateEnumerator
Declaration
HRESULT CreataEnumeratot(
[in]REFIID riid,
[out,iid_is(riid)] LPUNKNOWN* ppUnk
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90在DAS引擎90群組中創(chuàng)建項(xiàng)目的枚舉器。
GetItemCount
Declaration
HRESULT GetItemCount(
[out]DWORD* dwItemCount
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90提供群組中的項(xiàng)目的總數(shù),不論其狀態(tài)如何。
Rafresh
Declaration
HRESULT Refresh(
[in] CTDATASOURCE dwSource,
[in] CTTRANSACTIONDEFTransactionDef,
[out] DWORD *pdwCancelID
)
參數(shù)
備注
通過(guò)操作插件可以請(qǐng)求DAS引擎90強(qiáng)制更新群組中的活動(dòng)項(xiàng)目。
RemoveItems
Declaration
HRESULT RemoveItems(
[in] DWORD dwNumItems,
[in,size_is(dwNumItems)]CTHANDLE* phCoreToolkit,
[out,size_is(,dwNumItems)] HRESULT** ppErrors
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90刪除先前添加到群組的項(xiàng)目列表。
SetActiveState
Declaration
HRESULT SetActiveState(
[in] DWORD dwNumItems,
[in,size_is(dwNumItems)]CTHANDLE * phCoreToolkit,
[in] BOOLbActive,
[out,size_is(,dwNumItems)] HRESULT ** ppErrors
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90激活和取消激活先前添加到群組項(xiàng)目列表。被激活的項(xiàng)目可以使用IIoPiData∷OnReadComplete()更新其VTQ。SetClientHandlesDeclarationHRESULT SetClientHandles(
[in]DWORD dwNumItems,
[in,size_is(dwNumItems)] CTHANDLE * phCoreToolkit,
[in,size_is(dwNumItems)] PIHANDLE * phPlugIn,
[out,size_is(,dwNumItems)] HRESULT ** ppErrors
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90為現(xiàn)有項(xiàng)目設(shè)置新的客戶句柄。
SetDatatypes
Declaration
HRESULT SetDatatypes(
[in]DWORD dwCount,
[in,size_is(dwCouut)] CTHANDLE * phCoreToolkit,
[in,size_is(dwCount)] VARTYPE * pRequestedDatatypes,
[out,size_is(,dwCount)] HRESULT ** ppErrors
)
參數(shù)
備注
通過(guò)此操作插件可以請(qǐng)求DAS引擎90為現(xiàn)有項(xiàng)目設(shè)置新的數(shù)據(jù)類型。
ValidateItems
Declaration
HRESULT ValidateItems(
[in] DWORD dwNumItems,
[in,size_is(dwNumItems)]CTITEMDEF * pItemArray,
[out,size_is(,dwNumItems)] CTITEMRESULT ** ppValidationResults,
[out,size_is(,dwNumItems)] HRESULT ** ppErrors
)
參數(shù)
備注
此操作與先前說(shuō)明的AddItems相同。但是,實(shí)際上DAS引擎90沒(méi)有創(chuàng)建項(xiàng)目。通過(guò)此操作插件可以確定項(xiàng)目名稱是否有效,以及當(dāng)項(xiàng)目名稱有效時(shí)確定其類型和狀態(tài)。
本發(fā)明的說(shuō)明性實(shí)施方式及其某些變體已在附圖和伴隨的書面說(shuō)明中提供。本發(fā)明不限于這些實(shí)施方式。本發(fā)明將在考慮到下文的權(quán)利要求書定義的此次發(fā)布和本發(fā)明所允許的最大范圍內(nèi)覆蓋所發(fā)布的實(shí)施方式以及其他進(jìn)入本發(fā)明的范圍和精神的實(shí)施方式。
權(quán)利要求
1.一個(gè)過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,它能夠使?jié)撛诘亟Y(jié)合了多個(gè)不同的數(shù)據(jù)交換協(xié)議的客戶應(yīng)用程序訪問(wèn)潛在地存儲(chǔ)在一個(gè)過(guò)程控制系統(tǒng)中的多個(gè)不同地址的過(guò)程數(shù)據(jù),該過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器包括
一個(gè)有助于訪問(wèn)過(guò)程控制系統(tǒng)中的過(guò)程數(shù)據(jù)存儲(chǔ)地址的設(shè)備協(xié)議接口;
一組客戶數(shù)據(jù)交換協(xié)議模塊集,它使得客戶應(yīng)用程序可以根據(jù)客戶數(shù)據(jù)交換協(xié)議模塊集所支持的特定客戶數(shù)據(jù)交換協(xié)議通過(guò)過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器請(qǐng)求訪問(wèn)過(guò)程數(shù)據(jù)存儲(chǔ)地址;以及
一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器引擎,用于執(zhí)行由過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器通過(guò)所述一組客戶數(shù)據(jù)交換協(xié)議模塊集接收到的過(guò)程數(shù)據(jù)訪問(wèn)請(qǐng)求,其是通過(guò)設(shè)備協(xié)議接口訪問(wèn)對(duì)應(yīng)于過(guò)程數(shù)據(jù)訪問(wèn)請(qǐng)求的數(shù)據(jù)存儲(chǔ)地址,其中數(shù)據(jù)訪問(wèn)服務(wù)器引擎包括一個(gè)客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議提取層,該提取層包括一組操作集,客戶數(shù)據(jù)交換協(xié)議模塊集中的模塊可以響應(yīng)客戶數(shù)據(jù)交換協(xié)議模塊集接收到的過(guò)程數(shù)據(jù)訪問(wèn)請(qǐng)求而調(diào)用所述操作集。
2.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中客戶數(shù)據(jù)交換協(xié)議模塊集包括插件。
3.權(quán)利要求2的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中客戶數(shù)據(jù)交換協(xié)議插件集中至少一個(gè)插件包括一個(gè)動(dòng)態(tài)插件。
4.權(quán)利要求2的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中客戶數(shù)據(jù)交換協(xié)議插件集中至少有一個(gè)插件包括一個(gè)靜態(tài)插件。
5.權(quán)利要求2的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中協(xié)議轉(zhuǎn)換模塊集既包括靜態(tài)插件又包括動(dòng)態(tài)插件。
6.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中客戶數(shù)據(jù)交換協(xié)議模塊集中的多個(gè)模塊根據(jù)特定客戶數(shù)據(jù)交換協(xié)議處理來(lái)自客戶應(yīng)用程序的數(shù)據(jù)訪問(wèn)請(qǐng)求。
7.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器進(jìn)一步包括
一個(gè)加載機(jī)制,用于確定客戶數(shù)據(jù)交換協(xié)議模塊集中至少一個(gè)模塊存在于一個(gè)用于實(shí)現(xiàn)過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器的計(jì)算機(jī)上,以及用于在啟動(dòng)過(guò)程中加載所述至少一個(gè)客戶數(shù)據(jù)交換協(xié)議模塊,以將至少一個(gè)客戶數(shù)據(jù)交換模塊與數(shù)據(jù)訪問(wèn)服務(wù)器引擎相結(jié)合。
8.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中數(shù)據(jù)訪問(wèn)服務(wù)器引擎的操作集包括至少一個(gè)這樣的操作,該操作可由客戶數(shù)據(jù)交換協(xié)議模塊集中至少兩個(gè)結(jié)合了不同的數(shù)據(jù)交換協(xié)議的不同模塊調(diào)用。
9.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中一個(gè)可操作數(shù)據(jù)訪問(wèn)服務(wù)器包括設(shè)備協(xié)議接口、客戶數(shù)據(jù)交換協(xié)議模塊集,該數(shù)據(jù)訪問(wèn)服務(wù)器由一個(gè)啟動(dòng)過(guò)程創(chuàng)建,該啟動(dòng)過(guò)程從先前安裝的程序文件建立所述可操作數(shù)據(jù)訪問(wèn)服務(wù)器,并且其中客戶數(shù)據(jù)交換協(xié)議模塊集和數(shù)據(jù)訪問(wèn)服務(wù)器的程序文件可相互獨(dú)立地被指定。
10.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中可由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的接口操作集包括一個(gè)異步數(shù)據(jù)讀取操作,用于響應(yīng)一個(gè)客戶應(yīng)用程序數(shù)據(jù)請(qǐng)求從一個(gè)標(biāo)識(shí)的數(shù)據(jù)源提供數(shù)據(jù)。
11.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中可由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的接口操作集包括一個(gè)同步數(shù)據(jù)讀取操作,它根據(jù)一個(gè)定時(shí)器生存期到期事件,通過(guò)設(shè)備協(xié)議接口來(lái)更新標(biāo)識(shí)的過(guò)程數(shù)據(jù)值。
12.權(quán)利要求11的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中對(duì)于一個(gè)被確定為不改變其當(dāng)前存儲(chǔ)值的數(shù)據(jù)項(xiàng),同步讀取操作丟棄該數(shù)據(jù)項(xiàng)的更新過(guò)程數(shù)據(jù)值,從而避免在過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器和發(fā)出請(qǐng)求的客戶應(yīng)用程序之間傳輸不改變的數(shù)據(jù)值。
13.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中可由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的接口操作集包括一組創(chuàng)建操作,該組操作創(chuàng)建一個(gè)包含第一數(shù)據(jù)項(xiàng)集的第一邏輯群組。
14.權(quán)利要求13的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中一個(gè)包括第二數(shù)據(jù)項(xiàng)集的第二邏輯群組可作為一個(gè)項(xiàng)目包含在包含第一數(shù)據(jù)項(xiàng)集的第一邏輯群組中。
15.權(quán)利要求13的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中可由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的接口操作集包括一組刪除操作,該組操作從過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器刪除一個(gè)指定群組。
16.權(quán)利要求13的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中可由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的接口操作集包括用于修改第一邏輯群組的內(nèi)容的操作。
17.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中可由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的接口操作集包括一個(gè)對(duì)一個(gè)可由過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器訪問(wèn)的指定數(shù)據(jù)項(xiàng)的寫操作。
18.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中所述接口操作集包括一個(gè)數(shù)據(jù)引用結(jié)構(gòu)搜索操作,該操作返回一個(gè)數(shù)據(jù)項(xiàng)引用,該數(shù)據(jù)項(xiàng)引用對(duì)應(yīng)于一個(gè)可由客戶應(yīng)用程序通過(guò)過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器訪問(wèn)的數(shù)據(jù)項(xiàng)值。
19.權(quán)利要求18的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其數(shù)據(jù)項(xiàng)引用為一個(gè)句柄。
20.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中接口操作集包括一個(gè)錯(cuò)誤代碼生成器,它向一個(gè)發(fā)出請(qǐng)求的客戶數(shù)據(jù)交換協(xié)議模塊提供錯(cuò)誤代碼。
21.權(quán)利要求1的過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器,其中接口操作集包括一個(gè)狀態(tài)報(bào)告器操作,它提供對(duì)存儲(chǔ)所述過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器的狀態(tài)值的數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)。
22.一個(gè)用于在一個(gè)分布式過(guò)程控制環(huán)境中,根據(jù)一個(gè)由安裝在數(shù)據(jù)訪問(wèn)服務(wù)器上的一組客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊集中的一個(gè)模塊所支持的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議,通過(guò)一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器提供對(duì)過(guò)程數(shù)據(jù)的訪問(wèn)的方法,其中所述客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊集根據(jù)一個(gè)模塊-引擎接口定義調(diào)用一組可由數(shù)據(jù)訪問(wèn)服務(wù)器的一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的數(shù)據(jù)訪問(wèn)操作集,該方法包括下列步驟
由數(shù)據(jù)訪問(wèn)服務(wù)器的一個(gè)第一客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊根據(jù)一個(gè)第一數(shù)據(jù)交換協(xié)議接收一個(gè)第一客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)請(qǐng)求;
由第一客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊為數(shù)據(jù)訪問(wèn)服務(wù)器引擎第一地生成遵循模塊-引擎接口定義的第一數(shù)據(jù)訪問(wèn)操作調(diào)用,其中該第一數(shù)據(jù)訪問(wèn)操作調(diào)用對(duì)應(yīng)于第一客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)請(qǐng)求;以及
由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行該第一數(shù)據(jù)訪問(wèn)操作調(diào)用。
23.權(quán)利要求22的方法進(jìn)一步包括下列步驟
由數(shù)據(jù)訪問(wèn)服務(wù)器引擎第二地生成一個(gè)相應(yīng)于第一數(shù)據(jù)訪問(wèn)操作調(diào)用的響應(yīng);以及
由第一數(shù)據(jù)交換協(xié)議模塊第三地生成一個(gè)對(duì)第一客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)請(qǐng)求的響應(yīng),其中所述對(duì)第一客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)請(qǐng)求的響應(yīng)對(duì)應(yīng)于在第二生成步驟中由數(shù)據(jù)訪問(wèn)服務(wù)器引擎生成的對(duì)第一數(shù)據(jù)訪問(wèn)操作調(diào)用的響應(yīng)。
24.權(quán)利要求22的方法進(jìn)一步包括下列步驟
由數(shù)據(jù)訪問(wèn)服務(wù)器的一個(gè)第二客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊根據(jù)一個(gè)第二數(shù)據(jù)交換協(xié)議第二地接收一個(gè)第二客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)請(qǐng)求;以及
由該第二客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊為所述數(shù)據(jù)訪問(wèn)服務(wù)器引擎第二地生成遵循模塊-引擎接口定義的一個(gè)第二數(shù)據(jù)訪問(wèn)操作調(diào)用,其中該第二數(shù)據(jù)訪問(wèn)操作調(diào)用對(duì)應(yīng)于第二客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)請(qǐng)求。
25.權(quán)利要求24的方法,其中第一數(shù)據(jù)訪問(wèn)操作調(diào)用與第二數(shù)據(jù)訪問(wèn)操作調(diào)用相同。
26.權(quán)利要求22的方法進(jìn)一步包括下列步驟
由第一客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊接收一個(gè)創(chuàng)建一個(gè)邏輯群組的請(qǐng)求,其中該邏輯群組包含一組代表在過(guò)程控制環(huán)境中被訪問(wèn)的數(shù)據(jù)的數(shù)據(jù)項(xiàng)集,還接收一個(gè)添加一個(gè)數(shù)據(jù)項(xiàng)到邏輯群組的請(qǐng)求。
27.權(quán)利要求26的方法,其中第一客戶應(yīng)用程序數(shù)據(jù)訪問(wèn)請(qǐng)求包括一個(gè)預(yù)訂查詢,該預(yù)訂查詢請(qǐng)求數(shù)據(jù)訪問(wèn)服務(wù)器響應(yīng)檢測(cè)到的邏輯群組中的數(shù)據(jù)項(xiàng)的數(shù)據(jù)值的相關(guān)變化而發(fā)布一個(gè)通知。
28.權(quán)利要求27的方法,其中所述執(zhí)行步驟包括將一個(gè)設(shè)備數(shù)據(jù)的請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)設(shè)備協(xié)議接口,其中設(shè)備協(xié)議接口根據(jù)一個(gè)特定的域設(shè)備請(qǐng)求協(xié)議將相應(yīng)的數(shù)據(jù)請(qǐng)求發(fā)送到一個(gè)域設(shè)備。
29.權(quán)利要求28的方法進(jìn)一步包括下列步驟
由設(shè)備協(xié)議接口接收來(lái)自域設(shè)備的響應(yīng),該響應(yīng)包含對(duì)應(yīng)于數(shù)據(jù)項(xiàng)的數(shù)據(jù);
由設(shè)備協(xié)議接口將包含該數(shù)據(jù)項(xiàng)的一個(gè)數(shù)據(jù)值的響應(yīng)消息轉(zhuǎn)發(fā)到數(shù)據(jù)訪問(wèn)服務(wù)器引擎。
30.權(quán)利要求22的方法,其中客戶數(shù)據(jù)交換協(xié)議模塊集包括插件。
31.權(quán)利要求22的方法,其中客戶數(shù)據(jù)交換協(xié)議模塊集中的模塊根據(jù)特定的客戶數(shù)據(jù)交換協(xié)議處理來(lái)自客戶應(yīng)用程序的數(shù)據(jù)訪問(wèn)請(qǐng)求。
32.權(quán)利要求22的方法,其中執(zhí)行步驟包括執(zhí)行一個(gè)異步數(shù)據(jù)讀取操作,以響應(yīng)一個(gè)客戶應(yīng)用程序數(shù)據(jù)請(qǐng)求提供來(lái)自一個(gè)被標(biāo)識(shí)的數(shù)據(jù)源的數(shù)據(jù)。
33.權(quán)利要求22的方法,其中執(zhí)行步驟包括執(zhí)行一個(gè)同步讀取操作,它根據(jù)一個(gè)定時(shí)器生存期到期事件通過(guò)設(shè)備協(xié)議接口來(lái)更新被標(biāo)識(shí)的過(guò)程數(shù)據(jù)值。
34.權(quán)利要求33的方法,其中對(duì)于一個(gè)被確定為不改變其當(dāng)前存儲(chǔ)值的數(shù)據(jù)項(xiàng),同步讀取操作丟棄一個(gè)被更新的過(guò)程數(shù)據(jù)值,從而避免在過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器和發(fā)出請(qǐng)求的客戶應(yīng)用程序之間傳輸未改變的數(shù)據(jù)值。
35.權(quán)利要求22的方法,其中第一數(shù)據(jù)訪問(wèn)操作調(diào)用包括一組創(chuàng)建操作,該組創(chuàng)建操作創(chuàng)建一個(gè)包含第一數(shù)據(jù)項(xiàng)集的第一群組。
36.權(quán)利要求35的方法,進(jìn)一步包括由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行一個(gè)第二數(shù)據(jù)訪問(wèn)操作調(diào)用,該調(diào)用將一個(gè)包含第二數(shù)據(jù)項(xiàng)集的第二邏輯群組作為一個(gè)項(xiàng)目添加到第一群組中。
37.權(quán)利要求35的方法,進(jìn)一步包括由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行一個(gè)第二數(shù)據(jù)訪問(wèn)操作調(diào)用,該調(diào)用從數(shù)據(jù)訪問(wèn)服務(wù)器刪除一個(gè)指定群組。
38.權(quán)利要求35的方法,進(jìn)一步包括由數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行一個(gè)第二數(shù)據(jù)訪問(wèn)操作調(diào)用,該調(diào)用修改第一邏輯群組的內(nèi)容。
39.權(quán)利要求22的方法,其第一數(shù)據(jù)訪問(wèn)操作調(diào)用包括一個(gè)對(duì)可由數(shù)據(jù)訪問(wèn)服務(wù)器訪問(wèn)的一個(gè)指定數(shù)據(jù)項(xiàng)的寫操作。
40.權(quán)利要求22的方法,其中第一數(shù)據(jù)訪問(wèn)操作調(diào)用包括一個(gè)數(shù)據(jù)引用結(jié)構(gòu)搜索操作,該操作返回一個(gè)數(shù)據(jù)項(xiàng)引用,該數(shù)據(jù)項(xiàng)引用對(duì)應(yīng)于一個(gè)可由客戶應(yīng)用程序通過(guò)過(guò)程數(shù)據(jù)訪問(wèn)服務(wù)器訪問(wèn)的數(shù)據(jù)項(xiàng)值。
41.權(quán)利要求40的方法,其中數(shù)據(jù)項(xiàng)引用是一個(gè)句柄。
42.權(quán)利要求22的方法,其中第一數(shù)據(jù)訪問(wèn)操作調(diào)用包括一個(gè)錯(cuò)誤代碼生成器操作,該操作向發(fā)出請(qǐng)求的客戶數(shù)據(jù)交換協(xié)議模塊提供錯(cuò)誤代碼文本。
43.權(quán)利要求22的方法,其中第一數(shù)據(jù)訪問(wèn)操作調(diào)用包括一個(gè)狀態(tài)報(bào)告器操作,該操作提供對(duì)一個(gè)存儲(chǔ)了數(shù)據(jù)訪問(wèn)服務(wù)器的狀態(tài)值的數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)。
44.一個(gè)用于通過(guò)一個(gè)啟動(dòng)過(guò)程激活一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器的方法,該啟動(dòng)過(guò)程從先前安裝的程序文件建立該數(shù)據(jù)訪問(wèn)服務(wù)器,其中程序文件包括至少一個(gè)結(jié)合了一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器引擎的可執(zhí)行文件以及一個(gè)包含一組安裝在數(shù)據(jù)訪問(wèn)服務(wù)器上的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊集中的一個(gè)或多個(gè)模塊的單獨(dú)且不同的文件,其中客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊集根據(jù)一個(gè)模塊-引擎接口定義來(lái)調(diào)用一組可由數(shù)據(jù)訪問(wèn)服務(wù)器的數(shù)據(jù)訪問(wèn)服務(wù)器引擎執(zhí)行的數(shù)據(jù)訪問(wèn)操作集,該方法包括下列步驟
啟動(dòng)一個(gè)對(duì)應(yīng)于數(shù)據(jù)訪問(wèn)服務(wù)器并包含數(shù)據(jù)訪問(wèn)服務(wù)器引擎的可執(zhí)行文件;
加載客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議模塊集,從而至少在一個(gè)協(xié)議模塊和數(shù)據(jù)訪問(wèn)服務(wù)器可執(zhí)行文件之間創(chuàng)建程序鏈接;以及
初始化一個(gè)對(duì)應(yīng)于數(shù)據(jù)訪問(wèn)服務(wù)器和一個(gè)發(fā)出請(qǐng)求的客戶應(yīng)用程序之間的連接的數(shù)據(jù)訪問(wèn)服務(wù)器對(duì)象。
45.權(quán)利要求44的方法,其中所述客戶數(shù)據(jù)交換協(xié)議模塊集包括插件。
46.權(quán)利要求45的方法,其中所述客戶數(shù)據(jù)交換協(xié)議插件集中至少一個(gè)插件包括一個(gè)動(dòng)態(tài)插件。
47.權(quán)利要求45的方法,其中所述客戶數(shù)據(jù)交換協(xié)議插件集中至少一個(gè)插件包括一個(gè)靜態(tài)插件。
48.權(quán)利要求45的方法,其中所述協(xié)議轉(zhuǎn)換模塊集既包括靜態(tài)插件也包括動(dòng)態(tài)插件。
49.權(quán)利要求44的方法,其中客戶數(shù)據(jù)交換協(xié)議模塊集中的模塊根據(jù)特定的客戶數(shù)據(jù)交換協(xié)議處理來(lái)自客戶應(yīng)用程序的數(shù)據(jù)訪問(wèn)請(qǐng)求。
50.權(quán)利要求44的方法,其中數(shù)據(jù)訪問(wèn)服務(wù)器引擎的操作集包括至少一個(gè)這樣的數(shù)據(jù)訪問(wèn)操作,該數(shù)據(jù)訪問(wèn)操作可由客戶數(shù)據(jù)交換協(xié)議模塊集中的至少兩個(gè)結(jié)合了不同數(shù)據(jù)交換協(xié)議的不同模塊調(diào)用。
全文摘要
發(fā)布了一個(gè)方法和過(guò)程控制數(shù)據(jù)服務(wù)器系統(tǒng)結(jié)構(gòu),用于通過(guò)多個(gè)不同的數(shù)據(jù)共享標(biāo)準(zhǔn)向多個(gè)客戶應(yīng)用程序(60、62、64)提供過(guò)程數(shù)據(jù)。系統(tǒng)結(jié)構(gòu)結(jié)合了一個(gè)準(zhǔn)備好的平臺(tái),用于以后添加進(jìn)來(lái)的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議(70、72、74)。在示例性實(shí)施方式中,特定客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議插件和一個(gè)數(shù)據(jù)訪問(wèn)服務(wù)器引擎(50)之間的標(biāo)準(zhǔn)接口定義集支持通過(guò)根據(jù)標(biāo)準(zhǔn)接口定義設(shè)計(jì)為與數(shù)據(jù)訪問(wèn)服務(wù)器引擎接口的插件(84、86、88)結(jié)合新的客戶應(yīng)用程序數(shù)據(jù)交換協(xié)議。
文檔編號(hào)H04L12/24GK1474976SQ0181886
公開日2004年2月11日 申請(qǐng)日期2001年9月14日 優(yōu)先權(quán)日2000年9月15日
發(fā)明者伊萬(wàn)·A·特德洛夫, 路易斯·D·羅斯, 邁克爾·哈德利克, 雷納·海斯莫, D 羅斯, 哈德利克, 伊萬(wàn) A 特德洛夫, 海斯莫 申請(qǐng)人:旺德維爾公司