- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COM在世纪星中的应用
导语:?与设备通信的驱动程序是世纪星组态软件的重要组成部分,本文主要讲述COM组件技术在开发世纪星驱动程序时的应用。 [摘 要]与设备通信的驱动程序是世纪星组态软件的重要组成部分,本文主要讲述COM组件技术在开发世纪星驱动程序时的应用。
1 引言
在工控软件中,数据的采集和下发直接影响系统的性能,因此对于如何构架一个高效合理的软件系统在工控界一直被广泛关注。在组态软件中,一般可分为两部分:HMI人机接口和数据采集模块。其中HMI是用户和现场设备进行通信的接口,HMI要做到直观易用以便于用户对生产情况的了解和操作,而HMI要以数据采集模块作为支撑,可见数据采集模块在工控软件中的重要性。为了适应各种不同的设备,世纪星的驱动程序采用了组件技术,使数据采集模块具有高性能、高可靠性、灵活、便于升级等重要特性。
2 COM组件技术
COM--Component Object Model,即组件对象模型,它是微软提出的一套开发软件的方法与规范。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统,以及其他组件提供服务,能够跨越链接库、应用程序、系统软件甚至网络软件,多个COM对象甚至可以联接起来形成应用程序或组件系统。组件式程序设计方法能像搭积木一样开发大而复杂的软件系统,并且可以利用以往开发的组件资源而不必进行二次开发。COM(组件对象模型)是一个与操作平台 无关的、分布的、面向对象的机制,其本质特性是COM对象的接口与实现的分离。基于COM的组件开发具有以下几点优势:
第一,从用户的角度考虑,用户一般希望能够定制所用的应用程序,而组件技术从本质上讲就是可被定制的,因而用户可以用更能满足他们需要的某个组件来替换原来的那个。
第二,由于组件是相对应用程序独立的部件,我们可以在不同的程序中使用同一个组件而不会产生任何问题,软件的可重用性将大大的得到增强。
第三,随着网络应用的普及,分布式网络应用程序在软件市场上变得越来越重要。组件价构可以使得开发这类应用程序的过程得以简化。
第四,组件式开发便于软件系统的升级,当某部分功能需要升级时,开发人员只需修改相应组件即可,而用户只需替换原来的组件,这就使得软件升级只是替换一些组件而已。
第五,组件式开发便于软件开发的分工协作,每个组件各自完成所需功能,只需在进行开发前协商好接口即可。
3 世纪星数据采集模块
数据采集模块是世纪星软件系统的后台服务程序,负责从现场设备采集数据并将数据提供给HMI,而HMI产生的控制信号又通过数据采集模块传输给设备,这样就达到了用户与设备的相互对话。其信息流如图1所示:
在数据采集模块中,基本上由两部分组成,一部分是和设备相对应的驱动程序,该程序既是一个COM组件,另有一个控制程序DataComm负责调用驱动程序以及和其他模块通信。在上位机和下位机或其他一些板卡进行通信时大致有以下几种方式:串口,TCP/IP,计算机PCI卡,数据采集模块通过一个统一的接口访问不同的设备,设备驱动文件只需完成该接口功能即可,这样在与新设备通信时DataComm不必修改,只要开发出与该设备通信的驱动组件就能完成上位机与设备之间的通信,DataComm与驱动程序之间的关系如图2所示:
4 设备驱动的接口设计与实现
每个COM组件都至少有一个IUnknown接口或继承IUnknown的子接口,IUnknown接口负责查询该组件的其他接口和维护引用计数,引用计数与组件对象持久性相关,本文不详细阐述。前面说访问设备使用统一的接口,那么该接口应该具有所有操作设备通用的功能,如初始化和关闭设备,读写数据等。在C++中使用抽象基类作为接口,其部分定义如下:
class IDeviceAccess : public IUnknown
{
public:
virtual HRESULT __stdcall QueryInterface(REFIID iid, void** ppvObj) = 0;
virtual ULONG __stdcall AddRef() = 0;
virtual ULONG __stdcall Release() = 0;
public:
virtual BOOL __stdcall UnInitialDevice( LPDEVADDR pDevAddr )=0;
virtual BOOL __stdcall InitialDevice( LPDEVINIDATA pInitDat )=0;
virtual BOOL __stdcall ReadData(…… )=0;
virtual BOOL __stdcall WriteData( ……
文档评论(0)