用Delphi开发OPC客户端工具的方法研究[1]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

王海瑞 钟家玉

(昆明理工大学信息及自动化学院,昆明650093)

摘要: 本文通过介绍OPC技术的工作原理,结合OPC客户端的工作机制,给出OPC客户端的开发方法及在的Delphi的具体实现,提出了OPC客户端开发工具的设计方案,并实现了OPC客户端开发工具的接口函数,可以使OPC客户端开发者可以轻松的开发OPC客户程序。

关键词: OPC、OPC客户端、开发工具、COM组件

Abstract This article provides the way of exploring OPC data access server and its fulfillment in Delphi via the introduction of the working principles of OPC technology combined with the working mechanism of OPC data access server. In addition, it sets forth its designing scheme and the interface functions of OPC toolkit at the same time in order to facilitate the developers of OPC data access server.

Key Words: OPC、OPC Client、Develop Toolkit Component object Model

0、引言

OPC(OLE for Process Control)是工业自动化过程中数据交换的一个标准,OPC的出现为基于Windows平台的组态软件和基于现场控制的控制器之间的数据交换提供了确实可行的方法。在OPC出现之前,组态软件为了能够存取现场控制设备的数据,组态软件必须提供每一种相连控制设备的通讯驱动程序,由于不同厂家控制设备使用的通讯协议不同,组态软件必须为每一个控制设备开发专用的通讯DRIVER。目前流行的现场控制设备种类繁多,且产品不断升级换代,往往给组态软件的开发带来了巨大的经济压力和工作负担。而不断开发通讯DRIVER也不能满足实际工作的需要,硬件开发商和组态软件开发商急切需要一种具有高效性、可靠性、开放性、可互操作性的即插即用的设备驱动程序。在这样的大背景下,OPC工业标准应运而生,OPC工业标准的出现把开发访问设备接口的任务放在硬件开发商或专门从事软件开发的第三方厂家,以OPC服务器的形式提供给,组态软件可以按照OPC服务器提供的接口访问现场控制设备的数据,避免了不停开发通讯DRIVER的问题,提高了系统的开放性和可互操作性。

1、OPC技术标准

OPC技术是以Microsoft公司的OLE/COM/DCOM技术为基础的通讯标准.OLE/COM是一种客户/服务器模式,具有语言无关性、代码重用性、易于集成性等优点.如图l所示,OPC服务器中的代码确定了服务器所存取的设备、数据和数据项的命名规则和服务器存取数据的细节,不管现场设备以何种形式存在,客户都以统一的方式去访问服务器,从而保证软件对客户的透明性,客户应用程序仅需使用统一的标准接口和服务器通信,而并不需要知道底层的实现细节。通过OPC服务器,OPC客户既可以直接读写现场控制设备的I/O数据,也可操作SCADA、DCS等系统的端口变量(只要该系统提供OPC服务)。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

任何一个OPC客户可连接到由多个OPC服务器上,每个OPC服务器也为多个OPC客户服务。只要应用软件符合OPC技术标准,不需要做任何修改就能访问OPC服务器提供的数据。OPC技术标准包括客户/服务器通讯使用的一整套的接口、属性和方法。OPC技术支持分布式应用和异构环境下软件的无缝连接和软件的互操作性,使现场控制设备层、自动化层以及组态软件层之间的协同工作成为了可能.并且提供了工业自动化应用领域的统一数据传输平台,使异构系统之间的数据交换更为方便。

2、OPC的对象模型

OPC逻辑对象模型包括3类对象:OPC server对象、OPC group对象、OPC item对象,每类对象都包括一系列接口。

OPC Server对象提供了一种访问数据的方法,它通过Iopcserver 、Opcbrowser、Ipersistfile向客户提供接口。主要功能为:1)创建和管理OPC Group对象;2)管理服务器内部的状态信息;3)将服务器的错误代码翻译成描述性语句;4)浏览OPC服务器内部的数据组织结构。从OPC Server对象的功能可以看出,OPC Server对象面向OPC服务器的技术细节,基本独立于实时数据源,可以统一实现,其中数据的组织结构与数据源属性与具体数据源有关,需要从用户处获取信息。OPC Server对象主要实现IUnknownIOPC Server接口,OPC客户通过OPC服务器的接口与OPC对象进行通信.IOPCServer接口为OPC客户提供了方便有效操作OPC组的方法。

OPC Group对象的主要功能表现为:1)管理OPC Group对象的内部状态信息;2)创建和管理Items对象。3)OPC服务器内部的实时数据存取服务(同步与异步方式)。从OPC Group对象的功能可以看出,该对象面向OPC服务器中的数据存取信息,对实时数据源的依赖性很强,需要从用户数据源处获取信息。OPC Group提供了客户程序组织数据的手段.每个组中都可以定义一个或多个OPC Item。组有两种类型:公共组(Public)和局部组(local),公共组可以被多个客户共享,而局部组只能被一个客户使用。OPC组中有以下几个主要属性:1)Name :组的名字 2)Active:组的激活状态标志 3)Update Rate OPC:服务器向客户程序提交数据变化的刷新速率4)Percent Dead band:数据死区,即能引起数据变化的最小数值百分比。

OPC ITEM 是非COM对象,在OPC标准中用来描述实时数据,是客户端不可见的对象。代表了与服务器中的数据的连接,它并不是数据源,而仅仅是与数据源的连接。每个项都有以下主要属性:1) Active项的激活状态2)Value项的数值3)类型为VARIANT;4)Quality项的品质,5)代表数值的可信度,类型为SHORT;6)TimeStamp时间戳,代表数据的存取时间。

OPC技术基础包含了两套接口:客户化接口(Custom Interface)和自动化接口(Automation Interface)。客户化接口是一个OPC服务器所必须实现的接口,它描述了OPC组件对象的接口和其中的方法,适合C++和PASCAL语言设计,并可实现最佳运行性能的客户应用程序。客户化接口没有项对象,它对项的操作都是通过包容此项的组对象进行的。自动化接口是可选接口,它提供的是一个自动配置和存取过程控制数据。只要是支持C0M对象的编程语言都能进行OPC客户端的开发。OPC提供了客户化接口和自动化接口,要进行客户端开发实际上就是对这两套接口的声明和调用。自动化接口封装了C0M底层的许多实现,使开发者能比较轻松的进行数据访问。

3、OPC客户端的工作流程

由于OPC的结构是一个典型的CLIENT/SERVER结构,其技术基础是基于COM/DCOM技术的,所以OPC客户端的开发与COM/DCOM编程大体相同。从OPC的工作机制可以知道,OPC客户端的开发必须按下面的步骤处理。

1,   客户端程序必须对DCOM进行初始化设置,以保证OPC服务器端的回调函数不会被堵塞。

2,   在正确初始化DCOM的基础上,创建客户化接口(Custom Interface),自动化接口(Automation Interface)一般由已注册在系统中的OPCProxy.dll文件自动处理。完成OPC Server的创建。

3,   在正确创建了客户化接口(Custom Interface)后,客户端程序可以为OPC Server对象创建一个OPC组对象(OPC GROUP)。

4,  在正确创建了OPC组对象后,客户端程序可以为OPC GROUP对象创建多个OPC ITEM对象。

5,  为自动化接口实现两个方法:OndataChange和Onasync_WriteComplete,在数据发生变化或异步写操作完成后可被调用。

6,   可以实现对OPC ITEM 数据的读写操作。

7,   在客户端工作结束时,清除OPC服务器对象中的GROUP对象,系统将会自动释放。

4、OPC客户端开发工具的实现

OPC客户端开发工具的目的是将开发OPC客户端的技术细节封装起来,使客户的开发工作集中在自己特定的数据处理任务上来。目前大多数小型控制系统的数据处理及显示程序都由用户自己编写,而OPC技术在国际工业控制领域中的使用已经相当广泛,大多数硬件厂家度提供了OPC数据服务器,部分可以直接使用,而工控组态软件虽然支持OPC技术,但这些组态软件的价格十分昂贵,对于小型工控系统的成本过高,如果能提供OPC客户端开发工具,小型工控的成本将会大幅下降。所以有必要研究OPC客户端开发工具的开发方法。

OPC客户端开发工具通常可以分以两种方式存在,一种以源代码形式存在,另一种以二进制的形式存在(动态链接库或组件形式)。以源代码形式存在的OPC客户端开发工具一般包括OPC客户端实现的全部源代码。这种形式使用起来对于程序设计来说比较灵活,用户可以更具自己的需要进行开发,但是源代码往往是某一种语言的源代码,用户在开发OPC客户端程序时一般要求使用与源代码相同的开发语言,开发起来对用户的要求很高,源代码对于语言级的开发通用性低。而以二进制的形式存在(动态链接库或组件形式)的OPC客户端开发工具的通用性强,对开发环境的要求较小,可以在任意支持动态链接库或组件形式的环境下使用,开发者只要使用动态连接库的输出函数或组件的接口函数即可完成OPC客户端程序的开发,这种方法使用简单,缺少灵活性,但通常能够满足多数用户的开发需求。

根据OPC客户端的工作流程,利用Delphi开发工具作者开发了一个完整的OPC客户端开发工具,该工具分别以动态链接库和组件形式存在,以供不同的开发者使用。不论是以动态链接库形式还是以组件形式存在,它们的接口函数是一致的。

1)   OPC客户端初始化函数InitializeServer的功能是在使用开发工具之前,必须使用初使化函数对开发工具进行初使化,提供OPC服务器刷新率、OPC服务器的程序信息(如CLSID)、服务器的版本信息等。

2)   OPC客户端添加组对象函数ServerAddGroup的功能是在初始化函数成功之后,调用此函数完成客户端在现有OPC服务器下完成对组对象的添加和命名,以便后面的函数使用。

3)   OPC客户端添加组内ITEM 对象函数GroupAddItem的功能是在ServerAddGroup函数执行之后在添加的组对象内添加ITEM对象,以保证OPC客户端能利用ReadOPCGroupItemValue函数和WriteOPCGroupItemValue函数完成对OPC服务器端变量的读写。

4)   OPC客户端删除组内ITEM 对象函数GroupRemoveItem的功能是在客户端不需要对OPC服务器端的变量进行读写后,需要利用此函数删除组对象的ITEM对象,此函数的执行必须是在GroupAddItem执行成功之后才能执行。

5)   OPC客户端通过IDATAOBJECT实现回调函数GroupAdviseTime的功能是建立一个由IDataObject接口实现的OPC客户端的组对象建立回调功能,使OPC服务器端的数据发生变化时,会自动通知OPC客户端。该功能非常重要,是完成实时数据交换的保证。

6)   OPC客户端删除已建立的由IDATAOBJECT接口实现回调函数GroupUnAdvise的功能是结束由GroupAdviseTime建立的回调功能。

7)   OPC客户端通过IConnectionPointContainer接口实现回调函数GroupAdvise2的功能是建立一个由IConnectionPointContainer 接口实现的的OPC客户端的组对象建立回调功能,当OPC服务器端的数据发生变化时,会自动通知OPC客户端。该功能非常重要,是完成实时数据交换的保证。

8)   OPC客户端删除已建立的由IConnectionPointContainer接口实现回调函数GroupUnadvise2的功能是结束由GroupAdvise2函数建立的回调功能。

9)   OPC客户端读取OPC服务器变量函数ReadOPCGroupItemValue的功能是从指定的OPC服务器中读取指定的ITEM对象值。通过此函数,用户可以及时获得OPC服务器中的数据。

10)OPC客户端设定OPC服务器变量函数WriteOPCGroupItemValue的功能是将OPC客户端的数据用异步方式写入到OPC服务器中去。通过此函数,用户可以及时修改OPC服务器中的数据。

11)OPC客户端工作结束函数DestroyServer的功能是将由InitializeServer函数初始化的服务器释放,服务器与客户端的连结便断开。

5、结束语

OPC开发工具的出现,方便了工业控制软件中的设计与集成,缩短了产品的开发周期。优秀的OPC开发工具将是国内工业控制领域中必不可少的工具软件。同时OPC标准的本身也在不断的改进,其范围也越来越广。OPC基金会现在已经颁布了数据访问和报警事件标准,其它的OPC标准,如历史数据OPC标准,也正在酝酿之中。OPC基金会发布的与微软公司BizTalk体系兼容的XML(Extensible Markup Laguage)纲要,将Internet技术应用在工业控制中。相信在不久的将来,OPC技术及标准将应用于更加广泛的领域,OPC开发工具也将向着多元化发展。OPC技术必将赋予现代工业控制软件更强的生命活力。

  参考文献

  1 Al Chisholm, A Technical Overview of the OPC Data Access Interface, ISA EXPO 98

  2 OPC Foundation,OPC Data Access Custom Interface Standard ,Version 2.0。

  3 OPC Foundation,OPC Data Access Automation Interface Standard ,Version 2.0。

  4 OPC Foundation, Overview, Version 1.0

The research and method of OPC client development tool using <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />DELPHI

(KunmingUniversity of Science and Technology,Kunming 650093)

WangHairui Zhong Jiayu

 

王海瑞 男 1969年8月生于山西省和顺县,副教授,在读博士,主要从事计算机控制技术的研究和垃圾焚烧炉模糊神经控制的研究与应用。

联系电话: 13888385529 或 0871-5115891

联系地址:昆明理工大学信息自动化学院计算机系

联系人 :王海瑞

邮政编码:650093

Email:hrwang88@public.km.yn.cn

[1] 云南省自然科学基金资助项目(项目编号:2001F0025M)

用Delphi开发OPC客户端工具的方法研究相关推荐

  1. Delphi开发OPC

    1 引言     在现代工业控制系统中网络数据通讯已成为不可或缺的一部分,网络数据通讯的实现对工控实时监控系统有着至关重要的意义.MCGS(Monitor and Control Generated ...

  2. C#开发OPC客户端

    背景:做一个系统要对接OPC,所以要学习一下OPC客户端的开发. 解决:OPC实际上是为了给工业控制系统应用程序之间提供一种接口规范.作为使用最多的对接技术,OPC具有它的优势,硬件供应商只需提供符合 ...

  3. 物联网+阿里云+小程序开发的一些工具和方法总结

    1.阿里云与微信小程序的连接: https://www.cnblogs.com/zhupingqi/p/13353408.html 2.阿里云上面还有一个生活物联网平台,配合阿里云的IOT studi ...

  4. PC软件开发技术之二:用C#开发基于自动化接口的OPC客户端

    OPC全称是Object Linking and Embedding(OLE) for Process Control,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁.OPC作为一 ...

  5. OPC通讯开发简介——基于WTOPCSVR的OPC服务器端和基于WTCLIENT的OPC客户端开发

    OPC通讯开发简介--基于WTOPCSVR的OPC服务器端和基于WTCLIENT的OPC客户端开发 说明 一.OPC技术背景及介绍 二.OPC通讯的流程(OPC经典架构) 三.OPC标准官方文件部分变 ...

  6. 从零搭建本地PLC仿真环境:SIMATIC_PLCSIM_Advanced、Portal、KEPServer、OPCUA客户端工具

    背景 近期在为一个工业控制领域的上位机数采项目进行技术预研,苦于手头没有PLC(Programmable Logic Controller,可编程逻辑控制器)硬件设备,为了快速.完整地体验下从 PLC ...

  7. (OPC Client .NET 开发类库)网上很多网友都有提过,.NET开发OPC Client不外乎下面三种方法...

    1. 背景 OPC Data Access 规范是基于COM/DCOM定义的,因此大多数的OPC DA Server和client都是基于C++开发的,因为C++对COM/DCOM有最好的支持.现在, ...

  8. OPC DA客户端工具Opc quick client使用

    OPC DA客户端工具Opc quick client使用 什么是OPC OPC是工业控制和生产自动化领域中使用的硬件和软件的接口标准,以便有效地在应用和过程控制设备之间读写数据.O代表OLE(对象链 ...

  9. C#开发OPC DA客户端的服务器状态处理

    C#开发OPC DA客户端,最简单的方法是使用OpcRcw.Comn.dll,OpcRcw.Da.dll封装的API进行.OPC基金会的网站上,也可以下载到这两个库的原始文件DataAccess.cs ...

最新文章

  1. 详解亚马逊:物流为何是电商命脉
  2. MAC OS下使用OpenSSL生成私钥和公钥的方法
  3. 娃哈哈信息部李钒助阵FBS2017 共探食品饮料信息化之路
  4. 学习EF4的一些基础参考资料
  5. RuntimeError: The full_object_detection must use the iBUG 300W 68 point face landmark style.
  6. 详解虚函数的实现过程之多重继承(3)
  7. Python 3.9.1 安装教程
  8. jQuery对HTML进行添加元素
  9. 11.14PMP试题每日一题
  10. 水滴石穿C语言之static辨析
  11. 投诉索尼中国:欺骗消费!敲诈消费者!
  12. 网络协议和Netty
  13. C语言宏定义,内置宏的用法
  14. 中国男性的私密数据大赏,女生勿入!
  15. 网上很多NV21数据直接使用BitmapFactory的代码是错误的
  16. 计算机桌面搜狗输入图标不见了怎么办,win7搜狗输入法不见了怎么办
  17. matlab求条件概率密度_数值优化方法—迭代法amp;终止条件
  18. python舞蹈链数独游戏
  19. 360与QQ大战,谁之过?
  20. 如何通过电脑cmd查看android设备日志

热门文章

  1. JAVA窗口sin值_大厂经典笔试题—LeetCode03无重复字符的最长子串(滑动窗口)
  2. python word转txt_Python办公自动化| word 表格转excel
  3. html5掉落效果,HTML5 菜单掉落动效
  4. 导出目录结构_Selenium Webdriver 3.X源码分析之核心目录结构
  5. 通过正则表达式分句提取中文内容
  6. 动效引擎_汇众教育 | 高级引擎视效包装设计
  7. Akka入门(二)Akka的Actor模型如何满足现代分布式系统需求
  8. springmvc返回数据中文乱码
  9. 2021-04-21--中标麒麟--yum源修改
  10. SqlServer中除了sql和bak你还可以使用mdf文件来进行数据库的添加和分离