DELPHI下OPC客户端开发入门

一、通信拓扑

根据实际工作的内容,需要利用OPC作为媒介实现delphi程序与组态王软件的通信。不同于通常的思路,将组态王作为数据的提供者,直接采集plc等控制器的数据,然后用delphi做显示,我这次的工作是刚好相反的,因为原有的一些工业控制现场已经采用delphi编写了各自的显示程序,但是现在需要将四个工业现场的数据传输到一个总控的地方作为一个总得显示端,而这个显示端要用组态王开发,因此,就相当于delphi为组态王提供数据。因此,肯定需要频繁的使用delphi给组态王发送数据。最初考虑的是利用delphi作为服务器端,组态王作为客户端,这样有利于数据的传输,但是,经过一段时间的研究,发现开发delphi的OPC服务器不是易事,需要花费很多的时间,为了快速的进行项目开发,我同样采用delphi作为客户端,组态王作为服务器来进行开发,同样实现了数据的双向传输。具体的通信拓扑如图一所示。

图一

一、资料准备

    实际开发过程中所用到的一些资料如下:

1、  delphi 7 集成开发环境

2、  组态王软件

3、  OPCDll

4、  OPC客户化接口标准说明文档

5、  Delphi opc接口实现程序包

 

说明:

    OPCDll包含名为opc_aeps.dll,opccomn_ps.dll,OPCDAAuto.dll,opchda_ps.dll,opcproxy.dll的五个dll文件,在使用之间需要进行注册。不过实际上,在安装完组态王软件以后,这几个文件就已经被注册了,因此我在开发的时候并没有单独进行注册,

    OPC客户化接口说明文档是进行客户化OPC开发必备的参考资料,由OPC基金会提供。我打包了一下OPC客户化接口以及自动化接口的说明文档,有需要下载的请访问http://download.csdn.net/detail/hyd10000/3718832

    Delphi opc接口实现程序包是前人编写的,我整理了一下编写客户端需要的一些源文件,包括:

OPC_AE.pas

OPCCOMN.pas

OPCDA.pas

OPCerror.pas

OPCHDA.pas

OPCSEC.pas

OPCtypes.pas

OPCutils.pas

    其中,OPCutils.pas以上是对OPC提供的接口函数的声明,OPCutils.pas文件实现了编写客户端基本的一些函数,例如连接服务器,为服务器添加组,为组添加条目等等功能。其实编写通信的程序最重要的就是读和写,弄清楚了这两个怎么进行,通信程序的关键就已经掌握了。由于OPCutils.pas中只有同步写数据的函数,在数据发送的时候会产生阻塞,在有的场合下是不适用的,因此我改进了一下该文件,添加了一个异步写数据的函数,其实并没有做太多工作,只是认真的学习了一下OPC这一套东西而已。

二、OPC基础

    这里我并不像摘抄各网站对OPC的介绍,没有什么意义,就随便说说自己对OPC这个东西的粗浅认识。它其实上只是一种数据打包的方法,并不能叫做一种通信协议,OPC进行数据传输实际上是通过TCP或者UDP之类的协议,而且是可以选择的。它的优势在于,它通过树形的目录将数据较好的进行了组织,在客户端和服务器通信的过程中,开发者不用考虑数据包是怎么构成的,通信是怎么实现的,只需要直接利用数据变量就可以直接进行读或者写,很方便。

    OPC服务器将数据进行分组(group),有公共的组,也有普通的组。组这个概念其实就是顾名思义,它的目的就是将一些数据组成在一个包,便于用户区别一些不同的数据,比如,我可以按照数据类型定义一个组,组名叫做整数,那么开发的时候就很容易知道这个组下面的变量是整数。当然,分组的依据可以有很多。有了组以后,我们向组里面添加数据,也就是所谓的items。Item其实就是对应具体的数据了,item ID就是数据的变量,直接利用这个ID就可进行数据的读写操作了。这就是OPC的数据组织形式,通过参考接口标准可以发现,这个数据组织形式会有hierarchical和flat的区别,具体参见说明文档。

    进行OPC的客户端开发可以遵从以下的顺序进行,它跟普通的socket开发其实差别也并不大。首先进行初始化,其次就行数据库的连接,然后为服务器添加组,然后为每个组添加数据。做完这些操作以后,就可以进行数据的读写了。下面进行详细的介绍。

三、OPC客户端的开发

1、  OPC客户端的初始化

由于OPC是基于com组件的,所以其实它的初始化就是com的初始化,可以参考如下的代码:

 1 CoInitializeSecurity(
2 nil, // points to security descriptor
3 -1, // count of entries in asAuthSvc
4 nil, //
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值