LABVIEW是多線程的,在兩個線程交換數據有多種方法,進程(PROCESS)和線程(THREAD)是兩個不同的概念,我們啟動一個執行文件實際上就是啟動一個進程,WINDOWS的進程管理器可以觀察到當前存在那些活動進程,進程間交換數據可以簡單地理解成多個執行文件間交換數據.進程間交換數據有幾種方法:剪切板(CLIPBOARD),動態
數據交換(
DDE),內存映射文件(MAP FILE)和一般文件,當然也可以用TCP/IP ,SHARE VARIABLE,DATASOCKET,不過這些都屬于網絡數據交換,用于本機進程間通訊并不合適.過去的一篇文章中已經介紹過如何利用剪切板進行通訊,今天介紹一下動態數據交換(DDE)DDE(Dynamic Data Exchange),即動態數據交換,是Windows平臺上的一個完整的通信協議,它使應用程序能彼此交換數據和發送指令。DDE過程是兩個程序的對話過程,一方向另一方提出問題,然后等待回答。提出問題的一方即申請告知信息的應用程序,稱為顧客(Client),回答的一方即提供信息的應用程序,稱為服務器(Server)。一個應用程序可以同時是顧客和服務器:當它向其他程序請求數據時,它充當的是顧客;當有其它程序需要它提供數據時,它又成了服務器。但就某一確定的時刻而言,一個應用程序只能充當顧客或服務器。DDE對話的內容是通過3 個標識進行約定的:①服務器名(Service Name):DDE源的每個應用程序有一個唯一的服務器名,通常為不帶后綴的可執行文件;②話題(Topic):對源程序有意義的一些數據單元即對話的議題,許多應用程序將文檔名作為DDE會話的話題;③項目(Item):DDE會話中,兩個應用程序間真正傳遞的數據。建立DDE之前,客戶程序必須填寫服務程序的3個標識名。DDE鏈接有3種類型:①熱鏈接(hot link):服務器發送專門為DDE對話而設定項目中的數據,當這些數據發生變化時,鏈接將實時動作,自動更新數據;②冷鏈接(cold link):當數據發生變化時,客戶必須明確地提出更新要求,數據才會被更新;③暖鏈接(w
armlink):服務器在數據發生變化時,通知客戶,客戶根據自己的要求決定是否更新數據。DDE本質上是通過發送消息實現的,在VC和CVI中,可以注冊事件回調函數,實現自動數據交換,但是遺憾的是LABVIEW并沒有對DDE提供事件驅動方式,正如它的串口操作一樣,都是通過輪詢(POLLING)方式進行的,因此就涉及到兩個進程DDE速度協調的問題。DDE是WINDOWS早期進程間通訊的重要方式,現在用的不多了,但是很多應用程序,比如OFFICE,MATLAB等,包括各種流行的組態軟件,依然提供對DDE的支持,所以有必要了解一下。7。1以后的LABVIEW在模板中是找不到DDE庫的,需要手動添加到USER LIB中。C:Program FilesNational InstrumentsLabVIEW 8.5vi.libPlatformdde.llb主要分成客戶機和服務器兩部分,客戶機和服務器VI。
DDE數據交換首先要啟動服務器,否則客戶機無法連接。服務器操作過程是:注冊服務器---》注冊ITEM----》設定ITEM值-----》取消ITEM注冊---》取消服務器注冊
相應客戶端的讀數據
框圖注意到服務器的循環每500MS更新一次,客戶端每500MS更新一次,服務器和客戶端基本保持同步,如果客戶端速度高于服務器,將導致對服務器的同一數據讀多次,同理,如果服務端運行速度快,客戶端運行速度慢,將導致數據丟失,這正是沒有事件響應的缺點,很難保證發送和接受的同步。因此,上面的程序僅適用于對數據交換要求不高的情況,比如監控等。DDE是一個層次結構,SERVER--》TOPIC---》ITEM一個SEVER可以包括多個TOPIC,(類似與組),每個TOPIC又可以包括多個ITEM(項目),我們可以通過循環注冊多個TOPIC和多個ITEM,實現批量數據交換。
上圖中,通過循環為TOPIC1同時注冊了10個ITEM,分別是ITEM0----》ITEM9,在主循環中分別向ITEM0--》ITEM9寫入數據。
同理,我們可以對我們有通訊的數據詳細分類成多個SERVER和多個TOPIC,進行大量的數據交換。后續文章中將進一步介紹DDE的高級同步技術。
關鍵詞:
labviewDDE數據交