原理
DDE是一種動態(tài)數(shù)據(jù)交換機(jī)制(Dynamic Data Exchange,DDE。動態(tài)數(shù)據(jù)交換是微軟公司提出的一種數(shù)據(jù)通訊形式,它使用共享的內(nèi)存在應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換。DDE不同于剪切板方法,它能夠及時更新數(shù)據(jù),在兩個應(yīng)用程序之間自動更新信息,無須用戶參與。
使用DDE通訊需要連個Windows應(yīng)用程序,其中一個作為服務(wù)器處理信息,另外一個作為客戶機(jī)從服務(wù)器獲得信息??蛻魴C(jī)應(yīng)用程序向當(dāng)前所激活的服務(wù)器應(yīng)用程序發(fā)送一條消息請求信息,服務(wù)器應(yīng)用程序根據(jù)該信息作出應(yīng)答,從而實(shí)現(xiàn)兩個程序之間的數(shù)據(jù)交換。
通信要素
兩個程序間建立DDE通訊稱作DDE會話,一個會話由服務(wù)名與話題來標(biāo)識。DDE會話中包括很多數(shù)據(jù)項(xiàng),每個數(shù)據(jù)項(xiàng)對應(yīng)一個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)目名:單個數(shù)據(jù)項(xiàng)。紫金橋?數(shù)據(jù)庫中的點(diǎn)名加參數(shù)名為數(shù)據(jù)項(xiàng)名稱。如:TI101.PV。
您可以通過一個形象的比喻來理解這四要素:把機(jī)器名想成某個人居住的“國家”,把應(yīng)用程序想成“城市”,話題名當(dāng)作“街道”,項(xiàng)目名當(dāng)作“門牌號”。假如您要訪問一個朋友,當(dāng)您知道了他住在哪個國家后,哪個城市、街道和門牌號就能找到這個朋友了。
紫金橋?監(jiān)控組態(tài)軟件提供了DDE 客戶和DDE 服務(wù)器支持。DDE 服務(wù)器可以使紫金橋?軟件的過程信息傳送到其它應(yīng)用程序進(jìn)行分析,例如微軟的Excel軟件。DDE 客戶支持可以使來自其它應(yīng)用程序的信息傳送到紫金橋?的數(shù)據(jù)庫中。
配置
要想使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)配置操作。
DDE服務(wù)器端需要以下四部分設(shè)置:
1. 建立用戶以供客戶端使用。
2. 啟用Network DDE和Network DDE DSDM
3. 配置DDE共享
4. 端口設(shè)置
下面詳細(xì)介紹一下各步驟的具體設(shè)置。
1. 建立用戶
客戶端通過Network DDE訪問服務(wù)器時,需要以當(dāng)前用戶的身份登陸到服務(wù)器(系統(tǒng)自動完成登陸過程),所以在服務(wù)器端需要提供客戶登陸訪問時使用的用戶。
打開“控制面板”,選擇“管理工具”中的“計(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è)置為自動啟動。具體設(shè)置如下:
打開“控制面板”—“管理工具”下的“服務(wù)”一項(xiàng),或者直接在運(yùn)行中輸入“services.msc /s”打開“服務(wù)”設(shè)置。找到Network DDE DSDM,雙擊打開屬性對話框,在“常規(guī)”選項(xià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)“文件名過長”的錯誤提示,可以在通過以下步驟修改計(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è)置,如圖:
注意:必須選中允許啟動應(yīng)用程序、允許初始化應(yīng)用程序和替代Cmd顯示項(xiàng),并且替代Cmd顯示,使用“0”值。
可以通過“共享”菜單下的“受信任的共享”,看到當(dāng)前受信任的共享。
4. 端口設(shè)置
客戶端通過DDE遠(yuǎn)程訪問服務(wù)器時,服務(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)中自帶一個安全防火墻,如果它處于啟動狀態(tài),要對其做相應(yīng)配置。
1. 打開Windows防火墻配置對話框
進(jìn)入“控制面板”,選擇“安全中心”,打開“Windows 安全中心”配置窗口。
在窗口的右下角選擇“Windows 防火墻”,則可打開Windows防火墻配置對話框。Windows防火墻配置對話框包括“常規(guī)”、“例外”和“高級”三個選項(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)程通訊必需啟動RCP服務(wù),并將它使用的端口添加到Windows防火墻的例外中。在例外選項(xiàng)卡中點(diǎn)擊“添加端口”按鈕,打開“添加端口”對話框:
將名稱命名為“RCP”,在端口號中輸入135,協(xié)議類型為TCP,單“確定”完成設(shè)置。
注意:1.必須保證Network DDE和Network DDE DSDM設(shè)置為自動。
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)程訪問時,必須要用這個新建的用戶登錄客戶端,然后才能進(jìn)行相關(guān)的操作。
2. 啟用Network DDE和Network DDE DSDM
客戶端需要將Network DDE和Network DDE DSDM服務(wù)設(shè)置為手動,這樣在用DDE遠(yuǎn)程訪問時系統(tǒ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è)置為自動。
3. 客戶機(jī)與服務(wù)器的IP地址要處于同一網(wǎng)段。
DDE 服務(wù)器
紫金橋?監(jiān)控組態(tài)軟件可以作為DDE服務(wù)器,第三方程序可以通過DDE方式訪問數(shù)據(jù)庫中的實(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)作一個I/O設(shè)備,通過DDE 設(shè)備驅(qū)動程序與DDE 服務(wù)器通信。例如要與EXCEL 通信,需要建一I/O設(shè)備,該設(shè)備定義時,指定了與EXCEL的哪個文件進(jìn)行通信,而具體與哪個單元格,則需要通過I/O連接來指明。步驟如下:
[1] 添加 Excel I/O設(shè)備
在開發(fā)界面的導(dǎo)航器“數(shù)據(jù)庫”選項(xiàng)卡中的“I/O設(shè)備驅(qū)動”,然后依次展開目錄“DDE協(xié)議”、廠商“Microsoft”,選擇驅(qū)動程序“DDE”,雙擊驅(qū)動程序名稱“DDE”,或用鼠標(biāo)右擊后在右鍵菜單中選擇“添加設(shè)備驅(qū)動”。將出現(xiàn)設(shè)備定義框。如下圖:
在設(shè)備定義框中填寫設(shè)備名如DDE1。
此處的服務(wù)名和話題名需要根據(jù)DDE服務(wù)器來定訪問遠(yuǎn)程時,首先需要完成與DDE遠(yuǎn)程訪問相關(guān)的設(shè)置,此時服務(wù)器名為:\\[ComputerName]\NDDE$,話題名為設(shè)置好的DDE共享名。
此處采集類型中的變化通知項(xiàng)是指驅(qū)動并不直接采集數(shù)據(jù),只有當(dāng)數(shù)據(jù)發(fā)生了變化時,才進(jìn)行采集數(shù)據(jù)。周期采集是,簡單的周而復(fù)始的采集。推薦使用周期采集,只有服務(wù)器中的數(shù)據(jù)變化比較緩慢才建議使用變化通知項(xiàng)。否則由于變化通知選項(xiàng)需要發(fā)送變化消息,在數(shù)據(jù)頻繁變化時,采集速度反而降低。
點(diǎn)擊“高級”按鈕會出現(xiàn)如下圖所示的對話框:
其中,采集到的字符串中去除逗號主要是針對有些DDE服務(wù)器的某些特性設(shè)置的,比如1234某些DDE服務(wù)器會傳遞1,234此時應(yīng)該把逗號去除方能采集到正確的數(shù)據(jù)。特定字符串轉(zhuǎn)換數(shù)值主要是為了把采集到的特定字符串轉(zhuǎn)換為特定值時使用。比如,把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è)備一個聯(lián)結(jié)項(xiàng)就可以返回多個數(shù)據(jù),中間用Tab分割,比如“Open Close 123”,如果此時組態(tài)三個點(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ù)是一致的。