您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 基于USB数据采集模块的OPC服务器设计
1基于USB数据采集模块的OPC服务器设计DesignofanOPCServerBasedonUSBDataAcquisitionModules邓静费敏锐王海宽(上海市电站自动化技术重点实验室,上海大学机电工程与自动化学院,上海200072)摘要:针对目前USB数据采集设备缺乏通用性驱动的现象,设计了基于USB数据采集模块的OPC数据访问服务器。该服务器采用北京华富惠通技术有限公司推出的CONTROX-工具包来开发,通过在VisualC++6.0环境调用相关的OPC运行库函数建立OPC服务器,同时由数据采集模块提供的API对设备中采集的数据进行读写。该设计方法在朗肯循环蒸汽透平动力系统试验台上得到了验证,并通过WebAccess组态软件连接所建立的OPC服务器,实现对该试验设备的本地和远程监控。关键词:OPC服务器USB数据采集模块OPC开发工具包Abstract:ForthelackofgeneraldriversinUSBdataacquisitiondevices,anOPCserverbasedonUSBdataacquisitionmoduleswasdesigned.TheOPCserverwasdevelopedbyusinganOPCtoolkitnamedCONTROXfromHuafuHuitongTechnologyCO.LTD.SomeOPCrunningfunctionswereusedinVisualC++6.0tobuildtheOPCserver,andAPIfunctionssuppliedbythemoduleswerealsousedtoreadandwritedevicedata.ThismethodwasvalidatedinRankineCyclerPowerSystem.,andlocalorremotecontrolforthisequipmentwasviableafteraconfigurationsoftwarenamedWebAccessconnectsthisOPCserver.Keywords:OPCServerUSBDataAcquisitionModulesOPCToolkit0引言不断变革的信息技术推动着工业控制逐步向前发展,大量应用的工业通信网络如现场总线、工业以太网、无线网络等表明工业控制领域正朝着系统集成化、控制分散化、节点智能化、结构网络化的方向发展。信息交换逐渐覆盖整个工厂,生产过程呈现“透明化”趋势。为了顺应技术改革的潮流,各大系统集成商纷纷推出其各具特色的解决方案。目前应用比较多的是利用组态软件对车间的生产过程进行统一监控和管理,从而满足不断提高的系统复杂性和全球范围的分布式控制需求。这类系统在构建中比较关键的一步是如何实现对现场数据的快速获取,并能尽可能的减少传输延时。当前数据采集系统中PCI接口卡、以太网、串口、并口等应用比较广泛,而USB接口则较少采用。由于USB接口技术已经发展得比较成熟,且具有安装方便、高带宽、易于扩展等特点,因而越来越多的被应用于工业环境中。但是大多数USB设备都使用专用接口驱动,这使得大部分组态软件都无法直接和某一特定的USB设备相连,必须重新开发驱动程序,因而驱动开发成了组态软件设计中一件比较繁琐的任务。不过目前大部分组态软件都具备OPC接口,只要开发相应设备的OPC服务器就可以将其连接到组态软件中,从而避免驱动程序的重复设计。本文开发的基于USB接口的OPC数据访问服务器就是解决USB数据采集中驱动问题的一种很好的方法。1OPC技术OPC(OLEforProcessControl)技术是用于过程控制的对象链接和嵌入OLE(ObjectLinkingandEmbedding)技术,它以微软的组件对象模型COM/DCOM/COM+技术为基础,采用客户/服务器模式。OPC服务器为数据提供方,而OPC客户端则为数据使用方。OPC技术作为软件和硬件之间的桥梁,大大减少了设备驱动的重复开发工作,使得硬件厂商可以专2心地开发产品功能,而不用考虑驱动接口的问题;而软件厂商也可以将大量时间用于软件的优化设计上,而不用理会硬件的升级换代。目前OPC技术已经开始大范围的应用于过程控制系统中。1.1OPC服务器结构OPC服务器具有两套接口:定制接口和自动化接口,其中定制接口是OPC服务器必须提供的,而自动化接口是可选的。每个OPC服务器包括3类对象:OPC服务器对象(OPCServer)、OPC组对象(OPCGroup)和OPC项对象(OPCItem),如图1所示,每一类对象都包括一系列接口。图1OPC服务器结构OPC服务器对象维护有关服务器的信息并作为组对象的包容器,可以动态地创建或释放组对象;OPC组对象除了维护有关自身的信息外,还提供包容项对象的机制,从逻辑上实现对OPC项的管理;OPC项对象则代表了与数据源的连接,其中包括值(value)、品质(quality)和时间戳(timestamp)3个基本属性。OPC服务器对象和OPC组对象是两个标准的COM对象,OPC服务器开发中需要实现其对象与接口,而OPC项对象不能被OPC客户程序直接访问,所有的OPC项操作都是通过包容此项的OPC组对象来进行的。1.2OPC服务器开发方法OPC服务器主要由两部分构成:OPC标准接口和硬件设备驱动。OPC标准接口是实现OPC规范中要求的各个对象及其接口;硬件驱动是完成接口中对设备数据的获取和操作。直接设计OPC服务器是一件比较复杂任务,设计者不仅要有很高的编程水平,熟悉OPC规范,同时也必须掌握相关硬件的特性。目前设计一个OPC服务器大致有3种途径:通过MFC提供的COM支持来开发;通过ATL开发;通过开发工具包来开发。3种开发方法各有利弊,MFC是通过多重继承的方式来实现COM对象,具有简单、易于管理、能够深入的掌握COM内部技术细节的特点,但是因为要从底层开始编写代码,工作相对繁琐,工程也相对复杂。ATL是通过多继承方式来实现COM对象,也就是说COM类是从多个ATL模板继承过来的,然后在COM类中实现COM接口。ATL专门用来开发小型COM组件,但这种开发方法需要对COM机制有非常深入的了解,而且由于程序中使用较多的模板类,要深入编程就需要很透彻的研究ATL中各模板之间的关系,也不利于短期内开发出一个完整的OPC服务器。OPC服务器开发工具的目的是将微软的OLE/COM+/DCOM技术和OPC的技术细节隐藏起来,使用户开发OPC服务器的工作可以集中在自己特定的数据采集任务上来。这种开发方式简单容易,周期短,能满足一般的需求,缺点是灵活性不高。目前OPC服务器开发工具在国际工业控制领域使用已经相当广泛,比较著名的供应商有FactorySoft,Softing等公司。1.3OPC服务器的运行方式OPC服务器的运行方式分为进程内服务器(DLL形式)和进程外服务器(EXE形式)。进程内服务器由于其和客户程序运行在同一个进程空间中,数据访问效率较高,但组件不稳3定容易引起客户进程的崩溃;进程外服务器拥有自己的进程空间,可以和客户程序运行在同一台机器上,也可以运行在远程机器上,稳定性好,组件进程不会危及客户程序,缺点是进程外组件开销大,调用效率相对低些。一般和软件结合的OPC服务器采用进程内运行方式,而独立的OPC服务器采用进程外运行方式。2USB数据采集模块的OPC服务器设计本文在朗肯循环蒸汽透平动力系统试验台上为其数据采集模块设计了一种进程外OPC数据访问服务器。设计结构上分为OPC标准接口实现和硬件设备驱动两部分。在VisualC++6.0环境中分别调用OPCDLL.DLL和PDAQX.DLL两个动态链接库文件所包含的API完成了整个OPC服务器的设计。2.1平台介绍朗肯循环蒸汽透平动力系统试验台是由美国TurbineTechnologies公司开发的一套模拟火电站蒸汽发电过程的教学设备,其过程数据的采集是通过一个名为IOtechPersonalDaq/56USB数据采集模块实现,配套的软件为PersonalDaqview,由于该软件只能进行简单的数据显示和分析,画面不够人性化,且不能远程访问,所以需要采用一种组态软件对其数据和画面进行重新配置,这样不但可以形象地在计算机上显示设备的内部结构和各部分运行状态,还能实现远程访问,便于进行各种网络控制策略的研究。该数据采集模块是通过一个USB接口连接到计算机上,但WebAccess组态软件不具备此模块的驱动,无法直接获取数据,需要为该采集模块建立一个OPC服务器。而WebAccess组态软件本身具有OPC接口,可以连接任何一个OPC数据访问服务器,这样就可以实现蒸汽轮机循环试验平台中上位机软件的重新设计。2.2OPC标准接口实现本文设计的OPC服务器是利用OPC数据访问服务器开发包来实现的,开发包中以动态连接库DLL形式提供了应用编程接口API,这样在不需要深入了解COM机制及OPC数据访问服务器接口细节的情况下就能快速开发一个出OPC服务器。通过开发工具包来设计OPC服务器的结构如图2所示。开发工具包本身不是一个OPC服务器,用户必须对它进行包装,使得在工具包基础上建立的应用程序成为一个OPC服务器。该开发包将设计OPC服务器所需要的API全部封装在OPCDLL.DLL文件中,在程序中实现的流程如图3所示,具体步骤如下:①首先调用InitOPCSvr进行初始化;②完成之后,注册回调函数,以便有事情发生时通知用户或向用户发出请求;③通过CreateTag向OPC运行库可添加多个标签;④通过SetTagProperties函数设置标签属性。⑤调用RunSvr函数,运行服务器;⑥与设备驱动通信,得到标签数据后,调用UpdateTag等函数刷新OPC运行库中标签的数据;⑦在服务服务器退出时,调用UninitOPCSvr。4OPCDll.Dll驱动OPC数据服务器WebAccess组态软件USB数据采集模块OPC接口ToolKit的简单接口OPCToolKit提供OPCKernel的功能图2用工具包开发OPC服务器的框架图3工具包调用流程图由于OPC服务器运行时还必须在系统COM组件管理中进行注册,退出运行后还需要注销,所以除了完成上述步骤外,还必须在程序中恰当的位置加入服务器注册函数RegServer和注销的函数UnregServer。2.3USB设备驱动程序中利用IOtechPersonalDaq/56USB数据采集模块提供的驱动文件直接读取模块缓冲区中的数据,并将各通道数据写入OPC服务器项对象中。PersonalDaqUSBdataacquisitionmodules的编程操作分为初始化配置和通道数据读取两部分。2.3.1初始化配置这部分要完成模块的初始化操作和各种错误的处理。流程图如图4所示。其中错误处理部分可以利用函数返回的句柄由用户来设定如何处理,也可以由系统自动作相应处理。图4配置流程图2.3.2数据采集该数据采集模块拥有20路模拟输入和16路数字输入输出,采集的数据可以为同一类型也可以为多种类型。API接口提供了4种方式来读取模块通道数据,分别是:特殊数据的单步采集、利用线性缓冲区的计数采集、利用循环缓冲区的模糊采集、多数据类型采集模式。第一种模式适合使用少量通道的情况。第二种模式用于由事件触发的数据采集,可以定义一个通道组一次采集多个通道数据,由于使用线性缓冲区,多个通道的数据必须同时更新。第三种模式类似于第二种,不过这时各通道数据以不确定方式更新,不需要同步。第四种模式可以在相同的采样频率下同时采集模拟通道和数字通道的数据。由于该蒸汽轮机循环试验平台采集的数据有模拟量也有数字量,所以采用第四种模式。该模式中主要任务是对通道选项的设置,以便确定获取数据的格式,VisualC++中通过调用DaqSetOption函数来实现。程序设计流程图如图5所示,完成所有函数调用后就可以在缓冲5区中读取采集到的数据,并将其插入OPC服务器项对象中就实现了整个OPC服务器的设计。图5多种类型
本文标题:基于USB数据采集模块的OPC服务器设计
链接地址:https://www.777doc.com/doc-1588965 .html