原理 DDE是一種動(dòng)態(tài)數(shù)據(jù)交換機(jī)制(Dynamic Data Exchange,DDE。動(dòng)態(tài)數(shù)據(jù)交換是微軟公司提出的一種數(shù)據(jù)通訊形式,它使用共享的內(nèi)存在應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換。DDE不同于剪切板方法,它能夠及時(shí)更新數(shù)據(jù),在兩個(gè)應(yīng)用程序之間自動(dòng)更新信息,無須用戶參與。 使用DDE通訊需要連個(gè)Windows應(yīng)用程序,其中一個(gè)作為服務(wù)器處理信息,另外一個(gè)作為客戶機(jī)從服務(wù)器獲得信息。客戶機(jī)應(yīng)用程序向當(dāng)前所激活的服務(wù)器應(yīng)用程序發(fā)送一條消息請求信息,服務(wù)器應(yīng)用程序根據(jù)該信息作出應(yīng)答,從而實(shí)現(xiàn)兩個(gè)程序之間的數(shù)據(jù)交換。 通信要素 兩個(gè)程序間建立DDE通訊稱作DDE會(huì)話,一個(gè)會(huì)話由服務(wù)名與話題來標(biāo)識。DDE會(huì)話中包括很多數(shù)據(jù)項(xiàng),每個(gè)數(shù)據(jù)項(xiàng)對應(yīng)一個(gè)DDE項(xiàng)目名。如果通過網(wǎng)絡(luò)與遠(yuǎn)程機(jī)器的DDE通信,還要提供遠(yuǎn)程節(jié)點(diǎn)的名稱。機(jī)器名、服務(wù)名、話題和項(xiàng)目名構(gòu)成DDE 通信的四要素。 機(jī)器名:遠(yuǎn)程機(jī)器名稱,若為本機(jī)可以忽略。 應(yīng)用名: DDE 服務(wù)器的名字,軟件程序通常使用自己的名字作為應(yīng)用名。紫金橋?支持 的應(yīng)用名為DB。 話題名:DDE 服務(wù)器上數(shù)據(jù)組的名字。可能是數(shù)據(jù)的文件名或工作表名。紫金橋?支持 的話題名也為DB。 項(xiàng)目名:單個(gè)數(shù)據(jù)項(xiàng)。紫金橋?數(shù)據(jù)庫中的點(diǎn)名加參數(shù)名為數(shù)據(jù)項(xiàng)名稱。如:TI101.PV。 您可以通過一個(gè)形象的比喻來理解這四要素:把機(jī)器名想成某個(gè)人居住的“國家”,把應(yīng)用程序想成“城市”,話題名當(dāng)作“街道”,項(xiàng)目名當(dāng)作“門牌號”。假如您要訪問一個(gè)朋友,當(dāng)您知道了他住在哪個(gè)國家后,哪個(gè)城市、街道和門牌號就能找到這個(gè)朋友了。 紫金橋?監(jiān)控組態(tài)軟件提供了DDE 客戶和DDE 服務(wù)器支持。DDE 服務(wù)器可以使紫金橋?軟件的過程信息傳送到其它應(yīng)用程序進(jìn)行分析,例如微軟的Excel軟件。DDE 客戶支持可以使來自其它應(yīng)用程序的信息傳送到紫金橋?的數(shù)據(jù)庫中。 Net DDE配置 要想使DDE客戶端程序通過網(wǎng)絡(luò)訪問遠(yuǎn)程DDE服務(wù)器,客戶端計(jì)算機(jī)及服務(wù)器端計(jì)算機(jī)必須支持Net DDE(Windows NT/2000/XP/2003缺省支持,Windows 95/98不支持)。下面介紹一下NetDDE的服務(wù)器和客戶端的相關(guān)配置操作。 服務(wù)器端配置 DDE服務(wù)器端需要以下四部分設(shè)置: 1. 建立用戶以供客戶端使用。 2. 啟用Network DDE和Network DDE DSDM 3. 配置DDE共享 4. 端口設(shè)置 下面詳細(xì)介紹一下各步驟的具體設(shè)置。 1. 建立用戶 客戶端通過Network DDE訪問服務(wù)器時(shí),需要以當(dāng)前用戶的身份登陸到服務(wù)器(系統(tǒng)自動(dòng)完成登陸過程),所以在服務(wù)器端需要提供客戶登陸訪問時(shí)使用的用戶。 打開“控制面板”,選擇“管理工具”中的“計(jì)算機(jī)管理”,在導(dǎo)航樹中選擇“系統(tǒng)工具”下的“本地用戶和組”,展開后在其中的“用戶”上點(diǎn)擊鼠標(biāo)右鍵選擇“新建用戶”,如下圖: 
建立新的用戶,注意口令不能為空。 
2. 啟用Network DDE和Network DDE DSDM 利用DDE遠(yuǎn)程訪問數(shù)據(jù)需要用到Windows自帶的Network DDE和Network DDE DSDM。在服務(wù)器中需要將Network DDE和Network DDE DSDM設(shè)置為自動(dòng)啟動(dòng)。具體設(shè)置如下: 打開“控制面板”—“管理工具”下的“服務(wù)”一項(xiàng),或者直接在運(yùn)行中輸入“services.msc /s”打開“服務(wù)”設(shè)置。找到Network DDE DSDM,雙擊打開屬性對話框,在“常規(guī)”選項(xiàng)中將啟動(dòng)類型改為“自動(dòng)”,并啟動(dòng)該服務(wù),如下圖,Network DDE也要進(jìn)行同樣的修改。 

3. 配置DDE共享 只有在服務(wù)器中需要建立DDE共享,客戶端才能夠通過DDE遠(yuǎn)程訪問到服務(wù)器中的數(shù)據(jù)。在運(yùn)行中輸入“DDEshare”打開“DDE共享”設(shè)置對話框。如下圖: 
配置DDE共享需要三步:選擇計(jì)算機(jī),DDE共享,設(shè)置信任共享。 (1) 選擇計(jì)算機(jī) 選擇服務(wù)器的名稱,設(shè)置共享的計(jì)算機(jī)。打開“共享”菜單下的“選擇計(jì)算機(jī)”,彈出“選擇計(jì)算機(jī)”對話框,如下圖: 
服務(wù)器端所要選擇的計(jì)算機(jī)為本機(jī),選擇本機(jī)名稱即可。 (2) DDE共享 打開“共享”菜單下的“DDE共享”,彈出“DDE共享”對話框,如下圖: 
點(diǎn)擊“添加共享”,彈出“DDE共享屬性”對話框。如下圖: 
以采集紫金橋監(jiān)控組態(tài)軟件的數(shù)據(jù)為例,共享名自行設(shè)置,應(yīng)用程序和話題名均為DB。 以上操作完成之后,點(diǎn)擊右下方的“權(quán)限”按鈕,打開“DDE共享名的權(quán)限”對話框。如下圖: 
這里有兩種選擇,1.直接選擇everyone,訪問類型為完全控制。2.點(diǎn)擊“添加”,添加新建立的用戶,訪問類型同樣為完全控制,如下圖 
選擇“顯示用戶”,找到新建的ddeuser,點(diǎn)擊添加完成添加過程。如果出現(xiàn)“文件名過長”的錯(cuò)誤提示,可以在通過以下步驟修改計(jì)算機(jī)名稱 (1)選擇桌面“我的電腦”圖標(biāo),點(diǎn)右鍵,選擇“屬性”,如下圖
 (2)選擇計(jì)算機(jī)名,點(diǎn)擊“更改”,如下圖 
- 填入新的計(jì)算機(jī)名稱,注意名稱不宜過長,如下圖

- 重啟系統(tǒng)后再進(jìn)入DDE共享設(shè)置,重新添加用戶即可。
注意:兩種方式的訪問類型可以根據(jù)實(shí)際情況設(shè)置,一般為完全控制。 點(diǎn)擊“確定”完成“DDE共享屬性”設(shè)置。 (3) 設(shè)置信任共享 在“DDE共享”對話框中選中新添加的DDE共享,點(diǎn)擊“信任共享”按鈕,將其添加到受信任的共享中。如下圖: 
在彈出的“受信任的共享屬性”對話框中,進(jìn)行如下設(shè)置,如圖: 
注意:必須選中允許啟動(dòng)應(yīng)用程序、允許初始化應(yīng)用程序和替代Cmd顯示項(xiàng),并且替代Cmd顯示,使用“0”值。 可以通過“共享”菜單下的“受信任的共享”,看到當(dāng)前受信任的共享。 4. 端口設(shè)置 客戶端通過DDE遠(yuǎn)程訪問服務(wù)器時(shí),服務(wù)器中的端口要進(jìn)行相應(yīng)的設(shè)置。 (1) 網(wǎng)卡端口 為了使客戶端能通過DDE遠(yuǎn)程訪問到服務(wù)器,服務(wù)器中的網(wǎng)卡端口需要全部打開。不允許有封閉的端口。 打開本地連接的屬性對話框,如下圖: 
選擇Internet協(xié)議(TCP/IP),點(diǎn)擊屬性,打開“Internet協(xié)議(TCP/IP) 屬性”對話框,如下圖: 
點(diǎn)擊“高級”按鈕,打開“高級TCP/IP設(shè)置”對話框,如下圖: 
選擇“選項(xiàng)”,點(diǎn)擊“屬性”按鈕,打開“TCP/IP 篩選”對話框,如下圖: 
選擇“全部允許”,點(diǎn)擊確定,即可打開所有端口,注意:完成設(shè)置要重啟計(jì)算機(jī)。 (2) 防火墻端口 這里僅介紹Windows防火墻端口的設(shè)置,其它防火墻請參考使用說明作相應(yīng)的設(shè)置。 在Windows 2003 SP1/XP SP2系統(tǒng)中自帶一個(gè)安全防火墻,如果它處于啟動(dòng)狀態(tài),要對其做相應(yīng)配置。 1. 打開Windows防火墻配置對話框 進(jìn)入“控制面板”,選擇“安全中心”,打開“Windows 安全中心”配置窗口。 
在窗口的右下角選擇“Windows 防火墻”,則可打開Windows防火墻配置對話框。Windows防火墻配置對話框包括“常規(guī)”、“例外”和“高級”三個(gè)選項(xiàng)卡,在這里只對例外選項(xiàng)卡進(jìn)行操作。點(diǎn)擊“例外”標(biāo)簽則可切換到例外屬性,如下圖: 
2. 啟用遠(yuǎn)程過程調(diào)用端口(RPC) DCOM是基本遠(yuǎn)程過程調(diào)用(RCP)服務(wù)實(shí)現(xiàn)的,因此要通過DCOM實(shí)現(xiàn)遠(yuǎn)程通訊必需啟動(dòng)RCP服務(wù),并將它使用的端口添加到Windows防火墻的例外中。在例外選項(xiàng)卡中點(diǎn)擊“添加端口”按鈕,打開“添加端口”對話框: 
將名稱命名為“RCP”,在端口號中輸入135,協(xié)議類型為TCP,單“確定”完成設(shè)置。 注意:1.必須保證Network DDE和Network DDE DSDM設(shè)置為自動(dòng)。 2.防火墻中的135端口必須打開,并且網(wǎng)卡端口不允許封閉。 客戶端配置 客戶端需要以下四部分設(shè)置: 1. 建立用戶 2. 啟用Network DDE和Network DDE DSDM 3. 配置DDE共享 4. 端口設(shè)置 1. 建立用戶 客戶端需要建立和服務(wù)器中新建的相同的用戶,包括用戶名和口令,只有這樣才能登陸到服務(wù)器中,實(shí)現(xiàn)遠(yuǎn)程訪問。具體步驟請參考服務(wù)器端新建用戶的步驟。 客戶端在利用DDE遠(yuǎn)程訪問時(shí),必須要用這個(gè)新建的用戶登錄客戶端,然后才能進(jìn)行相關(guān)的操作。 2. 啟用Network DDE和Network DDE DSDM 客戶端需要將Network DDE和Network DDE DSDM服務(wù)設(shè)置為手動(dòng),這樣在用DDE遠(yuǎn)程訪問時(shí)系統(tǒng)就能夠自動(dòng)將其啟動(dòng)。具體步驟請參考服務(wù)器端的具體設(shè)置。 3. 配置DDE共享 在運(yùn)行中輸入“DDEshare”打開“DDE共享”設(shè)置對話框。客戶端只需在選擇計(jì)算機(jī)中選中服務(wù)器的名稱即可。即打開“共享”菜單下的“選擇計(jì)算機(jī)”,在彈出“選擇計(jì)算機(jī)”對話框中填入服務(wù)器的名稱。 
4. 端口設(shè)置 客戶端同樣需要打開防火墻的端口,具體步驟請參考服務(wù)器端的端口設(shè)置。 注意:1. 必須要用新建的用戶登陸客戶端才能進(jìn)行相關(guān)的操作。 2. 必須保證Network DDE和Network DDE DSDM設(shè)置為自動(dòng)。 3. 客戶機(jī)與服務(wù)器的IP地址要處于同一網(wǎng)段。 紫金橋作為DDE 服務(wù)器 紫金橋?監(jiān)控組態(tài)軟件可以作為DDE服務(wù)器,第三方程序可以通過DDE方式訪問數(shù)據(jù)庫中的實(shí)時(shí)數(shù)據(jù)。 示例: 客戶端使用Excel,保證用新建的用戶登錄,在本地客戶端的Excel中就可以通過公式對其進(jìn)行訪問了。如 “=\\[ComputerName]\NDDE$|[DDEShareName]![TagID]” [ComputerName]為實(shí)際的機(jī)器名,[DDEShareName]為在遠(yuǎn)程計(jì)算機(jī)上建立DDE 共享名[TagID]包括數(shù)據(jù)庫中點(diǎn)名和參數(shù)名,如:A1.PV。 紫金橋作為DDE 客戶端 紫金橋?數(shù)據(jù)庫將DDE 服務(wù)器程序當(dāng)作一個(gè)I/O設(shè)備,通過DDE 設(shè)備驅(qū)動(dòng)程序與DDE 服務(wù)器通信。例如要與EXCEL 通信,需要建一I/O設(shè)備,該設(shè)備定義時(shí),指定了與EXCEL的哪個(gè)文件進(jìn)行通信,而具體與哪個(gè)單元格,則需要通過I/O連接來指明。步驟如下: [1] 添加 Excel I/O設(shè)備 在開發(fā)界面的導(dǎo)航器“數(shù)據(jù)庫”選項(xiàng)卡中的“I/O設(shè)備驅(qū)動(dòng)”,然后依次展開目錄“DDE協(xié)議”、廠商“Microsoft”,選擇驅(qū)動(dòng)程序“DDE”,雙擊驅(qū)動(dòng)程序名稱“DDE”,或用鼠標(biāo)右擊后在右鍵菜單中選擇“添加設(shè)備驅(qū)動(dòng)”。將出現(xiàn)設(shè)備定義框。如下圖: 
在設(shè)備定義框中填寫設(shè)備名如DDE1。 
此處的服務(wù)名和話題名需要根據(jù)DDE服務(wù)器來定訪問遠(yuǎn)程時(shí),首先需要完成與DDE遠(yuǎn)程訪問相關(guān)的設(shè)置,此時(shí)服務(wù)器名為:\\[ComputerName]\NDDE$,話題名為設(shè)置好的DDE共享名。 此處采集類型中的變化通知項(xiàng)是指驅(qū)動(dòng)并不直接采集數(shù)據(jù),只有當(dāng)數(shù)據(jù)發(fā)生了變化時(shí),才進(jìn)行采集數(shù)據(jù)。周期采集是,簡單的周而復(fù)始的采集。推薦使用周期采集,只有服務(wù)器中的數(shù)據(jù)變化比較緩慢才建議使用變化通知項(xiàng)。否則由于變化通知選項(xiàng)需要發(fā)送變化消息,在數(shù)據(jù)頻繁變化時(shí),采集速度反而降低。 點(diǎn)擊“高級”按鈕會(huì)出現(xiàn)如下圖所示的對話框: 
其中,采集到的字符串中去除逗號主要是針對有些DDE服務(wù)器的某些特性設(shè)置的,比如1234某些DDE服務(wù)器會(huì)傳遞1,234此時(shí)應(yīng)該把逗號去除方能采集到正確的數(shù)據(jù)。特定字符串轉(zhuǎn)換數(shù)值主要是為了把采集到的特定字符串轉(zhuǎn)換為特定值時(shí)使用。比如,把ON或Open轉(zhuǎn)換為1,把OFF或Close轉(zhuǎn)換為0,注意此處的字符串是不區(qū)分大小寫的。 可以通過添加、修改、刪除按鈕來編輯字符串轉(zhuǎn)換的設(shè)置。 [2] 建立連接項(xiàng) 進(jìn)入數(shù)據(jù)庫組態(tài),選擇一位號,建立數(shù)據(jù)連接,選擇設(shè)備DDE1,輸入連接項(xiàng)如A1.pv(所要采集服務(wù)器端數(shù)據(jù)的點(diǎn)名),依次建立其他連接項(xiàng)。 建立聯(lián)結(jié)的對話框如下圖所示: 
其中的子串索引主要是針對某些設(shè)備而定的,比如有些設(shè)備一個(gè)聯(lián)結(jié)項(xiàng)就可以返回多個(gè)數(shù)據(jù),中間用Tab分割,比如“Open Close 123”,如果此時(shí)組態(tài)三個(gè)點(diǎn)聯(lián)結(jié),它們的子串索引分別是0、1、2那么采集數(shù)據(jù)之后它們的值分別是Open、Close、123對應(yīng)的數(shù)據(jù)。 建好所有連接項(xiàng)后,運(yùn)行紫金橋?監(jiān)控組態(tài)軟件,可以觀察到數(shù)據(jù)庫中相應(yīng)數(shù)據(jù)與服務(wù)器端的相應(yīng)的數(shù)據(jù)是一致的。
|