摘? 要: DCOM技術在信號采集處理系統中的應用實例,描述了該系統的設計和實現方案。
關鍵詞: DCOM技術? 分布式系統? 信號采集處理
?
隨著Internet的不斷發展,系統網絡化和開放性成為系統發展的主流,以往單一、獨立的信號采集處理系統已經不能適應新的形勢。用戶希望能通過Internet/Intranet進行遠距離的信息采集與處理,并且需要能夠支持處于不同主機上的多個信號采集端與多個信號處理端的協同工作。建立分布式信號采集處理系統是解決上述問題的有效途徑。
分布式組件對象模型(DCOM)是微軟公司推出的一個分布式計算標準,已經成為開發分布式系統和多層應用的主流技術之一。因此,充分利用微軟的平臺優勢,建立基于DCOM的分布式信號采集處理系統,在技術上具有可靠的保證。本文將介紹一個基于該思想的應用實例的設計與實現方法。
1? COM、DCOM技術簡介
組件對象模型COM(Component Object Model)是微軟公司提出的一種二進制軟件交互規范,提供平臺無關的、面向對象的通信協議。COM使用面向對象的編程機制,組件之間具有極松馳的耦合性,可以實現穩定的版本轉變,使應用程序能更好地擴充和復用。此外COM還具有位置無關性和語言無關性的特點。
分布式組件對象模型DCOM(Distributed COM)是對COM模型的分布式擴展,使其能夠支持局域網、廣域網甚至Internet中不同計算機上的COM對象間的通信,實現應用程序在位置上的分布。DCOM是跨平臺的互操作性標準,具有組件位置獨立性、平臺獨立性、協議獨立性、安全性、可配置性等特點。
2? 分布式信號采集處理系統的設計與實現
2.1 系統功能描述
分布式信號采集處理系統是一個既可運行于網絡,也可運行于單機環境下的開放式信號采集與信號處理綜合系統。它完全基于網絡的概念,利用COM及DCOM的強大優勢,將下層信號采集的功能進行封裝,以COM服務的形式透明地提供給網絡內的上層應用,保持了平臺的透明性,支持真正的客戶-服務器模式和分布式軟件結構。系統使用開放的網絡結構架構,可以支持多個信號采集子系統和多個信號處理子系統。這些子系統完全透明地運行于網絡內不同的節點中。系統實時地與這些子系統通信,實現動態的管理與配置。系統允許用戶進行功能擴展和發揮,為不同用戶對象的二次開發提供了極大的靈活性,從而滿足企業內部對系統伸縮性和可擴展性的要求。
2.2 系統組成
該系統主要由下面三大子系統組成。
(1)信號采集子系統。該系統負責管理連接于本主機上的所有A/D采集卡,同時實現對采集功能的控制及數據的采集與傳送功能。它封裝對數據采集卡的底層訪問,向上提供一致的訪問接口,與上層信號處理系統和代理服務器系統進行通信。一方面它要查詢本地機器上所擁有的采集卡設備的數量及其狀況,向代理服務器系統進行設備的注冊和注銷,同時要接收來自信號處理系統對指定采集設備的操作指令,將結果返回給信號處理系統。一個信號采集子系統可以管理本地機器上的多個采集卡設備。
(2)信號處理子系統。該子系統采用多線程并行處理機制實現數字信號處理及與用戶進行交互的功能。它接收用戶的操作并將指令發往相應的信號采集子系統,根據系統設置或用戶操作對信號采集子系統發回的各種數據,進行各種時域或頻域的數字信號處理與顯示。
(3)代理服務器子系統。該系統主要負責整個系統內所有信號采集子系統與信號處理子系統的注冊、注銷及其連接分配。所有啟動的信號采集子系統和信號處理子系統都必須先在該系統上進行注冊,然后根據系統所使用的某種連接分配策略,對注冊在其上的信號采集子系統和信號處理子系統進行連接。只有通過本子系統相互連接以后的信號采集子系統和信號處理子系統才可以相互使用。該系統提供3種連接分配策略:自動均衡連接、根據配置文件連接和手工連接。
整個信號采集處理系統由分布在網絡中的多個信號采集子系統、多個信號處理子系統和一個代理服務器子系統組成。系統結構如圖1所示。
?
這些子系統透明地分布于網絡中的不同主機上。同一個主機上可以單獨運行也可以同時運行信號采集子系統和信號處理子系統。每個信號采集子系統或信號處理子系統啟動時都會自動向代理服務器注冊,退出時也會進行自動注銷。代理服務器對注冊在其上的子系統進行分配連接。一個信號處理子系統可以要求同時連接上多個信號采集子系統,一個信號采集子系統也可以被多個信號處理子系統所連接。經過代理服務器連接以后的信號采集子系統和信號處理子系統可以直接通信。代理服務器只負責它們的注冊、注銷和連接工作,不再參與它們的數據傳輸。這使代理服務器的工作負荷減輕,也提高了系統的效率。
2.3 接口設計及系統實現
系統的開發工具為VC++6.0,充分利用COM、DCOM的強大優勢,提供各子系統相互透明訪問的功能。針對系統三大子系統的功能,基于VC++6.0的ATL和MFC開發環境創建如下3個項目,分別實現三大系統的設計功能:
(1)CollectionServer項目。該項目使用ATL技術開發,以Windows服務的形式實現了信號采集子系統的所有功能,它以后臺服務進程的方式運行,不提供用戶界面。
本項目在IDL語言中定義如下的COM組件:
coclass DataTransmit
{
????????????? [default] interface IDataTransmit;
????????????? [source] interface IReceiveData;
};
該組件主要實現IDataTransmit接口,以封裝對A/D采集卡的直接訪問功能。IDataTransmit接口只提供ReadData()和ADCommand()二個方法,向上層信號處理系統提供統一、簡單、方便的調用方法,同時也便于指令的擴展和更改。信號處理系統調用ReadData()方法讀取指定的A/D采集卡采集的數據,而ADCommand()方法則用于信號處理系統向A/D采集卡發送指令來設置采集參數、啟動和停止采集等。IReceiveData接口是一個源接口,在信號處理子系統ColleMonitor項目中實現,用于本信號采集子系統向信號處理子系統發送已采集到數據的事件通知。
(2)ColleMonitor項目。該項目使用MFC框架開發,實現信號處理子系統的功能。在此項目中主要實現了IReceiveData接口,此接口是一個事件接口,提供3個事件:DeviceConnectEvent()、DeviceDisconnectionEvent()、DeviceAcqFinishedEvent()。當代理服務器子系統將某個信號采集子系統中的某個A/D設備連接到本信號處理子系統時,調用DeviceConnectEvent()方法通知本系統,并且將信號采集子系統的IDataTransmit接口指針和設備標識號作為參數傳給本系統。本系統獲得這二個參數后即可通過接口直接對設備進行訪問。同樣,當某個設備已被取消連接或注銷時,代理服務器子系統也會調用DeviceDisconnectionEvent()方法,以通知本系統此設備不可再用;事件DeviceAcqFinishedEvent()則是當某個設備完成采集任務時,由相應的信號采集子系統觸發,通知本系統可以調用相應的IDataTransmit接口讀取數據。
(3)ColleBroker項目。該項目使用ATL/WTL技術開發實現代理服務器的功能。它提供一個簡單的窗口,顯示已經注冊的A/D采集卡設備和信號處理子系統及它們之間的連接狀況,允許用戶進行連接管理和連接設置。該項目是一個可遠程激活的DCOM服務程序,COM組件定義為coclass ColleBrokerObj。
{
????????????? [default] interface IRegisterSubSystem;
};
IRegisterSubSystem接口實現下列4個方法:
①RegisteConllectionDevice([in] long hDeviceHandle,[in] BSTR strCardSerial,[in] BSTR strComputer,[in] int DeviceType,[in] IDataTransmit*lpConllection);
②UnRegisteConllectionDevice([in] long hDeviceHandle);
③RegisteMonitor([in] BSTR strIpAdress,[in] BSTR strComputer,[in] IReceiveData*lpConllection);
④UnRegisteMonitor([in] BSTR strComputer)。
其中:RegisteConllectionDevice()和UnRegisteConllectionDevice()方法由信號采集子系統調用,用于采集卡的注冊和注銷。由于一個信號采集子系統可以掛接多個A/D采集卡設備,為了提供更大的靈活性,采集系統的注冊和注銷以及與信號處理子系統的連接分配均以A/D采集卡設備為單位。因此一個信號采集子系統上的不同采集卡設備可以被分配給不同的信號處理子系統使用。RegisteMonitor()和UnRegisteMonitor()方法則用于信號處理系統子系統的注冊和注銷,它們以主機名和IP地址作為注冊標識。
當信號采集子系統或信號處理子系統啟動運行時,首先激活本身系統的IDataTransmit或IReceiveData接口,然后根據配置調用CoCreateInstanceEx()激活代理服務器系統。當成功地查詢到代理服務的IRegisterSubSystem接口后,信號處理子系統調用IRegisterSubSystem的RegisteMonitor()直接注冊,將本系統的IReceiveData接口指針傳給代理服務器子系統。同樣,當信號采集子系統查詢到A/D采集卡設備時,通過代理服務器的IRegisterSubSystem接口注冊本設備,也將本系統的IDataTransmit接口指針和設備標識信息傳給代理服務器。代理服務器子系統通過交換2個子系統的接口指針實現子系統的相互連接。
3? 結束語
將DCOM技術應用于信號采集處理系統是一個很好的嘗試。本文描述了這樣一個分布式實例系統的設計和實現過程。實踐證明,利用DCOM技術,可極大地擴展原有的信號采集處理系統,使用戶靈活地組建和分布自已的系統,在實際中具有廣闊的應用前景。
?
參考文獻
1? Anderson J著,張知一,史元春譯.Visual C++5 ActiveX編程指南.北京:清華大學出版社,1998
2? Michaelis M著,宋麗紅,李二勇,楊超峰等譯.COM+編程指南.北京:機械工業出版社,2002
3? 何艾,葉思敏,謝輝.基于DCOM分布式GIS系統的實現.微計算機信息,2002;(3)
4? 趙明宇,徐立中.基于COM/DCOM技術的分布式監控系統實現.計算機與現代化,2002;(12)