《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 基于DCOM的分布式信号采集处理系统的设计与实现

基于DCOM的分布式信号采集处理系统的设计与实现

2009-08-06
作者:李剑锋1, 王绪本1, 吕泽均2

  摘  要: 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)

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。