机房360首页
当前位置:首页 » 技术解构 » 深度研究与探讨OPC数据访问服务器

深度研究与探讨OPC数据访问服务器

来源:机房360 作者:linux编辑 更新时间:2011-6-9 9:23:46

摘要:在这篇文章中设计的OPC数据访问服务器符合OPC规范,实现了对数据的实时读写,具有实用价值。总之,有了OPC规范,控制系统软件可以高效、稳定地对硬件设备进行数据存取, 系统应用软件之间也可以灵活地进行信息交互,极大地提高了控制系统的互操作性和适应性。

本文实现的OPC数据访问服务器具有数据采集的功能,提供符合OPC规范的定制接口。主要由OPC服务器对象、OPC组对象、OPC项对象和针对CAN(ControllerAreaNetwork控制器局域网)通讯卡编写的I/O动态链接库(DLL)组成,采用如图1所示的结构。
  
  OPC服务器对象是客户端与服务器交互的首要对象。客户端通过访问服务器对象的接口函数与之进行交互。一个服务器对象里可以设置一个以上的组对象。OPC服务器对象的主要功能是:①创建和管理OPC组对象;②管理服务器内部的状态信息;③将服务器的错误代码翻译成描述性语句;④浏览服务器内部的数据组织结构。
  
  OPC组对象用于组织管理服务器内部的实时数据信息,它是OPC项对象的集合。正因为有了组对象,OPC应用程序就可以成批地对所需要的数据进行访问,也可以以组为单位启动或停止数据访问。其主要功能是:①管理组对象内部的状态信息;②创建和管理项对象;③OPC服务器内部的实时数据存取服务(同步或异步方式)。
  
  OPC服务器对象和组对象支持的接口由OPC规范定义,但并未规定具体如何实现,需要开发人员自己完成。
  
  OPC项则与现场设备中的模块相对应,它包含数据项的值(value)、品质(quality)和时间戳(timestamp)。
  
  I/ODLL是针对具体硬件设备开发的驱动程序,实现从现场设备读取数据的功能。
  
  2.2实现OPC数据访问服务器的主要步骤:
  
  2.2.1获得并注册OPC标准组件
  
  根据COM规范,COM服务器可分为进程内服务器、本地服务器和远程服务器。后两种服务器与客户程序运行在不同的进程空间,属于进程外服务器。为了实现进程间通讯,需要用到代理/存根模块。代理/存根模块由接口描述语言(IDL)直接生成。OPC基金会为每种OPC服务器提供了相应的代理/存根动态链接库,这些文件可以在OPC基金会的网站(www.opcfoundation.org)上免费下载。
  
  注意,设计OPC服务器时可以在OPC对象上增加接口以满足特定的要求,但不能修改标准的OPCIDL文件或相应的proxy/stubDLL。新增的接口描述应定义在独立的IDL文件中,并由该文件生成独立的代理/存根模块来完成接口的调用工作。
  
  组件的注册将在后面介绍。
  
  2.2.2编写OPC服务器代码
  
  首先定义0PC数据服务器的名称(ProgID)和类标识(CLSID),实现COM库的初始化功能和0PC数据服务器类厂对象的接口功能。然后实现OPC对象和数据缓冲区。接下来针对具体硬件编写I/ODLL,实现数据的实时读取。这项工作是十分繁重的,要求开发人员具有良好的COM编程知识,具体过程限于篇幅不能详述,这里指出两点引起注意:
  
  ⑴全局唯一标识符(GUID)
  
  GUID是为每个COM对象提供的十六字节标识数。COM类至少有两个GUID:类标识(CLSID)和接口标识(IID)。CLSID用于标识COM类,登记在Windows注册表中,包含指向包括COM类的DLL或EXE组件的路径。IID用于标识该类的接口,被应用程序用来查询和触发该类的方法,也登记在注册表中。由于对象类是由GUID标识的,所以必须保证它们的唯一性,才能使最终用户在使用由不同软件商开发的组件时不会发生冲突。
  
  可以使用宏DEFINE_GUID(name,long,word,word,word,byte1,…,byte8)
  
  其中name是标识数的名字,其余参数是实际的ID码。类标识的命名惯例是CLSID_ClassName,而接口ID的命名惯例是IID_InterfaceName。
  
  

本文地址:http://www.jifang360.com/news/201169/n828622394.html 网友评论: 阅读次数:
版权声明:凡本站原创文章,未经授权,禁止转载,否则追究法律责任。
相关评论
正在加载评论列表...
评论表单加载中...
  • 我要分享
更多
推荐图片