您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 多台高速压片机通信的OPCServer开发
随着信息技术的发展,MIS、ERP等系统被越来越多地应用于制药企业的生产管理中。如何把DCS、SCADA系统和这些信息管理系统相结合,即如何把制药车间的各种独立设备互联和信息共享,是亟待解决的问题。为此,我们设计和开发了面向多台高速压片机设备之间数据通信的OPCServer。1制药企业生产车间自动化系统组成及数据通信制药企业生产车间自动化系统一般由底层设备控制层、数据采集和监视控制层以及信息管理层组成,如图1所示。底层设备压片机一般由PLC通过通信接口连接到Profibus总线,然后通过网络交换机连接到Ethernet,监控服务器(SCADA/OPCServer)和信息管理服务器(ERP等)等通过以太网口和Ethernet相连接。高速压片机是制药企业生产车间自动化系统中的重要设备,其数据采集和信息管理过程如下:首先,通过PLC把压片机运行过程中的实时数据进行采集和控制;其次,通过PLC通信接口把必要的数据信息传到监控服务器(SCADA/OPCServer),从而监视服务器就可以对多台压片机的运行情况进行实时监控,以实现数据采集、设备控制、测量、参数调节以及各类信号报警等各项功能;最后,信息管理服务器(ERP等)可作为客户端来访问监控服务器,实现现代制药企业信息系统化管理,同时是为企业决策层及员工提供决策运行手段的管理平台。在实际应用中,控制多台压片机的各PLC或其他现场设备可能是不同厂家的产品,每种设备的通信协议也不尽相同,因此各设备和上位机即监控服务器的数据通信就需要统一标准接口来进行管理,我们开发的基于OPC技术的OPCServer解决了此问题。2软件设计和实现2.1OPC技术简介OPC是为解决应用软件与各种设备驱动程序的通信而产生的一个工业技术标多台高速压片机通信的OPCServer开发刘麟师向红(北京国药龙立科技有限公司,北京102600)摘要:分析了制药生产车间自动化系统组成,阐述了解决多台高速旋转式压片机(以下简称高速压片机)互联及信息系统对压片机进行访问的OPCServer,并说明了OPCClient访问OPCServer的方法。关键词:高速压片机;PLC;OPC;OPCServer;OPCClient图1制药企业生产车间自动化系统组成GongyitantaoyuXitongsheji◆工艺探讨与系统设计25准。通过OPC可以比较方便地把不同制造商提供的驱动或服务程序与应用程序集成在一起,为不同类型的服务器与不同类型的客户搭建一座桥梁。通过这座桥梁,客户和服务器间形成即插即用的简单规范的链接关系,不同的客户软件能够访问任意的数据源。传递数据的OPC实体称为OPCServer,访问OPC服务器的实体称为OPCClient。客户端可以购买市场上成品软件来实现,也可以用常用语言(如VB、VC或VC++语言)开发。客户端和OPC服务器通信是基于COM对象实现。客户端并不能直接接触到服务器内核,而是通过COM库(COMLibrary)来实现。2.2OPCServer开发2.2.1用于解释通讯规约模块的设计规约驱动类包含规约发送、规约接受和规约解释3个部分,其中基于一个单向的循环列表,规约解释的主体函数是DataProc,其主要功能是提供一个访问ClinkModule的数据接口,将从通讯端口收到的采样点数据赋值到ClinkModule里的m_nValue数组变量里。规约发送采用单向循环队列每隔一定时间发送一次,每一个发送邮箱对应一个接收邮箱。当信息发送时要执行两部分工作,一是将当前邮箱数据取出发送,二是将接收邮箱标志清空。邮箱管理的功能主要是由成员函数Run()实现,Run()函数的工作流程如图2所示。规约接受处理的主要功能是由类成员函数Rcvd()实现的,其主要是对收到的数据进行统计整理,并判断是否符合规约格式。同时返回一个有效标志,通知给通讯控制程序。通讯规约处理流程如图3所示。数据处理流程在Run()中被调用,是规约类CProtoclEngine访问计算机链接模块ClinkModule的唯一接口,其功能是将当前接收邮箱里的接受缓冲区(ucBuffer)数据根据接受邮箱登记的变量iTo(计算机链接模块索引序号)、iStart(模块内变量索引序号)和iPointNum(收到的采样点个数)来判断相应的计算机链接模块并分配给相应的变量(m_nValue)赋值。2.2.2在Windows下实现串口通讯的方法Windows环境下的编程最大特征之一就是设备的无关性,它通过设备驱动程序将Windows应用程序与不同图2Run()驱动流程图图3规约处理流程图工艺探讨与系统设计◆GongyitantaoyuXitongsheji26的外部设备隔离。Windows封装了通信机制,这种方式称为通信API。Windows程序可以利用API进行编程,而不用对硬件直接进行操作。下面介绍本文用到的Windows串口通信相关API函数。(1)打开和关闭串口。在32位的Windows系统中,串口和其他通信设备是作为文件处理的。串口的打开、关闭、读取和写入所用的函数与操作文件的函数完全一致。通信会话以调用CreateFile()开始,其返回一个句柄,随后在打开端口的操作中使用。CreateFile()函数的声明如下:HANDLECreateFile(LPCTSTRlpszName,DWORDfdwAccess,DWORDfdwShareMode,LPSECURITYlpsa,DWORDfdwCreate,DWORDfdwAttrsAndFlags,HANDLEhTemplateFile)CreateFile(szDevice,fdwAccess,fdwShareMode,lpsa,fdwCreate,fdwAttrsAndFlags,hTemplateFile);第一个参数lpszName是要打开的串口逻辑名,例如COM1或COM2;第二个参数fdwAccess指定了端口访问的类型。与文件一样,串口也可以打开以供读取、写入或者两者兼而有之。标志GENERIC_READ为读取打开串口,标志GENERIC为写打开串口。“OR”操作符将两个标志连接起来,就可以为读写访问打开串口;第三个参数fdwShareMode指定该端口的共享属性。该参数是为那些由许多应用程序共享的文件提供的。对于不能共享的串口,它必须置为0;第四个参数lpsa引用安全性属性结构,该结构定义了一些属性,例如通信句柄如何被打开端口的应用程序所继承。将该参数设置为NULL将为该端口分配缺省的安全性属性。子应用程序所继承的缺省属性是该端口不能被继承的;第五个参数fdwCreate指定如果CreateFile正在被已有的文件调用时应该做些什么;第六个参数fdwAttrsAndFlags描述了该端口的各种属性。对于文件来说,具有很多属性是可能的,但对于串口,唯一有意义的设置是FILE_FLAG_OVERLAPPED。指定该设置,端口I/O可以在后头进行。最后一个参数hTemplateFile是指向模板文件的句柄,当端口处于打开状态时,不使用该参数,因此,它必须置成NULL。关闭串口比打开串口简单,只需要调用CloseHand1e()。BOOLCloseHandle(hComm)://需关闭的设备句柄(2)读写串口操作。程序使用ReadFile()从串口中读取数据和WriteFi1e()向串口中写数据。1)ReadFile()的声明:BOOLReadFile(HANDLEhFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead,LPWORDlpNumberOfByteSRead,LPOVERLAPPEDlpoverlapped,);ReadFile的第一个参数十打开端口的句柄。第二个参数是数据将返回的缓冲区。第三个参数是要读取的字节数。第四个参数是实际读取的字节数。2)WriteFile()函数声明:BOOLWriteFile(HANDLEhFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead,LPWORDlpNumberOfByteSRead,LPOVERLAPPEDlpoverlapped,);由于WriteFile()与ReadFile()所带的参数一致,请参考ReadFile()函数。2.2.3OPCServer实现OPC服务器实现了一套标准的COM接口,即OPC接GongyitantaoyuXitongsheji◆工艺探讨与系统设计27口,任何一个OPC客户端都可以连接到由一个或多个供应商提供的OPC服务器上。在实现OPC访问接口之前,需要下载OPCfoundation提供的几个动态链接库opc_aeps.dll、opecomn_ps.dll、通用接口、opchda_ps.dll、opcproxy.dll,代理一占位,用于远程通信;如果windows系统目录下不存在actxprxy.dll文件,请运行aprxdist.exe程序;拷贝这些文件opcenum.exe、opcenum/regserver到系统盘的Winnt目录下,然后运行命令REGSVR32,来安装相应的代理DLL文件。以上动态链接库并不是所有的都必须安装,需要根据开发的服务器功能的需要决定。现仅开发数据读取规范所定义的功能。最后,OpCFoundation上为用户提供了几个接口定义文件,如opeda.idl、opccomn.idl等。对这些文件需要进一步处理。用VC提供的编译器MIDL,可以得到相应的.h头文件、.c文件和.stl库文件。在运行命令MIDLopcda.idl,在opcda.idl前,用参数/outdirectory,可以指定输出文件的目录。现需要的是opcda.idl,编译之后,需要opcda.h和opcda_i.c文件。其中opeda.h定义了服务器组件对象接口和包含的方法。opcda_i.c文件定义了各种接口的IID,IID是一个结构,是接口的唯一性标志。其中IOPCServer接口IID形式如下:extern“C”{typedefstruct_IID{unsignedlongx;unsignedshortsl;unsignedshorts2;unsignedcharc[8];}IID;TypedefIIDCLSID;constIIDIID_IOPCServer={0x39c13a4d,0x011e,0x11d0,{0x96,0x75,0x20,0xaf,0xd8,0xad,0xb3}};而opcda.h文件就是接口所有提供的方法,即接口的所有成员函数。它已经包含了客户程序要用到的方法,例如AddGroup、AddItems、Read、Write等。(1)COM库的初始化。由于客户程序要使用COM库中的函数,所以必须先调用COM函数OleInitialize()来初始化COM库,一般使用默认COM库参数,即在初始化函数InitInstance()中加入COM库函数。(2)服务器的枚举和连接。浏览计算机上已安装的OPC服务器。在系统注册表HKEY_CLASSES_ROOT下的CLSID子键下,就可以看到计算机上所有注册的组件信息,我们利用这个信息就可以找到已安装的OPC服务器。总之,建立OPC服务器端的基本开发思路为:首先,OPC客户要通过类对象创建OPCSever对象;再通过调用OPCServer对象的IOPCSever接口,根据客户需要增加多个OPCGroup对象,这样OPC客户就可以通过创建的OPCGroup对象调用IOPCItemMgt接口增加实际数量的OPCItem对象;接着,通过调用OPCGroup即对象的IOPCSyncIO或者IOPCAsyncIO2接口成员函数Read和write同步或者异步读写该组所包含的Item对象的属性,即实际数据值;最后,OPC客户在退出时释放所有的接口并依次删除OPCItem、OPCGroup和OPCServer对象。所有的接口都在服务器端实现,客户端只是创建并且调用了这些接口及
本文标题:多台高速压片机通信的OPCServer开发
链接地址:https://www.777doc.com/doc-315698 .html