VB开发OPC客户端程序的步骤与实现.
手把手教您用VB编一个OPC客户端程序33页PPT
序
21、没有人陪你走一辈子,所以你要 适应孤 独,没 有人会 帮你一 辈子, 所以你 要奋斗 一生。 22、当眼泪流尽的时候,留下的应该 是坚强 。 23、要改变命运,首先改变自己。
24、勇气很有理由被当作人类德性之 首,因 为这种 德性保 证了所 有其余 的德性 。--温 斯顿. 丘吉尔 。 25、梯子的梯阶从来不是用来搁脚的 ,它只 是让人 们的脚 放上一 段时间 ,以便 让别一 只脚能不会再掉进坑里。——黑格尔 32、希望的灯一旦熄灭,生活刹那间变成了一片黑暗。——普列姆昌德 33、希望是人生的乳母。——科策布 34、形成天才的决定因素应该是勤奋。——郭沫若 35、学到很多东西的诀窍,就是一下子不要学很多。——洛克
vb与欧姆龙OPC服务器编程实例(读取PLC100个内存的vb源代码)
Option ExplicitOption Base 1 ' All OPC Automation Arrays start with 1Dim MyOPCServer As OPCServer ' OPCServer ObjectDim MyGroups As OPCGroups ' OPCGroups Collection ObjectDim WithEvents MyGroup As OPCGroup ' OPCGroup ObjectDim MyItems As OPCItems ' OPCItems Collection ObjectDim MyItemServerHandles() As Long ' Server Handles for ItemsDim MyTID As Long ' Transaction ID for asynchronous calls Private Sub Command1_Click()Dim Errors() As LongCall MyItems.Remove(100, MyItemServerHandles, Errors)MyGroups.RemoveAllSet MyGroup = NothingSet MyGroups = NothingMyOPCServer.DisconnectSet MyOPCServer = NothingEnd SubPrivate Sub Command2_Click()PFAsyncWriteCommandEnd SubPrivate Sub Command3_Click()Form_LoadEnd SubPrivate Sub Form_Load()MyTID = 1Set MyOPCServer = New OPCServerCall MyOPCServer.Connect("OMRON.OPC.2")Set MyGroups = MyOPCServer.OPCGroupsMyGroups.DefaultGroupUpdateRate = 500MyGroups.DefaultGroupIsActive = TrueSet MyGroup = MyGroups.Add("Group1")MyGroup.IsSubscribed = TrueMyGroup.IsActive = TrueMyGroup.UpdateRate = 500Dim ErrorFlag As BooleanDim ItemObj As OPCItemDim ItemIDs(100) As StringDim ItemClientHandles(100) As LongDim Errors() As LongErrorFlag = FalseSet MyItems = MyGroup.OPCItemsDim m As IntegerFor m = 0 To 3Text1(m).ForeColor = vbRedText1(m).FontSize = 15Text2(m).ForeColor = vbRedText2(m).FontSize = 15NextFor m = 4 To 99Text1(m).ForeColor = vbBlueText1(m).FontSize = 15NextFor m = 1 To 100ItemIDs(m) = "Device.Group1.Tag" & CStr(m)ItemClientHandles(m) = mNextCall MyItems.AddItems(100, ItemIDs, ItemClientHandles, MyItemServerHandles, Errors)End SubPrivate Sub MyGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)On Error GoTo ErrorHandler '订阅方式回馈信息存储Dim i As LongFor i = 1 To NumItemsIf ClientHandles(i) > 0 And ClientHandles(i) < 101 ThenIf Qualities(i) = 192 Thendata1(ClientHandles(i)) = ItemValues(i)Else' MsgBox GetQualityText(Qualities(i))End IfElseMsgBox "DataChange Item " + Str$(i) + " has invalid Client Handle ", vbCriticalEnd IfNextExit SubErrorHandler:MsgBox Err.Description + Chr(13) + "OnDataChange", vbCritical, "ERROR"End SubPrivate Sub Timer1_Timer()Dim i As IntegerFor i = 1 To 100Text1(i - 1).Text = data1(i)Next iEnd SubPublic Sub PFAsyncWriteCommand() '异步写入命令On Error GoTo ErrorHandlerDim i, j As LongDim Values(4) As VariantDim Errors() As LongDim CID As LongDim AsyncHandles(4) As LongFor j = 1 To 4AsyncHandles(j) = MyItemServerHandles(j)Values(j) = Text2(j - 1).TextNextMyTID = MyTID + 1Call MyGroup.AsyncWrite(4, AsyncHandles, Values, Errors, MyTID, CID)For i = 1 To 4If Not Errors(i) = 0 Then MsgBox "Item " + Str$(i) + " FAILED. Error Code = " + Str$(Errors(i)), vbCritical NextExit SubErrorHandler:MsgBox Err.Description + Chr(13) + "Writing Items Asyncronous", vbCritical, "ERROR"End SubPrivate Sub MyGroup_AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long)On Error GoTo ErrorHandler '异步写命令回馈信息Dim i As LongFor i = 1 To NumItemsIf Not Errors(i) = 0 Then MsgBox "AsyncWriteComplete Item Clienthandle = " + Str$(ClientHandles(i)) + " FAILED. Error Code = " + Str$(Errors(i)), vbCriticalNextExit SubErrorHandler:MsgBox Err.Description + Chr(13) + "Async Write Complete", vbCritical, "ERROR"End Sub。
OPC实验指导书
实验名称OPC客户端的编程一、实验目的:通过实际操作进一步了解OPC的各种概念,掌握OPC客户端的编写方法。
并对微软的DCOM 有一定的了解,要求通过合适的DCOM配置,使客户端能够读取网络上服务器中的数据。
二、实验内容:1)利用VB语言编写出一个简单的OPC客户端程序,要求这个客户端能够读取服务器中的数据,并显示出来。
2)配置DCOM,使客户端能够能过DCOM读取另一台服务器上的数据。
三、实验步骤:(1)建立一个Visual Basic工程1)启动Visual Basic,新建一个Visual Basic工程。
选择[Standard EXE]作为新建工程的类型。
图3-1 Visual Basic 工程的建立2)设置OPC包装DLL因为在新建的Visual Basic工程OPC包装DLL还没有被注册,必须用下述方法对OPC包装DLL 进行注册。
设置方法:1.从Visual Basic菜单里选择[Project]-[References]。
2.在[Available References]表示中,选择对应OPC包装DLL的文件名。
这里我们选择[OPCAutomation 2.0]。
图3-2 引用的设置(2)建立一个OPC对象在Visual Basic里,是以对象的单位对OPC服务器进行访问。
OPC自动化接口是由以下四种对象所定义。
OPC服务器OPC组(OPC组集合)OPC标签(OPC标签集合)OPC浏览器这里只说明OPC服务器,OPC组以及OPC标签对象的使用方法。
具体的来说,先连接一个特定的OPC服务器,然后建立OPC组,最后添加OPC标签。
1)变量声明参考图3-3所示的示范代码,先对OPC对象变量进行声明。
变量的数据类型应该指定为对象型。
这些对象变量最好在窗体代码的(General)部分声明。
因为在(General)部分声明的变量,可以在窗体的任何方法的代码内引用。
图3-3 OPC对象变量的声明有关定义OPC对象的声明及其说明列于表3-1表3-1 OPC对象变量的声明2)连接OPC服务器和建立OPC组下面说明如何连接OPC服务器和建立OPC组。
VB6.0编程客户端访问组态王OPC服务器的实现方法
武 汉船舶 职业 技术 学 院学报
21 0 1年第 3期
VB . 6 0编 程 客 户 端 访 问 组 态 王 OP 服 务 器 的 实 现 方 法 C
邹 治 军
( 南京 化 工 职 业 技 术 学 院信 息 技 术 系 , 苏 南 京 2 0 4 ) 江 1 0 8
摘 要 本 文 介 绍 了 O C规 范 , 过 实 例 介 绍 了基 于 VB . P 通 6 0编 程 客 户 端 程 序 访 问组 态 王 OP C服 务 器 的 实 现 方 法 , 有 具
1 OP 规 范 C
工业 控 制系 统包 含 大 量 的 现 场设 备 , 些 设 这 备 通常包 括来 自不 同 厂 商 的各 种 类 型 的仪 器 、 仪 表、L P C和 其他智 能设 备 。不 同 的厂 商 提供 的协 议各 异 , 因此要 与 这些设 备交 换数据 , 要编 写不 需
程 序 , 过组 态王 的 O C接 口来 访 问组态 王数 据 通 P
库 中的变 量和 变量 的域 。
Vi a B sc 一 种 可 视 化 的 、 向对 象 和 采 s l ai 是 u 面
用事 件驱 动方 式 的结 构 化 高 级 程 序设 计 语 言 , 常 用 于开 发 W id ws环 境 下 的各 类 应 用 程 序 。 no ]
Kig i 组 态 王 ) 北 京 亚控 公 司 特 别 为 n ve w( 是
中小 型项 目推 出的用 于监 视与控 制 自动化 设备 和
生 产过 程 的组 态 软 件 。组 态 王 因其 易 学 易 用 、 功 能齐全 、 物美 价廉 的特 点 , 目前 已广泛 应用 于 国 内
中 小 型 生 产 过 程 控 制 系 统 中 。 Kig i . 3的 n ve w6 5
基于VB的OPC服务器的设计与实现
基于VB的OPC服务器的设计与实现任巍曦,梁伟平,李立(华北电力大学控制与计算机工程学院,河北保定071003)摘要 :由于源码级的OPC服务器开发过程非常复杂,为了达到缩短OPC服务器开发周期,采用快速开发工具GKOPCServer.dll,对OPC服务器进行了设计与实现。
通过测试软件的测试,得出了OPC服务器的正确性。
分析了采用开发工具包开发OPC服务器的优点以及软件的结构和主要模块的功能。
结果表明:快速开发工具包提高了OPC服务器的开发效率,给开发人员提供了极大的方便。
关键词:OPC;开发工具包; 数据通信;接口中图分类号: TP319 文献标识码:AThe Design and realization of OPC server Based on VBRen Weixi, Liang Weiping, Li Li(School of Control and Computer Engineering,North China Electric Power University,Baoding 071003,China)Abstract:As the exploitation of source OPC server is too complex, to reach the purpose of shortening the period of developing OPC server, using OPC server development tool-GKOPCServer.dll, design and realize of OPC server. And the functional correctness of OPC server was tested by test software. The advantages of OPC server developed by development toolkit and the software structure and the main function of modules were analyzed. The results illustrate that the development efficiency of OPC server is improved as using the development toolkit, and it gives convenience to developers.Key words: OPC; development toolkit; data communication; interface0引言目前,工控领域的OPC(OLE for Process Control,用于过程控制的对象链接和嵌入)服务器的开发一般可分为快速开发方式和直接开发方式。
[信息与通信]手把手教您用VB编一个OPC客户端程序
OPC
Agenda
OPC - Review of the Basics OPC - Terminology OPC & VB 101 - Automation Wrapper & Object Model Building Your VB Client - Read data - 7 easy steps with code from start to finish Housekeeping Handles Handles Everywhere - how the server and client correlate the data each is managing in your program Writing Data Future ideas to consider New developments since original presentation in 10/99 Resources for future learning
Copyright Software Toolbox, 1999,2000,2001 All Rights Reserved Worldwide. Software Toolbox is a registered trademark of Software Toolbox, Inc.
VB
OPC Your VB Program with the Automation Wrapper object included in it
• OPC Server - a piece of software supporting the OPC specification - an OPC Data Access Server is a driver that handles connectivity to PLCs or other automation hardware • OPC Item - A single tag or data point managed by the OPC server - i.e. one data point in a PLC • OPC Group - a user defined grouping of OPC items. Created by the OPC client as a way of organizing data items around logical process areas or equipment. • Collection - a grouping of objects of the same data type for example, each OPC server has an OPC items collection containing one software object for each OPC item.
6VB6.0开发WinCC的OPC客户机实例
VB6.0开发WinCC的OPC客户机实例[ 来源:机电论文| 类别:技术| 时间:2009-4-8 9:42:34 ] [字体:大中小]关键词:OPC VB6.0 WinCC上位机WinCC是西门子公司在自动化领域采用最先进的技术与微软公司在共同开发的居于世界领先地位的工控软件。
WinCC即WINDOWS CONTROL CENTER (视窗控制中心)。
WinCC是一个功能强大的全面开放的监控系统,既可以用来完成小规模的简单的过程监控应用,也可以用来完成复杂的应用。
在任何情况下WinCC都可以生成漂亮而便捷的人机对话接口,使操作员能够清晰地管理和优化生产过程。
它集成的OPC(OLE for process control)服务器使得过程数据可由其它应用程序(OPC客户机)访问。
WinCC在安装时提供了OPC的客户端控件: Siemens OPC DAAutomation 2.0( SOPCDAAuto.dll), 在WINCC的帮助中,有Siemens OPC DAAutomation 2.0使用的简略帮助,但说得不很详细,我在使用VB6.0开发WinCC的OPC客户机中碰到不少问题,现一并写出来,与大家共享。
希望起到抛砖引玉,举一反三的作用。
一、开发实例背景:我厂包装机BE电气改造后,由原来了单片机、直流调试板、温度控制板等控制改为带有通讯端口PLC、变频器、温控仪等控制,上位机监控软件为WinCC。
在控制系统中,变频器、温控仪的控制信号通过串口、OPC客户机接入上位机WinCC,报警信号接入PLC。
其硬件组态结构如图一OPC开发要求:①通过WinCC建立内部变量Tag(1),Tag(2),Tag(3),Tag(4)……;在视图窗口建立相应了I/O输入输出域。
通过更改WinCC中I/O域的值,来设定或更改变频器、温控仪等的参数。
②通过VB开发了串口驱动程序,读取变频器、温控仪等的参数,通过OPC控件把值传递给WinCC中的I/O域。
使用VB语言编程OPC通信技术
使用VB语言编程OPC通信技术传统的PLC上位通信程序由于各品牌PLC有着不同的通信协议与接口方式,设计前需要花费一定时间熟悉各品牌的通信协议与特性,设计难度很大。
并且设计出的程序在更换PLC品牌后根本无法兼容,造成程序的灵活性较差。
OPC 技术由于其兼容广泛、开发简单的特点,让上位程序设计起来简单灵活。
本文通过讲解如何使用VB语言编写OPC上位机程序,使广大电气设计人员了解到该技术实现PLC上位通信是非常简单的。
标签:PLC;上位机;OPC技术OPC技术是(OLE for process control)的简称,是基于微软Windows系统的OLE/COM技术开发的一项应用技术。
COM技术提供了一个标准化的平台,各个设备厂商基于这个平台开发符合标准化COM接口的PLC产品。
OPC技术基于这一平台,整合各品牌PLC产品COM组件接口,输出一个标准化数据接口。
这样无论应用程序开发人员使用何种语言,只需要调用这个数据接口,即可访问到所连接的PLC数据,而不用考虑PLC的品牌,以及底层协议。
标准化的OPC系统包括4个部分:(1)OPC服务器:为上位机与PLC提供过程数据。
(2)OPC代理占位DLL:为VB或者VBA开发的OPC应用程序提供OPC 服务器接口数据格式交换服务。
(3)OPC自动化包装DLL:提供OPC服务器的自动化接口变换服务。
VB 或者VBA開发的上位机应用程序需要通过该接口访问OPC服务器。
(4)OPC应用程序:设计人员使用VB等语言设计的提供给用户的人机界面程序,含有用户要求的所有功能。
上述中OPC服务器、OPC占位代理DLL、OPC自动化包装DLL这三部分是由第三方开发的DLL文件。
本文以KEPWARE公司的OPC软件产品为例,介绍如何编程VB与OPC数据通讯。
在KEPWARE中所连接的设备以通道(CHANNEL)的形式描述,每连接一个设备就使用一个CHANNEL,同时每一个CHANNEL对应OPC服务器一个OPC组(下面会介绍到)。
VB开发OPC客户端程序的步骤与实现
VB开发OPC客户端程序的步骤与实现(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图5-3所示。
只有引用OPCDAAuoto.DLL后,在程序中才能创建服务器对象,然后进行一系列的操作。
(2)在弹出的引用窗口里单击“浏览(B)…”按钮,弹出添加引用窗口,选择OPCDAAuoto.DLL文件。
(3)在引用窗口里的OPC Automation 2.0前面打钩,按“确定”按钮。
(4)定义全局变量,这样可以在窗体的任何方法的代码内应用。
变量类型应该指定为对象型。
这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。
由于OPC自动化接口的数组的索引要求必须从1开始,而系统默认是从0开始,为了避免错误最好在代码的最初加上“Option Base 1”语句。
为了使对象可以处理事件,必须将objTestGrp和objServer的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。
Option ExplicitOption Base 1Dim WithEventsobjServer As OPCServerDim objGroups As OPCGroupsDim WithEventsobjTestGrp As OPCGroupDim objItems As OPCItems(5)连接OPC服务器和建立OPC?br>考虑到代码的可反复使用性,采用子程序进行编程。
Sub Connect(strProgID As String, Optional strNode As String)If objServer Is Nothing Then' 建立一个OPC服务器对象Set objServer = New OPCServerEnd If服务器状态ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。
学习用VB写OPC CLIENT
Private Sub Command1_Click()Dim AllOPCServers As VariantDim i As IntegerSet AnOPCServer = New OPCServerList1.ClearAllOPCServers = AnOPCServer.GetOPCServersFor i = LBound(AllOPCServers) To UBound(AllOPCServers)List1.AddItem AllOPCServers(i)Next iSet AnOPCServer = NothingEnd Sub试了一下果然可以。
点击list中某一个opcserver,然后调用opcserver对象的connect方法就可以连接上去了。
网上的例子里面是做了个示范,标签名用了个循环赋值,For I=1To17strItemIDs(I)="Server.Group.TAG"&IlClientHandles(I)=INext’添加OPC项Call objItems.AddItems(17,strItemIDs,lClientHandles,lServerHandles,lErrors)但是例子里面也承认“OPC客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的OPC标签。
”那么,实际上来说,要么用browse标签的方法去一个一个选择标签,要么事先在程序里面指定好各个标签名字了(当然可以用一个类似与ini配置文件的方法存储好要各个标签的名字,这个以后再说吧)。
从实际应用考虑,我觉得browse的方法没有必要,因为一般来说直接确定好哪些标签就行了,而且如果用参数文件的话也算比较容易后期进行配置(前提应该是tag名字要写正确)。
Items有个additems的方法,用于添加标签,参数比较多,认真看了下例子,还是有点技巧的,从第二个参数开始都是数组类型的参数,而前两个数组必须指定好长度,后面三个数组则无须指定长度,很怪啊,反正vb认可就ok了,难怪例子里面这么定义的几个数组。
VB代码OPC server
利用visual basic所开发的opc客户端应用程序主要采用自动化通信接口和opc服务器程序实施通信。
而opc基金会提供的opc 自动化接口 opcdaauto.dll动态链接库集成了所有用于对opc服务器进行访问的对象、属性和方法,为利用visual basic开发opc 客户端应用程序提供了极大方便。
程序设计时,opc客户程序应当首先生成opc服务器支持的opc对象,然后再使用opc对象支持的属性和方法,实现对opc服务器的操作和访问。
opc数据访问对象主要包括opc服务器(opcserver)、opc组集合(opcgroups)、opc组(opcgroup)、opc标签集合(opcitems)、opc标签(opcitem)、opc浏览器(opcbrowser)等几个部分。
程序设计时,要首先在visual basic环境下选择对opc automation 2.0接口的引用,此时,opc对象会被自动添加到正在开发的工程项目中,然后,再根据需要建立这些对象的实例并利用其属性和方法来实现对opc服务器的访问。
对opc服务器的访问主要包括声明opc对象实例、连接opc server、添加标签变量、读写opc服务器(同步/异步)、断开连接等几个步骤。
opc对象实例的声明主要包括对opc服务器、opc组集合、opc 组、opc标签集合、opc服务器句柄的声明及程序所需要的其它实例的声明。
opc客户端和opc server的连接主要靠调用opc服务器对象实例的connect方法函数来完成,例如,连接本地计算机dassidirect和rslinx opc server 的代码分别为connect ("archestra.dassidirect.1")和connect("rslinx opc server")连接网络远程计算机(ip地址为10.144.45.45)上dassidirect 和rslinx opc server 的代码分别为connect ("archestra.dassidirect.1", "\10.144.45.45")和connect ("rslinx opc server", "\10.144.45.45")需要说明的是当进行远程opc连接时,必须在远程计算机上运行dcomcnfg程序,并启动该计算机opc服务器的dcom服务。
OPC客户程序(VB篇——异步)
OPC客户程序(VB篇——异步)建立如下窗体:引用如下:代码如下:Option ExplicitOption Base 1Const WRITEASYNC_ID = 1Const READASYNC_ID = 2Const REFRESHASYNC_ID = 3'----------------------------------------------------------------------------' Interface Objects'----------------------------------------------------------------------------Public WithEvents ServerObj As OPCServerPublic WithEvents GroupObj As OPCGroupDim ItemObj1 As OPCItemDim ItemObj2 As OPCItemDim Serverhandle(2) As LongPrivate Sub chkGroupActive_Click()If chkGroupActive = 1 ThenGroupObj.IsActive = 1ElseGroupObj.IsActive = 0End IfEnd SubPrivate Sub Command_Start_Click()Dim OutText As StringOn Error GoTo ErrorHandlerCommand_Start.Enabled = FalseCommand_Read.Enabled = TrueCommand_Write.Enabled = TrueCommand_Exit.Enabled = True chkGroupActive.Enabled = TrueOutText = "连接OPC服务器"Set ServerObj = New OPCServerServerObj.Connect ("XXXSERVER")OutText = "添加组"Set GroupObj = ServerObj.OPCGroups.Add("Group") GroupObj.IsSubscribed = TruechkGroupActive_ClickOutText = "添加ITEM"Set ItemObj1 = GroupObj.OPCItems.AddItem("XXXITEM1", 1) Set ItemObj2 = GroupObj.OPCItems.AddItem("XXXITEM2", 2)Serverhandle(1) = ItemObj1.ServerhandleServerhandle(2) = ItemObj2.ServerhandleExit SubErrorHandler:MsgBox Err.Description + Chr(13) + _OutText, vbCritical, "ERROR"End SubPrivate Sub Command_Read_Click() '异步读Dim OutText As StringDim myValue As VariantDim myQuality As VariantDim myTimeStamp As VariantDim ClientID As LongDim ServerID As LongDim ErrorNr() As LongDim ErrorString As StringOutText = "读值"ClientID = READASYNC_IDGroupObj.AsyncRead 1, Serverhandle, ErrorNr, ClientID, ServerIDIf ErrorNr(1) <> 0 ThenErrorString = ServerObj.GetErrorString(ErrorNr(1))MsgBox ErrorString, vbCritical, "Error AsyncRead()"End IfErase ErrorNrExit SubErrorHandler:MsgBox Err.Description + Chr(13) + _OutText, vbCritical, "ERROR"End SubPrivate Sub Command_Write_Click() '异步写Dim OutText As StringDim Serverhandles(1) As LongDim MyValues(1) As VariantDim ErrorNr() As LongDim ErrorString As StringDim Cancel_id As LongOutText = "Writing Value"MyValues(1) = Edit_WriteValGroupObj.AsyncWrite 1, Serverhandle, MyValues, ErrorNr, WRITEASYNC_ID, Cancel_idIf ErrorNr(1) <> 0 ThenErrorString = ServerObj.GetErrorString(ErrorNr(1))MsgBox ErrorString, vbCritical, "Error AsyncRead()"End IfErase ErrorNrExit SubErrorHandler:MsgBox Err.Description + Chr(13) + _OutText, vbCritical, "ERROR"End SubPrivate Sub Command_Exit_Click() '停止Dim OutText As StringOn Error GoTo ErrorHandlerCommand_Start.Enabled = TrueCommand_Read.Enabled = FalseCommand_Write.Enabled = FalseCommand_Exit.Enabled = FalsechkGroupActive.Enabled = FalseOutText = "Removing Objects"Set ItemObj1 = NothingSet ItemObj2 = NothingServerObj.OPCGroups.RemoveAllSet GroupObj = NothingServerObj.DisconnectSet ServerObj = NothingExit SubErrorHandler:MsgBox Err.Description + Chr(13) + _OutText, vbCritical, "ERROR"End Sub'异步读回调Private Sub GroupObj_AsyncReadComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date, Errors() As Long)Dim ErrorString As StringIf (TransactionID = READASYNC_ID) ThenIf Errors(1) = 0 ThenEdit_ReadVal = ItemValues(1)Edit_ReadQu = GetQualityText(Qualities(1))Edit_ReadTS = TimeStamps(1)ElseErrorString = ServerObj.GetErrorString(Errors(1))MsgBox ErrorString, vbCritical, "Error AsyncReadComplete()"End IfEnd IfEnd Sub'异步写回调Private Sub GroupObj_AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long)Dim ErrorString As StringIf (TransactionID = WRITEASYNC_ID) ThenIf Errors(1) = 0 ThenEdit_WriteRes = ServerObj.GetErrorString(Errors(1))ElseErrorString = ServerObj.GetErrorString(Errors(1))MsgBox ErrorString, vbCritical, "Error AsyncWriteComplete()"End IfEnd IfEnd Sub'回调Private Sub GroupObj_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() AsDate)Dim i As LongFor i = 1 To NumItemsEdit_OnDataVal(i - 1) = ItemValues(i)Edit_OnDataQu(i - 1) = GetQualityT ext(Qualities(i)) Edit_OnDataTS(i - 1) = TimeStamps(i)Next iEnd SubPrivate Function GetQualityText(Quality) As StringSelect Case QualityCase 0: GetQualityText = "BAD"Case 64: GetQualityText = "UNCERTAIN"Case 192: GetQualityText = "GOOD"Case 8: GetQualityText = "NOT_CONNECTED"Case 13: GetQualityText = "DEVICE_FAILURE"Case 16: GetQualityText = "SENSOR_FAILURE"Case 20: GetQualityText = "LAST_KNOWN"Case 24: GetQualityText = "COMM_FAILURE"Case 28: GetQualityText = "OUT_OF_SERVICE"Case 132: GetQualityText = "LAST_USABLE"Case 144: GetQualityText = "SENSOR_CAL"Case 148: GetQualityText = "EGU_EXCEEDED"Case 152: GetQualityText = "SUB_NORMAL" Case 216: GetQualityText = "LOCAL_OVERRIDE"Case Else: GetQualityText = "UNKNOWN ERROR" End SelectEnd Function。
基于VB的OPC客户端软件的设计与实现 (2)
收稿日期:2010-12-21作者简介:王绪彪(1983-),在读硕士研究生,主要从事工业控制网络研究工作。
基于VB 的OPC 客户端软件的设计与实现王绪彪,张 望,江丹玲(福州大学自动化系 福州,350108)摘 要:为解决控制领域软硬件之间数据通信困难的问题,提高实时数据访问的性能,本文对OPC数据存取规范进行了深入研究,重点分析了自动化接口标准,结合Visual Basic语言相对容易,开发周期短等特点,故采用VisualBasic作为开发语言,设计并实现了基于VB的OPC客户端应用软件。
通过测试,OPC客户端软件取得了不错的通信效果。
关键词:OPC数据访问规范;自动化接口;客户端软件Abstract: With the purpose to solve the difficulties of data communication between software and hardware in control field, and improve the function of real-time data accessing, this paper mainly studies on the OPC data access specification and then analyses deeply the standard of the automation interface. Combing with Visual Basic that is is relatively easy , short development cycle and so on.SO the paper use Visual Basic as devepment language, design and implement OPC client application software based on Visual Basic.Through the test, OPC client software achieved good communication effect.Key words: OPC data access specification ; Automation interface ; Client application中图分类号:TP391 文献标识码:B 文章编号:1001-9227(2011)02-0046-040 引 言传统方式开发的监控软件系统,由于不具备开放性,工业控制软件缺乏统一的工业标准,致使不同厂家提供的软硬件之间进行通信存在很大的困难,一方面,由于各厂家提供的软件对控制系统硬件操作的设备驱动程序接口不同,软件开发者需针对不同的硬件开发相应的驱动程序。
VC和VB开发OPC客户端程序开发步骤
VC和VB开发OPC客户端程序开发步骤VC++和VB开发OPC客户端程序开发步骤双击自动滚屏发布者:admin发布时间:2009-11-18阅读:168次OPC客户端程序就是一种COM客户端程序,实现COM客户端程序编程模型需要六个基本步骤。
根据所在的程序设计环境或应用框架,有些步骤也许可以由编译程序自动实现。
在C++中,接口是通过指针引用的,而在Visual Basic中使用的默认接口。
(1)初始化COM库。
在C++中完成此功能的是调用COM库API(应用程序编程接口)函数CoInitialize或CoInitialzeEx。
Visual Basic中可以自动进行初始化。
(2)获得初始接口的指针。
在C++中,可以通过调用CoCreateInstance(用于本地)或CoCreateInstanceEx(用于远程)来获得接口指针。
在Visual Basic中,可以使用操作符New或CreateObject来获得接口引用。
(3)通过接口指针可以调用该接口的方法。
(4)如果要调用其它接口的方法,可以执行QueryInterface。
在C++中,通过接口指针调用QueryInterface。
在Visual Basic 6.0中,可以通过执行一个Set操作实现。
(5)在C++中,当不再使用接口指针时,要调用Release将其释放。
在Visual Basic 中,引用在其作用域外会自动释放,也可以显式地把它设置为“Nothing”。
(6)当用完COM时,你要调用CoUninitialize来取消COM初始化。
Visual Basic可以自动实现这一步。
通过这六个基本步骤的比较,就比较清楚地知道采用Visual Basic 开发环境是比较容易和方便的。
就开发语言本身而言,Visual Basic也比Visual C++语言容易掌握。
而且组态软件一般就有类似的Visual Basic脚本语言,对于本来就使用组态软件开发监控软件的用户来说,也是比较容易掌握Visual Basic开发OPC客户端程序。
如何用VB编写OPC客户端程序
Dim Vt_Filter As Integer Dim nodX As Node Dim Value As Variant Dim FullName As String Dim Relative As String Dim i As Integer
Private Sub cmbAccessRights_Click() Select Case cmbAccessRights.Text Case 'OPC_ACCESS_WRITE' g_Browser.AccessRights = OPCWritable Case Else g_Browser.AccessRights = OPCReadable End Select
用 VB 编写 OPC 客户端访问 WINCC
用 VB 编写 OPC 客户端访问 WINCC OPC 是一个工业标准,它是由一些世界上著名的自动化系统和硬件、软件公司 和
Microsoft(微软)紧密合作而建立的。〔O 代表 OLE(对象链接和嵌入),P (process 过程),C (control 控制)。OLE 已从面向对象重新定义为基于对象并更名为 Active X〕。 WinCC 是西门子公司在自动化领域采用最先进的技术与微软公司在共同开发的居于世界领 先地位的工控软件。)。WinCC 是一个功能强大的全面开放的监控系统,既可以用来完成小规模的简单的过程监控应用,也 可以用来完成复杂的应用。在任何情况下 WinCC 都可以生成漂亮而便捷的人机对话接口, 使操作员能够清晰地管理和优化生产过程。它集成的 OPC(OLE for process control)服务器使 得过程数据可由其它
Dim ItemObj1 As OPCItem Dim ItemObj2 As OPCItem Dim Serverhandle(2) As Long
基于VB的OPC客户端软件的设计与实现
基于VB的OPC客户端软件的设计与实现
王绪彪;张望;江丹玲
【期刊名称】《自动化与仪器仪表》
【年(卷),期】2011()2
【摘要】为解决控制领域软硬件之间数据通信困难的问题,提高实时数据访问的性能,本文对OPC数据存取规范进行了深入研究,重点分析了自动化接口标准,结合Visual Basic语言相对容易,开发周期短等特点,故采用Visual Basic作为开发语言,设计并实现了基于VB的OPC客户端应用软件。
通过测试,OPC客户端软件取得了不错的通信效果。
【总页数】4页(P46-49)
【关键词】OPC数据访问规范;自动化接口;客户端软件
【作者】王绪彪;张望;江丹玲
【作者单位】福州大学自动化系
【正文语种】中文
【中图分类】TP391
【相关文献】
1.基于VB的OPC客户端程序设计与应用 [J], 郭建明;隋永强;黄珍
2.基于OPC技术通过VB实现西门子PLC数据到Led演播室软件实时大屏幕传输系统 [J], 周波;
3."工控软件互操作规范OPC技术"讲座第7讲基于OPC技术的DCS组态软件的
设计与实现 [J], 梁坚;王锦标
4.基于VB的OPC客户端设计在电机试验系统中应用 [J], 高德欣;张文武;杨清
5.基于OPC技术的标准客户端软件的实现方法 [J], 祝培军;张建成
因版权原因,仅展示原文概要,查看原文内容请购买。
我的毕业论文(VB编程实现与OPC的通信连接以实现水泵的远程监测与控制)
序言现在社会对供水质量要求越来越高,随着计算机与网络技术的发展和应用于工业控制使得这一要求得以实现,而且增强了系统的安全性和可靠性,使得生产过程更加自动化和智能化。
通过网络技术我们只需要在控制室里就可以通过计算机屏幕看到整个生产现场,了解各生产设备的运行状态,不需要到现场就可以通过计算机对现场设备进行及时可靠的控制。
OPC技术已成为工业过程控制的通信标准,各设备生产商的产品都遵循该标准,使得不同厂商的产品互相通信更加简单易行。
在PLC恒压供水系统中,使用了罗克韦尔的ControlLogix 5550 控制器,它的通信软件RSLinx可以作为OPC服务器,可以使用专门的组态软件访问OPC服务器以获得控制器中的控制数据。
但是专门的组态软件都比较昂贵,对小型控制系统来说成本太高。
OPC有定制接口和自动化接口,自动化接口专为VB 服务。
这就可以使用Visual Basic编写OPC客户端应用程序。
在本设计中将主要介绍如何用Visual Basic编写OPC客户端应用程序的过程和水厂的监控画面程序来实现对水厂监控。
1概述1.1课题研究背景与意义城市供水系统是城市重要的服务性基础设施,其产、供、销都具有连续性、广域性、公用性、产品不可返修性等特性。
尤其是供水质量易受到二次污染和存放时间的影响,服务质量又受到管网布局和用户地形标高的影响,直接关系到广大人民群众工作、生活和社会各个方面,因此世界各国均把提高供水质量和供水服务列为供水企业部门的主要工作目标。
目前,国内大多数水厂采取人工抄表、电话报数、现场手动操作的原始供水调度法。
收集信息数量少、处理慢、传递迟,调度处于初级阶段,以保证不缺水为主,谈不上优化调度。
遇上爆漏或者火灾等突发事故,反应迟钝、损失大。
为满足城市发展对于供水质量的要求,降低供水厂单位制水能耗,保证可靠、稳定地城市供水需求,需要对整个供水系统的自动化控制和计算机监测管理。
实现供水系统的自动化,现在采用PLC控制,计算机与PLC通信实现人-机界面操作控制。
用VB编写OPC客户端程序的方法
用VB编写OPC客户端程序的方法
刘莉
【期刊名称】《工业控制计算机》
【年(卷),期】2005(18)5
【摘要】OPC为工业现场设备通信提供了标准,本文介绍了OPC技术的原理,简要介绍了如何用Visual Basic开发OPC客户端程序.
【总页数】2页(P5-6)
【作者】刘莉
【作者单位】淮安信息职业技术学院电气系,223001
【正文语种】中文
【中图分类】TP31
【相关文献】
1.OPC客户端程序开发 [J], 陈胜
2.基于VB的OPC客户端程序设计与应用 [J], 郭建明;隋永强;黄珍
3.用VB编写OPC客户端访问WinCC的实现 [J], 秦胜利;王锬
4.监控系统中OPC客户端程序设计与实现 [J], 赵宴辉;聂亚杰;刘二平;朱春来
5.用VB编写OPC客户端程序实现数据共享的方法 [J], 李晓诗;赵志峰
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB开发OPC客户端程序的步骤与实现(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图5-3所示。
只有引用OPCDAAuoto.DLL后,在程序中才能创建服务器对象,然后进行一系列的操作。
(2)在弹出的引用窗口里单击“浏览(B)…”按钮,弹出添加引用窗口,选择OPCDAAuoto.DLL文件。
(3)在引用窗口里的OPC Automation2.0前面打钩,按“确定”按钮。
(4)定义全局变量,这样可以在窗体的任何方法的代码内应用。
变量类型应该指定为对象型。
这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。
由于OPC自动化接口的数组的索引要求必须从1开始,而系统默认是从0开始,为了避免错误最好在代码的最初加上“Option Base1”语句。
为了使对象可以处理事件,必须将objTestGrp和objServer 的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。
Option Explicit
Option Base1
Dim WithEvents objServer As OPCServer
Dim objGroups As OPCGroups
Dim WithEvents objTestGrp As OPCGroup
Dim objItems As OPCItems
(5)连接OPC服务器和建立OPC?br>考虑到代码的可反复使用性,
采用子程序进行编程。
Sub Connect(strProgID As String,Optional strNode As String) If objServer Is Nothing Then
'建立一个OPC服务器对象
Set objServer=New OPCServer
End If
服务器状态ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。
如果OPC服务器没有连接,我们才执行objServer.Connect strProgID,strNode语句。
strProgID就是ProgID,strNode就是用于远程通信的IP地址。
If objServer.ServerState=OPCDisconnected Then
'连接OPC服务器
objServer.Connect strProgID,strNode End If
在Visual Basic中,通过执行一个Set操作实现调用其它接口的方法。
If objGroups Is Nothing Then
'建立一个OPC组集合
Set objGroups=objServer.OPCGroups
End If
If objTestGrp Is Nothing Then
'添加一个OPC组
Set objTestGrp=objGroups.Add("Group") End If
End Sub
(6)添加OPC标签
对服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。
OPC 客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的OPC标签。
Sub AddItem()
Dim strItemIDs(17)As String
Dim lClientHandles(17)As Long
Dim lErrors()As Long
Dim I As Integer
If objTestGrp Is Nothing Then
Exit Sub
End If
If Not objItems Is Nothing Then
If objItems.Count>0Then
Exit Sub
End If
End If
'设置组活动状态。
只有处于活动状态的OPC才进行定期的数据更新。
非活动状态的OPC组,除了在接到显然的数据读写要求外,并不收集任何数据。
If mnuSubscribtion.Checked=True Then
objTestGrp.IsActive=True
Else
objTestGrp.IsActive=False
End If
'启动组异步通知。
进行订阅的OPC组可以自动收到从服务器送来的数据变化通知。
objTestGrp.IsSubscribed=True
'建立OPC项集合
Set objItems=objTestGrp.OPCItems
'生成从TAG1到TAG17的项标识符
For I=1To17
strItemIDs(I)="Server.Group.TAG"&I
lClientHandles(I)=I
Next
'添加OPC项
Call objItems.AddItems(17,strItemIDs, lClientHandles,lServerHandles,lErrors)
End Sub
(7)异步读取代码的实现
在定时器事件内进行执行AsyncRead子程序的读取代码,而在读取完成事件处理返回的数据访问结果。
Sub AsyncRead()
Dim lErrors()As Long
If objTestGrp Is Nothing Then
Exit Sub
End If
If objTestGrp.OPCItems.Count>0Then
'异步读取
lTransID_Rd=lTransID_Rd+1
objTestGrp.AsyncRead17,lServerHandles,lErrors,lTransID_Rd, lCancelID_Rd
End If
End Sub
Private Sub objTestGrp_AsyncReadComplete(_
ByVal TransactionID As Long,ByVal NumItems As Long, _
ClientHandles()As Long,ItemValues()As Variant,_
Qualities()As Long,TimeStamps()As Date,Errors() As Long)
……
Sub
(8)在按钮中执行AsyncWrite子程序,完成异步写的操作。
Sub AsyncWrite(nIndex As Integer,ByRef vtItemValues()As Variant,_
ByRef lErrors()As Long)
Dim lHandle(1)As Long
If objTestGrp Is Nothing Then
Exit Sub
End If
If objTestGrp.OPCItems.Count>0Then
lHandle(1)=lServerHandles(nIndex)
'异步写入
lTransID_Wt=lTransID_Wt+1
objTestGrp.AsyncWrite1,lHandle(), vtItemValues,_
lErrors,lTransID_Wt, lCancelID_Wt
End If
End Sub
(9)断开OPC服务器
连接着OPC服务器的OPC客户应用程序,在退出前必须断开和OPC服务器的连接。
因为OPC服务器并不知道OPC客户应用程序的退出。
如
果不先断开连接,那么OPC服务器使用的计算机资源就不会被释放。
如果这样的问题反复发生,久而久之,连续运转的自动控制系统可能会计算机资源渐渐枯竭从而发生严重问题,可以显式地把它设置为“Nothing”。
Sub Disconnect()
Dim lErrors()As Long
If Not objItems Is Nothing Then
If objItems.Count>0Then
objItems.Remove17,lServerHandles, lErrors'清除OPC项
End If
Set objItems=Nothing
End If
If Not objTestGrp Is Nothing Then
objGroups.Remove"Group"'清除OPC组
Set objTestGrp=Nothing
End If
If Not objGroups Is Nothing Then
Set objGroups=Nothing
End If
If Not objServer Is Nothing Then
If objServer.ServerState<>
OPCDisconnected Then
objServer.Disconnect'断开OPC服务器.
End If
Set objServer=Nothing
End If
End Sub。