《COM组件技术在世纪星驱动开发中的应用.docx》由会员分享,可在线阅读,更多相关《COM组件技术在世纪星驱动开发中的应用.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、COM组件技术在世纪星驱动开发中的应用sunjuan导语:本文主要讲述COM组件技术在开发世纪星驱动程序时的应用。摘要与设备通信的驱动程序是世纪星组态软件的重要组成部分,本文主要讲述COM组件技术在开发世纪星驱动程序时的应用。在工控软件中,数据的收集和下发直接影响系统的性能,因而对于怎样构架一个高效合理的软件系统在工控界一直被广泛关注。在组态软件中,一般可分为两部分:HMI人机接口和数据收集模块。其中HMI是用户和现场设备进行通信的接口,HMI要做到直观易用以便于用户对生产情况的了解和操作,而HMI要以数据收集模块作为支撑,可见数据收集模块在工控软件中的重要性。为了适应各种不同的设备,世纪星的
2、驱动程序采用了组件技术,使数据收集模块具有高性能、高可靠性、灵敏、便于升级等重要特性。2COM组件技术COMComponentObjectModel,即组件对象模型,它是微软提出的一套开发软件的方法与规范。组件实际上是一些小的二进制可执行程序,它们能够给应用程序,操作系统,以及其他组件提供服务,能够跨越链接库、应用程序、系统软件甚至网络软件,多个COM对象甚至能够连接起来构成应用程序或组件系统。组件式程序设计方法能像搭积木一样开发大而复杂的软件系统,并且能够利用以往开发的组件资源而不必进行二次开发。COM组件对象模型是一个与操作平台无关的、分布的、面向对象的机制,其本质特性是COM对象的接口与
3、实现的分离。基于COM的组件开发具有以下几点优势:第一,从用户的角度考虑,用户一般希望能够定制所用的应用程序,而组件技术从本质上讲就是可被定制的,因此用户能够用更能知足他们需要的某个组件来替换原来的那个。第二,由于组件是相对应用程序独立的部件,我们能够在不同的程序中使用同一个组件而不会产生任何问题,软件的可重用性将大大的得到加强。第三,随着网络应用的普及,分布式网络应用程序在软件市场上变得越来越重要。组件价构能够使得开发这类应用程序的经过得以简化。第四,组件式开发便于软件系统的升级,当某部分功能需要升级时,开发人员只需修改相应组件即可,而用户只需替换原来的组件,这就使得软件升级只是替换一些组件
4、罢了。第五,组件式开发便于软件开发的分工协作,每个组件各自完成所需功能,只需在进行开发前协商好接口即可。3世纪星数据收集模块数据收集模块是世纪星软件系统的后台服务程序,负责从现场设备收集数据并将数据提供应HMI,而HMI产生的控制信号又通过数据收集模块传输给设备,这样就到达了用户与设备的互相对话。其信息流如图1所示:在数据收集模块中,基本上由两部分组成,一部分是和设备相对应的驱动程序,该程序既是一个COM组件,另有一个控制程序DataComm负责调用驱动程序以及和其他模块通信。在上位机和下位机或其他一些板卡进行通信时大致有以下几种方式:串口,TCP/IP,计算机PCI卡,数据收集模块通过一个统
5、一的接口访问不同的设备,设备驱动文件只需完成该接口功能即可,这样在与新设备通信时DataComm不必修改,只要开发出与该设备通信的驱动组件就能完成上位机与设备之间的通信,DataComm与驱动程序之间的关系如图2所示:4设备驱动的接口设计与实现每个COM组件都至少有一个IUnknown接口或继承IUnknown的子接口,IUnknown接口负责查询该组件的其他接口和维护引用计数,引用计数与组件对象持久性相关,本文不具体阐述。前面讲访问设备使用统一的接口,那么该接口应该具有所有操作设备通用的功能,如初始化和关闭设备,读写数据等。在C+中使用抽象基类作为接口,其部分定义如下:classIDevic
6、eAccess:publicIUnknownpublic:virtualHRESULT_stdcallQueryInterfaceREFIIDiid,voidppvObj=0;virtualULONG_stdcallAddRef=0;virtualULONG_stdcallRelease=0;public:virtualBOOL_stdcallUnInitialDeviceLPDEVADDRpDevAddr=0;virtualBOOL_stdcallInitialDeviceLPDEVINIDATApInitDat=0;virtualBOOL_stdcallReadData=0;virtual
7、BOOL_stdcallWriteData=0;该接口的实现是在COM组件中,由于设备不同,所以实现也有所不同,但同类设备也有一些一样之处,比方智能仪表大多都是通过串口进行通信,而对串口的参数设置是这类设备的共同之处,为此我们定义一个类CDevice:publicIdeviceAccess,这个类完成初始化等基本的功能,而读写数据ReadData和WriteData都进行空实现,让所有相关设备以CDevice为基类然后重写ReadData和WriteData即可。世纪星的驱动组件是使用MFC开发的,MFC是通过嵌套类实现COM功能,在世纪星中我们以继承CDevice的类作为嵌套类,这个嵌套类完成一些详细功能,它所在的类我们成为外部类,外部类提供一个全局唯一的CLSID,DataComm通过CLSID定位组件,然后使用之前定义的接口完成与设备的通信,通过图3描绘如下:数据收集模块的性能是影响工控软件的一个重要因素,高效稳定的数据通信服务是工控软件或许更大发展的基本保证。世纪星使用COM技术实现数据通信既方便了开发人员对新设备驱动的开发,又便于用户对驱动的升级,同时加强了世纪星本身的可扩展性。0