OPC客户端的实现
- 格式:doc
- 大小:29.00 KB
- 文档页数:5
OPC客户端的实现OPC(OLE for Process Control)是工业自动化领域常用的通信标准之一,它为不同的硬件设备和软件系统之间提供了一种标准的通信协议。
OPC客户端是指作为OPC通信的接收方,从OPC服务器获取和处理数据的软件应用程序。
下面将介绍OPC客户端的实现过程以及需要考虑的一些关键点。
1.确定需求:首先,需要明确需求,确定OPC客户端的功能和目标。
例如,需要读取实时数据还是历史数据?需要对数据进行分析和处理吗?实时性是否有要求?这些问题的答案将直接影响OPC客户端的设计和实现。
2. 开发环境搭建:在开始OPC客户端的实现之前,需要搭建相应的开发环境。
一般来说,使用基于Windows操作系统的开发工具比较方便,例如Visual Studio。
这些工具提供了开发OPC客户端的相关库和模板,可以简化开发的过程。
3.寻找OPC服务器:在开发OPC客户端之前,需要找到一个合适的OPC服务器作为数据源。
这个OPC服务器可能是来自硬件设备厂商提供的,也可能是通过软件模拟生成的虚拟OPC服务器。
根据需求,选择合适的OPC服务器进行连接和通信。
4.建立连接:在OPC客户端中,首先要与OPC服务器建立连接。
连接可以通过OPC服务器提供的API函数来实现。
一般来说,需要提供OPC服务器的地址和相关参数进行连接。
成功建立连接后,OPC客户端就可以与OPC服务器进行通信了。
5.数据读取和写入:建立连接之后,OPC客户端可以通过API函数来读取OPC服务器的数据。
一般来说,需要提供数据项的名称或ID来获取相应的数据。
读取到的数据可以进行后续的处理和分析。
除了读取数据,OPC客户端还可以通过API函数将数据写入OPC服务器,实现对远程设备的控制。
6.错误处理和异常处理:在OPC通信中,可能会出现各种错误和异常情况。
OPC客户端需要对这些情况进行处理,以确保通信的稳定性和可靠性。
例如,网络连接中断、OPC服务器崩溃等情况都需要进行相应的错误处理和异常处理。
OPC客户端测试
1、安装MatrikonOPCExplorer.exe,傻瓜式安装一直“next”,配置完后会自动帮你把客户端的dcom设置完成(如果是主机端,打包时默认已经安装好,如果精通OPC客户端测试也可以自行测试)。
2、安装OPC Core Components Redistributable (x86).msi
3、Opc服务端dcom配置较繁琐,由提供OPC协议的企业会自行配置好,客户端相对来说就很简单了,没有繁琐的配置。
我们只需要会操作客户端就行,下面介绍的是客户端的软甲操作:(1)打开opc客户端
打开之后会提示本地没有opc server,请忽略,咱是客户端不需要opc server。
(2)右击Network Neighborhood,弹出Add/Connect Server 单击,如图
(3)填写服务端的IP,sever名自定义。
(4)填写完成后点击“OK”后会有如下提醒,点击“Yes”,并开始连接服务端opc
(5)出现如下图的列表即连接成功,标示客户端可以和服务端通讯,但是还没读取到点位。
(6)点击Matrikon.OPC.Simulation,再点击右侧“Connect”
(7)右击Matrikon.OPC.Simulation,选择Add Group
(8)Group Name可自定义,第二处选择Synchronous I/O(同步模式,目前仅支持这种模式)
(9)按下图依次操作,如果第一步没有内容可选请联系企业排查服务端配置
(10)出现如下图的情况就大功告成了。
OPC客户端的自动化OPC(OLE for Process Control)是一种用于实时数据交换的通信协议,被广泛应用于工业自动化领域。
OPC客户端是指通过OPC协议与OPC服务器进行通信的软件应用程序。
在工业自动化系统中,OPC客户端的自动化可以提高生产效率、降低运营成本,并且可以实现远程监控和控制。
本文将详细介绍OPC客户端的自动化,包括自动化的概念、实现方式、优势和应用案例等。
一、自动化的概念自动化是指利用计算机技术和控制系统,使工业过程、生产设备和设施能够在无人值守或少人值守的情况下自动运行和控制的技术和方法。
在工业自动化领域,自动化可以提高生产效率、降低运营成本、提高产品质量,并且可以实现远程监控和控制。
二、OPC客户端的自动化实现方式1. 编程实现:通过编写程序代码,使用OPC客户端开发包(如OPC Foundation提供的OPC Client Toolkit)来实现OPC客户端的自动化。
这种方式需要具备编程能力,并且需要熟悉OPC协议和相关编程接口。
2. 第三方软件实现:使用第三方软件来实现OPC客户端的自动化。
这些软件通常提供了可视化的界面和配置工具,使得用户可以通过简单的操作完成OPC客户端的自动化配置和管理。
例如,Kepware的KEPServerEX和Matrikon的OPC Explorer等软件。
三、OPC客户端的自动化优势1. 提高生产效率:自动化可以实现生产过程的自动化控制和监控,减少人工干预,提高生产效率和稳定性。
2. 降低运营成本:自动化可以减少人工操作和管理的工作量,降低运营成本。
同时,通过实时监控和预测分析,可以及时发现问题并采取措施,避免生产故障和停机造成的损失。
3. 提高产品质量:自动化可以实现对生产过程的实时监控和控制,确保产品质量的一致性和稳定性。
通过自动化的数据采集和分析,可以及时发现质量问题并采取措施进行调整和改进。
4. 实现远程监控和控制:OPC客户端的自动化可以实现远程监控和控制,使得用户可以通过互联网或局域网远程访问和管理生产过程。
OPC方案简介OPC(OLE for Process Control,过程控制的OLE)是工业自动化领域常用的通信协议,用于实现不同设备间的数据交换和控制。
本文档将介绍OPC的基本概念、工作原理和应用方案。
概述OPC是一种基于COM(Component Object Model,组件对象模型)的开放标准,提供了统一的接口和协议,使得不同供应商的设备和软件能够无缝地进行通信。
它的目的是简化工业自动化领域中数据交换和控制的复杂性,实现设备的互联互通。
OPC通常涉及两个角色:OPC客户端和OPC服务器。
OPC客户端与上层应用程序交互,向OPC服务器请求数据、发送控制命令;OPC服务器负责与设备通信,接收请求并返回数据。
OPC基本概念以下是OPC中的一些基本概念:OPC DAOPC DA(Data Access)是OPC的核心组件,用于实现数据的读取和写入。
它基于COM技术,提供了标准的接口用于获取和设置设备数据。
数据可以是实时数据、历史数据或计算得出的数据。
OPC HDAOPC HDA(Historical Data Access)扩展了OPC DA的功能,支持对历史数据的访问。
它包括数据检索、存档和查询等功能,使得用户能够方便地获取和分析历史数据。
OPC AEOPC AE(Alarm & Event)用于处理设备的报警和事件信息。
它提供了标准的接口和规范,使得用户能够方便地监控、记录和处理设备产生的报警和事件。
OPC UAOPC UA(Unified Architecture)是OPC的下一代标准,采用了面向服务的架构和现代化的通信机制,更加安全、可靠和易于使用。
它支持多平台、多操作系统,并提供了强大的安全和认证机制。
OPC工作原理OPC的工作原理可以简单描述为以下几个步骤:1.客户端应用程序向OPC服务器发送连接请求。
2.OPC服务器确认连接请求,并建立与客户端的通信连接。
3.客户端应用程序发送对设备的读写请求。
OPC通讯实现方法
OPC服务器的设置:
详见英文资料“CS3000 Installation”4.2.1
步骤1 关防火墙
步骤2 开始---运行---dcomcnfg---组件服务---计算机---我的电脑---右键属性
---com安全---将访问权限和启动和激活权限中的编辑默认值中都添加“everyone”并将其的所有权限都设为允许
步骤3 控制面板---管理工具---本地安全策略中找到网络访问“让每个人权限应
用于匿名用户”---启动该选项
OPC客户端的设置:
客户端得设置和服务器端一样。
设置完成后要保证客户端可以通过网上邻居访问服务器端可以PING通,其他操作站可以正常访问OPC服务器。
安装OPC软件
详见英文资料“Reference”—Options—M2.OPC interface
OPC 需要安装的软件
首先是在服务器端安装的OPC 软件包,先确认有没有。
下来就是安装在OPC 客户机上的软件
C:\CS3000\Program\
这2个软件在服务器上运行后他会提示你插入软盘在软盘里会生成一个安装包。
切记2个软件要分开运行,也就是用2个软盘,因为它们在你的软盘里生成的文件是同名的会覆盖。
可以拿U盘模拟A盘的方法来代替软盘但是还是要弄2次。
WINXP系统
控制面板—性能与维护—管理工具—计算机管理—磁盘管理
右键U盘—更改驱动器号和路径—更改盘符为A
WIN7系统
控制面板—系统和安全—管理工具—计算机管理—磁盘管理
右键U盘—更改驱动器号和路径—更改盘符为A
安装好后。
下来就可以用yokogawa 自带的一段小程序来试试。
C#编写OPC客户端读取OPC服务器的数据(最⾼效简洁版) List<string> ItemIds= new List<string>(){"S7-1200.0-166.BOOL","S7-1200.0-166.BYTE","S7-1200.0-166.INT","S7-1200.0-166.WORD","S7-1200.0-166.REAL",};//把需要订阅的项添加到group中。
for (int i = 0; i < ItemIds.Count; i++){OPCItem myItem = group.OPCItems.AddItem(ItemIds[i], i);}Console.ReadKey();}private static void Group_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps){//此处注意i是从1开始,因为getvalue没有0.下⾯输出分别为数据的ClientHandles(就是上⽂AddItem⽅法的第⼆个参数。
),Itemvalue 就是值,Qualities为质量,timestamps为时间。
for (int i = 1; i < NumItems+1; i++){Console.WriteLine(ClientHandles.GetValue(i).ToString() + "--" + ItemValues.GetValue(i).ToString() + "--" +Qualities.GetValue(i).ToString() + "--" + TimeStamps.GetValue(i).ToString());}}}}最终结果输出如下:这就是⼀个OPC客户端,我想应该是最简单的了。
OPC客户端的自动化OPC(OLE for Process Control)是一种用于自动化系统的通信协议,它允许不同厂家的设备和软件进行数据交换和通信。
而OPC客户端则是指通过OPC协议与OPC服务器进行通信的软件工具。
在自动化控制系统中,OPC客户端的自动化应用具有重要的意义。
自动化是现代工业发展的趋势,它能够提高生产效率、降低成本、提升产品质量。
而OPC客户端的自动化应用则是实现自动化的关键之一。
通过OPC客户端,可以实现对设备的远程监控、数据采集、参数设置等功能。
下面将从几个方面来论述OPC客户端的自动化应用。
首先,OPC客户端的自动化应用可以实现设备的远程监控。
在传统的生产过程中,人工巡检设备的状态是十分耗时且低效的。
而通过OPC客户端,可以实时获取设备的运行状态、报警信息等。
通过远程监控,可以及时发现设备故障,提前进行维修,避免生产线停机造成的损失。
同时,远程监控还可以对设备的运行情况进行分析和统计,为生产过程的优化提供依据。
其次,OPC客户端的自动化应用可以实现数据的采集和分析。
在生产过程中,设备产生的数据量庞大且复杂,人工处理难点且容易出错。
而通过OPC客户端,可以实时获取设备的数据,并进行存储和分析。
通过数据采集和分析,可以了解设备的运行状况、生产效率等指标,为生产过程的优化提供依据。
同时,还可以通过数据分析,发现潜在的问题,提前进行预警和处理,提高生产线的稳定性和可靠性。
此外,OPC客户端的自动化应用还可以实现对设备参数的设置和调整。
在生产过程中,设备的参数设置对产品质量和生产效率有着重要的影响。
而通过OPC客户端,可以实时获取设备的参数,并进行调整和优化。
通过参数的设置和调整,可以提高设备的运行效率,降低能耗,提高产品的质量和稳定性。
最后,OPC客户端的自动化应用还可以实现设备的远程控制。
在某些情况下,需要对设备进行远程操作和控制。
通过OPC客户端,可以实现对设备的远程控制,如启动、住手、调整参数等。
OPC编程汇编OPC客户端的自动化实现OPC是建立在COM,DCOM的基础商的,因此绝大多数语言都可以很好的进行开发。
在Net中开发客户端有以下几种方式:(1)使用OPCNetAPI,需要用到OPCNetAPI.dll,.dll(2)使用自动化接口,需要用到OPCDAAuto.dll(3)使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,n.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll以上开发方式所需的动态链接库可以从OPC基金会的网站上下载,一些下载项目可能需要注册,或成为基金会的成员。
不同的方式有各自的有缺点,请参见…本文使用自动化接口,语言进行开发,开发项目是无线射频(RFID)卡方面的应用,典型的如公交车,或公司考勤使用的刷卡机。
需要注意的是自动化接口存在一个“不是问题”的问题,数组下标是以1开始的,而不是传统计算机开发上的以0开始。
不知道设计者头脑是怎么想();这可能会给一些语言的开发造成问题(,没有你就是幸运的)需求:OPCDAAuto.dll或该Dll的Interop(一):客户端开发流程OPC客户端的开发主要遵循下图所示的开发流程,下面就从以下几个开发步骤进行说明(二):枚举OPC服务器列表枚举服务器主要是通过OPCServer接口的GetOPCServers方法来实现的,该方法会返回OPC服务器数组(以1为下界,上面已有说明),以下是代码段'枚举OPC服务器列表Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loa dTryGlobalOPCServer = New OPCAutomation.OPCServerClass()Dim ServerList As Object= GlobalOPCServer.GetOPCServersFor index As Short= LBound(ServerList) To UBound(ServerList) '加入控件列表中,注意这里使用LBound和UBoundcbbServerList.Items.Add(ServerList(index))NextIf cbbServerList.Items.Count > 0 ThencbbServerList.SelectedIndex = 0End IfResetControlStatus() '设置控件状态GlobalOPCServer = NothingCatch Ex As ExceptionMessageBox.Show("List OPC servers failed: "+ Ex.Message, "OPCSample", MessageBoxButtons.OK) End TryEnd Sub(三):连接OPC服务器自动化接口中连接到服务器是使用connect方法Public Overridable Sub Connect(ByVal ProgID As String, Optional ByVal Node As Object = Nothing)ProgID指服务器的ProgID,Node代表网络节点,如果是本机则放空即可。
OPCClient客户端工具使用说明
使用OPCClient客户端工具之前,首先需要确保已安装了OPC服务器软件,并且已经配置好了相应的OPC服务器。
下面是OPCClient客户端工具的使用说明:
2. 打开OPCClient客户端工具
双击桌面上的OPCClient图标,或者在开始菜单中找到OPCClient,并单击运行。
3.连接到OPC服务器
在OPCClient界面中,点击“连接”按钮,弹出连接对话框。
在对话框中输入OPC服务器的IP地址和端口号,并选择相应的连接协议(如OPC DA、OPC UA等)。
点击“确定”按钮连接到OPC服务器。
6.添加和配置报警规则
在OPCClient界面中,点击“报警”按钮,弹出报警配置对话框。
用户可以根据需要添加和配置报警规则,例如设置报警的上下限、报警延迟等参数。
配置完成后,点击“确定”按钮使报警规则生效。
7.保存和加载配置文件
在OPCClient界面中,点击“配置”菜单,可以选择保存当前配置、加载已保存的配置文件、或者创建新的配置文件。
保存配置文件可以方便用户在下次打开OPCClient时直接加载之前的配置。
8.断开与OPC服务器的连接
总结:。
python实现OPCUAclientPython是一种非常流行的编程语言,可以用来创建各种应用程序,包括OPC UA客户端。
在本文中,我将介绍如何使用Python实现一个简单的OPC UA客户端。
首先,我们需要安装必要的库。
Python提供了一个名为`opcua`的库,它可以用于创建OPC UA客户端。
你可以使用以下命令安装该库:```pip install opcua```安装完成后,我们可以开始编写代码。
首先,我们需要导入一些必要的模块和类:```pythonfrom opcua.ua import NodeId```然后,我们可以创建一个OPCUA客户端实例并连接到OPCUA服务器:```pythonclient = Client("opc.tcp://localhost:4840")client.connect```在这个例子中,我们连接到本地主机上运行的OPCUA服务器。
如果你的服务器在不同的主机上,你需要修改URL以匹配你的服务器。
连接成功后,我们可以从服务器获取节点的值:```pythonnode = client.get_node(NodeId(2, "YourNodeID"))value = node.get_valueprint("Node value:", value)```在这个例子中,我们使用`get_node`方法获取了一个名为`YourNodeID`的节点,然后使用`get_value`方法获取了该节点的值。
我们还可以使用`set_value`方法设置节点的值:```pythonnode = client.get_node(NodeId(2, "YourNodeID"))node.set_value(100)```在这个例子中,我们将节点的值设置为100。
当我们完成与服务器的交互后,我们可以断开连接:```pythonclient.disconnect```这样就完成了一个简单的OPCUA客户端的实现。
OPC客户端程序的实现宋洪俊 孙雅秀(山东科技大学 信息科学与工程学院,山东 青岛 266510)摘 要本文介绍了OPC技术的基本知识,给出了基于OPC自动化接口的客户端程序开发的实现方法。
实现了Visual Basic编写的一个OPC客户端程序与OPCMaster OPC Server之间的数据交互。
关键词OPC;COM;DCOM;OPC数据访问服务器1 引言计算机技术的飞速发展带动了工业自动化水平的提高,工控软件也取得了长足进步。
在以前的控制系统中,由于供应商提供不同的硬件设备,为了实现与现场设备数据信息的交互,应用软件开发商需要开发不同的驱动程序来连接这些不同的设备,但外接设备种类繁多,且产品在不断的升级,给用户和软件开发者带来了繁重的工作任务,一个专用的接口模块很难同时对不同设备进行访问,给系统维护带来了不便。
硬件供应商曾尝试解决这些问题,但不同的客户有不同的需求,而且数据传输时采用不同的协议,因此一直没有完整的解决方案。
OPC技术的出现很好地解决了上述问题,它提供了一套标准的数据访问机制,在硬件供应商和软件开发商之间建立了一套完整的“规范”,只要硬件开发商提供实现OPC接口的服务器,任何支持OPC接口的客户程序均可采用统一的方式对不同硬件厂商提供的设备数据进行存取;除此之外,系统应用软件之间也可以灵活地进行信息交互。
2 OPC技术概述2.1 OPC基本概念OPC(OLE for Process Control),即把OLE应用于工业控制领域,是一个工业标准,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。
基于微软的OLE(现在的Active X)、COM (部件对象模型)和DCOM (分布式部件对象模型)技术,OPC包括一整套接口、属性和方法的标准集,用于过程控制和制造业自动化系统。
COM(Component Object Model组件对象模型)是Microsoft创建并已取得广泛认可的一种组件标准,是所有OLE机制的基础。
1引言
OPC(OLE for Process Control)是一个工业标准,他是许多世界领先的自动化和软、硬件公司与微软公司合作的结晶。
管理该标准的组织是OPC基金会。
该基金会的会员单位在世界范围内超过150个,包括了世界上几乎全部的控制系统、仪器仪表和过程控制系统的主要供应商。
OPC 技术建立了一组符合工业控制要求的接口规范,将现场信号按照统一的标准与SCADA、HMI等软件无缝连接起来,同时将硬件和应用软件有效地分离开。
只要硬件开发商提供带有OPC接口的服务器,任何支持OPC接口的客户程序均可采用统一的方式对不同硬件厂商的设备进行存取,无须重复开发驱动程序。
如果希望将数据引入数据库进行统计分析,就要进行客户端开发。
2客户程序的设计方法与比较
客户程序的设计主要是指客户程序中OPC接口部分的设计。
客户程序本身可以完成很多复杂的数据处理与显示功能,但需要通过OPC接口部分访问OPC服务器,对现场数据进行存取。
开发OPC、Data、Access、Client之前,要弄清服务器的大体情况,比如需要访问的服务器是否提供自动化接口、服务器的OPC的版本等,到目前为止,OPC有1.0和2.0两个版本,两个版本的接口定义不同,2.0版是对1.0的改进,但不兼容。
OPC客户端的主要任务:
①创建服务器对象。
②建立与服务器的连接。
③浏览OPC服务器的功能。
客户程序需要创建OPC基金会提供的OPC服务器浏览器对象(OPCServerList)再通过该对象的IOPCServerList接口获得OPC服务器名称的列表;可以通过枚举注册表中包含“OPC”子键的程序名来浏览符合OPC数据存取规范的服务器,但效率较低。
④通过OPC接口读写数据。
⑤断开连接。
注意事项:
设计时需要注意OPC对象的VARAINT结构类型、引用计数问题、内存管理问题和处理错误返回代码问题。
由于一个OPC客户程序可能与多个OPC服务器相连,因此设计时也最好采用多线程,同时与多个OPC服务器程序进行交换以保证较高的通信效率。
另外客户程序中OPC接口部分如何与其它功能模块进行数据交换需要根据实际情况仔细考虑。
2.1 使用MFC的COM库函数开发OPC客户端
直接使用COM库函数开发OPC客户端,是最基本也是最灵活的方式,这种开发方式难度和工作量都大,要求开发人员对OPC规范和COM技术原理又比较深入的了解。
早些时候VisualC++编译器还不支持模板,因此,它们不得不借助非模板的其它手段来将COM功能掺入类中。
Microsoft 通过加入一些虚函数到CCmdTarget类和一些宏中解决了这个问题,使得在MFC中实现COM接口有了可能。
客户要创建一个COM对象首先应得到类厂对象,再由类厂对象创建COM对象。
为了实现类厂对象,MFC提供了一个通用的类厂COleObjectFactory,其从CCmdTarget派生,并实现了IclassFactory2接口。
在COleObjectFactory的成员中,最主要的是对象的类标识符(CLSID)和类型信息,类厂的CreateInstance成员函数利用这些信息在运行中创建COM对象。
OPCServer应用程序包括了一个Server对象、多个Group对象、多个Item对象,Server
对象实现IOPCServer接口;Group对象实现IOPCItemMgt、IOPCSyncIO接口;Item对象不实现任何接口,只是建立与数据源的连接。
数据通信是通过OPC客户对OPC服务器的多次调用完成的。
OPC客户首先要通过类厂对象创建OPCServer对象,由OPCGroup对象的IUnknown接口查询到IOPCServer接口,再通过调用这一接口根据客户需要增加多个OPCGroup对象;这样OPC客户就可以通过创建的OPCGroup对象调用IOPCItemMgt接口增加实际数量的Item对象;即创建OPCItem对象;接着通过调用OPCGroup 对象的IOPCSyncIO接口成员函数Read和Write同步读写该组所包含的Item对象的属性,即实
际数据值;最后OPC客户在退出时释放所有的接口并依次删除OPCItem、OPCGroup和OPCServer 对象。
客户端程序与OPC数据存取服务器连接的过程:
步骤1:初始化COM库。
hr=CoInitialize(NULL);
if(FAILED(HR))
{
AfxMessageBox(“CoInitialize fail!”)
return true;
}
…….
CoUninitialize();
return FALSE;
步骤2:创建Server对象(以下代码均略去变量定义、出错处理等部分)。
CLSIDFromProgID(PROGRAM_ID,&clsid);
HRESULT
hr=CoCreateInstance (clsid,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,reinterpret_cas t<void**>(&m_pUnknown));
if(FAILED(hr))
MessageBox(“can't create server”);
return TRUE;
步骤3:获得IOPCServer 接口。
m_pUnknown->QuertyIterface(IID_IOPCServer,( void**)(&m_pServer));
步骤4:添加组
m_pServer->AddGroup(“GROUP”,TURE,CLIENT_RATE,1,NULL,NULL,O,&m_hGroup,&revised UpdateRate,ID_IOPCItemMgt,(LPUNKNOWN*)(&m_pItemMgt));
步骤5:添加其他接口
m_pItemMgt->QueryInterface(IID_IOPCSyncIO, ( void**)(&m_pSyncIO));
m_pItemMgt->QueryInterface(IID_IOPCASyncIO, ( void**)(&m_pASyncIO));
利用IOPCServer接口,可以实现增加或删除组对象等管理功能;利用IOPCItemMgt接口在组中可以实现增加(IOPCItemMgt::AddItems()、删除(IOPCItemMgt::DeleteItems())及管理项等功能,利用IOPCSyncIO和IOPCASyncIO可进行数据的同步或异步读写操作,不多赘述。
2.2 通过创建包装类实现客户端
利用#import伪指令引入类型库,编辑器从类型库中读取信息并且创建包装类。
不仅可以对类型库文件(.tlb)使用#import指令,也可以对组件DLL或EXE文件,甚至支持类型库的复合文件和LoadTypeLib函数可以理解的任何其他文件格式使用#import指令。
#import指令将产生两个文件,他们位于输出路径,和类型库具有相同的名称,后缀分别为“.tlh”和“.tli”。
用#import指令引入类型库时,在StdAfx.h文件中添加:#import
“...\...\OPCServer\OPCServer.tlb”\,其他步骤代码类似COM库函数开发方式。
包装类封装了COM库函数,Visual C++客户程序通过包装类访问组件提供的属性和方法。
虽然中间多了一层,但对客户程序开发人员来说,却方便多了。
#import指令利用了一个新的类:_com_ptr_t,也被成为智能指针,是一个模板类,它封装了接口指针并提供了一些方法和重载操作符来简化指针的操作。
智能指针自动执行COM的CoCreateInstance和QuertyIterface、AddRef 和Release函数。
要实现异常处理,可使用try/catch块。
在catch块中,异常对象类型为
_com_error对象。
_com_error类封装了HERSULT错误代码和IerrorInfo接口提供的相关环境信
息。
用#import伪指令,使得在Visual C++中使用代码组件和在VBA中一样方便,而且不需要在工程中对组件进行源代码维护。
2.3 利用第三方的动态连接库或工具包快速开发OPC客户端
互联网上有一些OPC客户端和服务器的开发工具包(ToolKit),利用这些工具包可以快速地开发OPC程序,但这些工具包大多需要付费。
Factory Soft还开发了比较通用的服务器和客户端的快速开发工具,文献[4]介绍了把它用于先进控制软件平台的开发和应用情况,但这个开发工具价格昂贵,不适合中小型系统的自主开发。
也有一些是免费的客户端程序和可产生仿真数据的服务器程序以及一些测试评价工具。
比如Wintech OPC Server Client Develop Kit (1.0),其源代码可从或 /index.htm 下载,解压缩后需注意四个文件:WTclient.dll、Wtclient lib文件、WTclientAPI.h、Wtclient Word文档。
WTclientAPI.h 定义了部分API函数,这些API函数的实现以DLL的形式封装起来,详见WTclient DLL User。