您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 可编程控制器OPC数据服务器的开发
可编程控制器OPC数据服务器的开发摘要:本文分析了PLC控制系统集成中存在的一些问题,就此提出了利用OPC技术可以很好的解决此问题。然后对OPC数据服务器的结构进行了总体的介绍,分析了FX系列PLC的串口通信标准并利用WTOPCSvr.DLL工具包开发FX系列可编程控制器的OPC数据服务器。经测试表明:该OPC服务器符合OPC规范,简化了PLC控制系统的集成。关键词:PLC、OPC服务器、串行通信、WTOPCSvr.DLL工具包1.前言PLC应用面广、功能强大、使用方便,已经成为当代工业自动化的主要支柱之一。但由于人机交互界面方面的不足。PLC在工控领域中一般作为下位机使用,用个人计算机或工业计算机作为上位机,来完成数据处理、存储、系统状态显示,以实现系统的实时监控。而且在计算机上,不同的语言对驱动程序的接口有不同的要求。这样应用软件需要为相同的PLC设备编写大量的驱动程序,这种程序可重用程度低,不符合软件工程的发展趋势。还有在同一时刻,两个客户应用一般不能对同一个设备进行数据读写,因为它们拥有不同的、相互独立的驱动程序,同时对同一个设备进行操作,可能会引起存取冲突,甚至导致系统崩溃。OPC标准的发布,为此提供了一种良好的解决方案。2.OPC技术简介OPC(OLEforProcessControl)即用在过程控制领域的OLE,它是由OPC基金会制定的一套基于COM/DCOM技术为基础,采用客户/服务器模型制定的一种工业控制领域的开放式标准。OPC在工业控制设备与应用软件之间建立了统一的软件接口标准。主要解决监控程序与其数据源的交互问题。通过采用OPC技术,工业控制系统硬件与软件的配置可以由图1表示。各个厂商只要提供符合OPC规范的服务器就可以一次性的解决设备的驱动程序问题。该系统的修改和升级都是非常方便的。而且OPC客户端不必关心底层是什么硬件,硬件有什么特性以及与硬件如何进行通讯交换。只要遵循OPC数据接口协议,就能够从不同的硬件厂商提供的OPC数据服务器中取得数据,从而实现数据的灵活配置和多种系统的真正集成,提高了系统的开放性和可互操作性。图1利用OPC的控制系统构成3.可编程控制器OPC数据服务器的设计本文实现的OPC服务器需要完成数据采集的功能,提供符合OPC数据存取规范的接口。采用如图2所示的结构进行设计,各个部分功能相对独立又相互协作,形成一个统一的整体。图2OPC数据服务器的整体结构OPC数据服务器大致可以分为三种不同的功能模块:服务器界面模块、与硬件设备通信模块和OPC标准接口实现模块。由于OPC数据服务器既要对底层硬件进行读写操作,又要通过OPC接口与客户程序进行交互,所以采用多线程模型,以保证数据存取的效率。同时为了解决共享数据的保护问题,应使用线程的同步和互斥等技术,以保证同一时刻只有一个线程对数据进行操作。OPC服务器对象和组对象是真正的COM对象,能够将各自的接口暴露给客户程序。OPC服务器对象维护有关服务器的信息并作为OPC组对象的包容器,可以动态地创建或释放组对象;而OPC组对象除了维护有关自身的信息外,还提供包容OPC项的机制,从逻辑上实现对OPC项的管理;OPC项则代表与OPC服务器中定义的数据项的连接,数据项包括值(Value)、品质(Quality)和时间戳(TimeStamp)3个属性,数据值以VARIANT形式表示以及与硬件相关的属性。这些OPC对象在WTOPCSvr.DLL中已经进行了封装,用户只需调用相应的函数即可实现。数据存储区中存放着OPC服务器定义的数据项,数据项包括数据值、数据品质和时间戳3个基本属性以及与硬件相关的属性。数据存储区是服务器的中心,需要动态管理和维护数据项,并与其它部分进行数据交互。数据存储区的设计可利用C++标准模板库(STL)中的包容器,通过包容器管理OPC服务器中的数据项,也可定义一个固定长度的数组(这样会造成内存的浪费),这里我们使用MFC中的链表模板类CObArray进行数据存取。服务器程序界面便于用户观察数据项的变化,而且还可以管理数据项和设置数据项的属性。也可以把对硬件的初始化和对硬件的监控和诊断显示做在界面上,以方便用户操作。三菱PLC驱动程序通过串行通信与PLC进行读写操作,从PLC取得的数据被OPC服务器“翻译”后,才交给最终的客户程序,此时不同的客户程序只要按照OPC标准就可以对PLC里的数据进行操作。3.三菱PLC驱动程序的实现三菱FX系列PLC与计算机之间的通信是通过交换命令帧和应答帧的方式实现的,当PLC接收到上位机的命令时自动返回应答帧。帧格式如图3、4所示,其中和校验值是将命令码STX-ETX之间的字符的ASCII码(十六进制数)相加,取得所得和的最低二位数。STX和ETX分别表示该字符帧的起始标起和结束标志。控制代码ENQPLC站号PLC标识号命令报文等待时间数据字符校验和代码控制代码R/LF图3计算机向PLC发送的命令报文控制代码STXPLC站号PLC标识号字符区ETX校验和CR/LF图4PLC的应答报文本文中采用了一个专门针对串行通信的CSerial类,它由MuMegaTech-nologies公司提供的一个VisualC++类,我们只要理解CSerial类种的几个成员函数,就能很方便地实现串行通信了。以下是该类定义:classCSerial{public:CSerial();~CSerial();BOOLOpen(intnPort,intnBaud,intnParity,intnByteSize,intnStopBits);//打开串口通讯端口BOOLClose(void);//关闭串口intReadData(void*,int);//从端口接收缓冲区读入数据intSendData(constchar*,int);//把数据从缓冲区写入串口intReadDataWaiting(void);BOOLIsOpened(void){return(m_bOpened);}//检测串口是否已打开protected:BOOLWriteCommByte(unsignedchar);HANDLEm_hIDComDev;OVERLAPPEDm_OverlappedRead,m_OverlappedWrite;BOOLm_bOpened;};4.可编程控制器OPC数据服务器的开发OPC数据服务器的开发可以采用两种方式:根据COM/DCOM原理编码开发和利用开发工具开发。直接应用COM开发这种开发方式具有自主知识产权,对于服务器的功能可以全面的掌握,而且开发比较灵活,但是对开发者技术水平要求较高,程序执行效率和稳定性与开发者的编程技巧有很大的关系。而快速开发工具一般是以动态链接库(DLL)形式提供给用户,用户只要按照动态链接库中提供的应用编程接口(API)即可完成OPC数据服务器的开发,这种开发工具使用相对简单,虽然缺少一些灵活性,但己能够满足多数用户的开发需求。本文采用WTOPCSvr.DLL动态链接库来开发可编程控制器OPC数据服务器,该动态链接库实现了OPC规范,将COM、DCOM以及OPC接口的底层实现封装在动态连接库中,提供API函数供用户使用。在VC6.0开发环境中利用WTOPCSvr.DLL提供的API函数开发OPC服务器主要有如下的几个步骤:1)服务器注册与注销。OPC服务器只有在系统注册后才能被OPC客户端检索到。而注销则是将系统中的OPC服务器信息清除。UpdateRegistry(BYTE*pCLSID_Svr,LPCSTRName,LPCSTRDescr,LPCSTRExePath);//服务器注册UnregisterServer(BYTE*pCLSID_Svr,LPCSTRName);//服务器信息注销2)初始化WTOPCSvr.DLL动态链接库BOOLInitWTOPCsvr(BYTE*pCLSID_Svr,UINTServerRate)这个函数实现对DCOM的初始化和创建OPC服务器对象。其中参数pCLSID_Svr是OPC服务器的类标识—用于OPC客户连接服务器;参数ServerRate定义了客户的数据刷新速率,其单位是毫秒。如果函数调用成功则返回TRUE,否则返回FALSE。3)OPC项的操作完成了服务器初始化工作,设置了回调函数,此时只需要添加OPC数据项.OPC客户就可以检索和使用OPC数据项了。数据变量是用户提供给OPC客户的数据访问点,用户程序需要维护数据的变化,根据现场数据的变化及时更新。每创建一个OPC数据项,WTOPCSvr.DLL会在服务器应用程序中返回一个相应指针以便应用程序对该数据项的应用和更新。CreateTag(LPCSTRName,VARIANTValue,WORDInitialQuality,BOOLIsWritable);//创建数据项函数RemoveTag(HANDLETagHandle);//删除数据项UpdateTag(HANDLETagHandle,VARIANTValue,WORDQuality);//数据变量的更新。4)调用返回定义:为了完成OPC客户程序对现场设备中参数的修改,用户程序需要提供相应的函数指针,供WTOPCSvr.DLL工具调用。客户可以在函数中完成设备参数的修改工作。明确地定义了DLL用于返回给服务器程序的调用返回的具体含义,以实现客户应用与服务器应用之间的数据交换。EnableUnknownItemNotification(UNKNOWNITEMPROClpCallback);//这个函数的返回值表示一个客户请求了一个没有定义或是己经被暂停刷新的标签,但无论客户请求的标签是否是己定义的标签,这个函数都定义了一个从DLL返回的调用返回。当连接建立后,服务器应用可以使用这个调用返回对动态创建的标签进行操作。5)关闭OPC服务器。WTOPCSvr.DLL提供了必要的函数以实现完全关闭用户服务。在关闭OPCServer之前,需要完成以下事情:若仍有客户端连接存在,则发送断开连接请求;清除在OPCServer添加的OPC数据项。至此,OPCServer可以完全退出。相关函数包括:RequestDisconnect();//请求断开连接5.测试及结论利用WINCC6.0及组太王6.52作为OPC客户端对所开发的OPC数据服务器进行了测试,结果表明,该OPC数据服务器符合OPC标准规范,使PLC控制系统易于集成,降低了系统集成的开发难度。而且采用WTOPCSvr.DLL动态链接库开发OPC数据服务器,开发者无须掌握ATL、COM/DCOM,也无须了解OPC技术的细节,使服务器的开发变得相对简单,容易。本文创新点:1在按照OPC规范的基础上,详细分析了OPC数据服务器总体结构的设计。2介绍了利用WTOPCSvr.DLL动态链接库开发OPC数据服务器的大致步骤,使OPC服务器的开发变得相对简单容易。参考文献:[1]OPCOverviewVersion,[2]熊望枝,OPC数据采集服务器的研究与设计,微计算机信息,2007年第23卷第3-1期[3]朱耀春,OPC数据存取服务器的开发与研究,华北电力大学(北京),2003.12[4]李现勇.VisualC++串口通信技术与工程实践人民邹电出版社,2002年5月[5]WinTECH.WTOPCSvrDLLUser’sGuide.
本文标题:可编程控制器OPC数据服务器的开发
链接地址:https://www.777doc.com/doc-2618317 .html