引言
可编程控制器PLC(Programmable LogicController)具有可靠性高、通用性强、编程简单、体积小、安装维护方便等优点,在工业控制中得到了广泛应用。
在工业控制系统中,可能存在不同厂家生产的、多种型号的可编程控制器PLC。为了便于系统集成,一般采用基于OPC(OLE for ProcessContr01)规范的接口进行数据交换,为此,需要设计、开发面向PLC的OPC服务器。
1 OPC服务器开发工具
面向PLC的OPC服务器开发需要完成以下两个方面工作:一方面,需要根据PLC的通信协议实现上位机服务器软件与PLC的数据交换;另一方面,需要合理设计服务器软件的架构与接口,使之符合OPC技术规范。
由于OPC服务器是基于COM技术的,这就要求程序设计人员必须非常熟悉COM技术,而精通COM技术是有一定难度的,因此,OPC服务器的源码级开发是相当复杂的,一般由专业的软件公司进行开发。
为了便于OPC技术的推广和应用,国内外许多单位推出了OPC服务器快速开发工具包。这种工具包将微软公司的OLE/COM/DCOM技术和OPC的技术细节进行了隐藏,使用户开发工作集中在数据采集和处理任务上,从而简化了OPC服务器的开发。
基于工具包的OPC服务器开发,主要任务是熟悉工具包的API接口函数,通过调用工具包的API接口函数实现OPC服务器的功能,为应用软件提供符合OPC规范的接口。
2 OPC服务器设计与开发
2.1软件设计
基于工具包的面向PLC的OPC服务器开发的首要任务是设计OPC对象与接口、OPC服务器界面,然后进行OPC服务器与PLC的通信设计,以实现OPC服务器与PLC的数据交换,具体的软件架构如图1所示。
图1 面向PLC的OPC服务器软件架构
OPC对象与接口是OPC服务器与客户端程序进行交互的部分。首先应进行OPC服务器对象设计,即定义服务器名称ProgID和类标识符CLSID。服务器名称ProgID可以自由确定;类标识符CLSID是一个128字节的数据,是用来标识一个COM对象的,可用微软自带的工具GUIDGEN.EXE快速确定。然后根据OPC项的管理要求设计OPC组对象,如果OPC项较少,可以直接利用工具包默认的一个OPC组对象。最后确定OPC项对象,一个OPC项可以对应于PLC内存中的若干寄存器,一般根据PLC的具体控制要求进行设计,并确定可读项与可写项。
OPC服务器与PLC的通信模块是面向PLC的OPC服务器的重要组成部分,OPC可读项的数据就是通过该模块采集PLC中相应寄存器的信息获得的;OPC可写项的数据就是通过该模块写入PLC中相应寄存器的。
服务器程序界面可以为用户提供友好的交互平台,便于观察数据项的变化,以及对数据项进行管理和设置。
2.2软件开发
在采用工具包开发面向PLC的OPC服务器时,主要是利用工具包提供的API接口函数进行如下的操作:
1)工具包动态库初始化
OPC服务器开始运行时,应进行工具包动态库初始化,以及设置OPC服务器的最高刷新频率,这是OPC服务器得以运行的基础。
2)OPC服务器信息设置
主要是设置服务器的运行状态、版本号、厂商信息等。
3)OPC项的创建与删除
在OPC服务器开始运行时创建OPC项,在OPC服务器运行结束时删除OPC项。
4)OPC项数据的更新
OPC服务器需要周期地更新OPC项的值、质量和时间戳,即将数据存储区中的数据更新到相应的OPC项。当客户端程序请求写数据时,OPC运行库调用写回调函数,并利用服务器与PLC的通信模块将数据写入PLC中的相应寄存器中;当客户请求读数据时,OPC运行库调用读回调函数,返回相应的OPC项的数据。
服务器与PLC的通信模块是基于PLC的通信接口方式进行开发的。例如串口通信,其是根据PLC的通信协议采用串口通信控件或API函数编程来实现数据交换的。
5)回调函数注册
工具包中有三个回调函数:读回调函数、写回调函数和断开回函数。只有注册了这三个回调函数后,OPC服务器才能和客户端程序按照OPC技术规范进行正常通信。
6)OPC服务器注册和注销
OPC服务器安装到计算机后,首先应将服务器名称ProgID和类标识符CLSID等信息进行注册。在OPC服务器注册后,OPC客户端程序才能在本机或局域网上检索到该OPC服务器,从而与该OPC服务器建立连接与数据交换。注销是将计算机系统中的OPC服务器信息清除。