WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
1 OPC简介WWW_PLCJS@_COM%-PLC-技.术_网
OPC是 OLE for Process Control 的缩写,即把 OLE 技术应用于工业控制领域。WWW_PLC※JS_COM-PmLC-技.术_网
OPC的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。在过去,为了存取现场设备的数据信息,每一个应用软件开发商都需要编写专用的接口函数。由于现场设备的种类繁多,且产品的不断升级,往往给用户和软件开发商带来了巨大的工作负担。通常这样也不能满足工作的实际需要,系统集成商和开发商急切需要一种具有高效性、可靠性、开放性、可互操作性的即插即用的设备驱动程序。在这种情况下,OPC标准应运而生。OPC标准以微软公司的 OLE技术为基础,它的制定是通过提供一套标准的OLE/COM接口完成的,在OPC技术中使用的是 OLE2技术,OLE标准允许多台微机之间交换文档、图形等对象。WWW_PLCJS_COM-PLC-技.术_网
OPC是以OLE/COM机制作为应用程序的通讯标准。OLE/COM是一种客户/服务器模式,具有语言无关性、代码重用性、易于集成性等优点。OPC规范了接口函数,不管现场设备以何种形式存在,客户都以统一的方式去访问,从而保证软件对客户的透明性,使得用户完全从低层的开发中脱离出来。WWW_PLCJS@_COM%-PLC-技.术_网
应用程序与OPC服务器之间必须有 OPC 接口,OPC 规范提供了两套标准接口:Custom 标准接口,OLE 自动化标准接口。通常在系统设计中采用OLE自动化标准接口,OLE 自动化标准接口,及采用 OLE 自动化技术进行调用,其技术为上节所述的 OLE 自动化技术。OLE 自动化标准接口定义了以下三层接口,依次呈包含关系:WWW_PL※CJS_COM-PLC-技.术_网
1)OPC Server:OPC 启动服务器,获得其他对象和服务的起始类,并用于返回 OPC Group 类对象。WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
2)OPC Group:存储由若干 OPC Item 组成的 Group 信息,并用于返回 OPC Item 类对象。WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
3)OPC Item:存储具体 Item 的定义、数据值、状态值等信息。W1WW_P4LCJS_COM-PLC-技.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
2 采用OPC规范设计系统的优势P.L.C.技.术.网——可编程控制器技术门户
W1WW_P4LCJS_COM-PLC-技.术_网
1)OPC规范以 OLE/DCOM 为技术基础,而 OLE/DCOM 支持 TCP/IP 等网络协议,因此可以将各个子系统从物理上分开,分布于网络的不同节点上。WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
2)OPC按照面向对象的原则,将一个应用程序(OPC 服务器)作为一个对象封装起来,只将接口方法暴露在外面,客户以统一的方式去调用这个方法,从而保证软件对客户的透明性,使得用户完全从低层的开发中脱离出来。WWW.PLCJS.COM——可编程控制器技术门户
3)OPC实现了远程调用,使得应用程序的分布与系统硬件的分布无关,便于系统硬件配置以及使得系统的应用范围更广。WWcW_PLCJS_COM-PLC-技.术_网
4)采用OPC规范,便于系统的组态化,将系统复杂性大大简化,可以大大缩短软件开发周期,提高软件运行的可靠性和稳定性,便于系统的升级与维护。plcjs.技.术_网
5)OPC 规范了接口函数,不管现场设备以何种形式存在,客户都以统一的方式去访问,从而实现系统的开放性,易于实现与其它系统的接口。 WWcW_PLCJS_COM-PLC-技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
WW.W_PLCJS_COM-PLC-技.术_网
3 使用VB6.0编写OPC Client访问世纪星WWW_PLCJS_COM-PLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
世纪星同时提供OPC Client和OPC Server两种功能,想要通过OPC方式和世纪星交换数据,必须要编写OPC Client和OPC Server其中的任意一种。由于编写OPC Server程序具有一定难度,所以我们建议工程技术人员开发OPC Client来和世纪星的OPC Server交互。W1WW_P4LCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PmLC-技.术_网
1)世纪星工程WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
使用OPC Client访问世纪星是不需要在世纪星中做任何特殊配置的,我们在世纪星中创建如下类型变量。在应用程序命令语言中让这些变量发生变化。WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
plcjs.技.术_网
图1 变量列表W1WW_P4LCJS_COM-PLC-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
plcjs.技.术_网
图2 应用程序命令语言脚本P.L.C.技.术.网——可编程控制器技术门户
WW.W_PLCJS_COM-PLC-技.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
图3 世纪星运行画面WWW_P※LCJS_COM-PLC-)技.术_网
P.L.C.技.术.网——可编程控制器技术门户
2)VB6.0编写OPC ClientP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW.PLCJS.COM——可编程控制器技术门户
A、脚本WWW_PL※CJS_COM-PLC-技.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
Option ExplicitWWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
Dim WithEvents opcSvr As OPCServer——可——编——程——控-制-器-技——术——门——户
Dim WithEvents opcGrp As OPCGroupWWW_PLCJS@_COM%-PLC-技.术_网
Dim opcItm(3) As OPCItemWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
Dim opcInt As VariantWW.W_PLC※JS_C,OM-PL,C-技.术_网
Dim opcInfo As VariantWWW.PLCJS.COM——可编程控制器技术门户
Dim opcDsc As VariantP.L.C.技.术.网——可编程控制器技术门户
Dim v As VariantWWW_P※LCJS_COM-PLC-)技.术_网
Dim q As VariantWWW_PLCJS_COM-PLC-技.术_网
Dim t As VariantWWW_PLCJS_COM-PLC-技.术_网
Private Sub cmdConnect_Click()WWW_PLCJS_COM-PLC-技.术_网
On Error GoTo edWWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
If opcSvr Is Nothing Then Set opcSvr = New OPCServerWWW_PLCJS@_COM%-PLC-技.术_网
opcSvr.Connect "CenturyStar.OPCServer", txtIP.TextWWW_PL※CJS_COM-PLC-技.术_网
opcSvr.OPCGroups.DefaultGroupUpdateRate = 50WWW_PLCJS@_COM%-PLC-技.术_网
Set opcGrp = opcSvr.OPCGroups.Add("Group")——可——编——程——控-制-器-技——术——门——户
Set opcItm(0) = opcGrp.OPCItems.AddItem("opcInt", 1)WWW_PL※CJS_COM-PLC-技.术_网
Set opcItm(1) = opcGrp.OPCItems.AddItem("opcInfo", 2)WWW_PLC※JS_COM-PmLC-技.术_网
Set opcItm(2) = opcGrp.OPCItems.AddItem("opcDsc", 3)WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
Set opcItm(3) = opcGrp.OPCItems.AddItem("opcFlt", 4)WWW_PLCJS_COM-PLC-技.术_网
If opcSvr.ServerState = 1 ThenWWW_P※LCJS_CO※M-PLC-技-.术_网
MsgBox "opc服务器已连接!", vbOKOnly, "提示:"WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
tmrRun.Enabled = Trueplcjs.技.术_网
cmdConnect.Enabled = FalseWWW_PL※CJS_COM-PLC-技.术_网
cmdDisConnect.Enabled = TrueWW.W_PLCJS_COM-PLC-技.术_网
ElseWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
MsgBox "opc服务器连接错误!", vbOKOnly, "提示:"WWW_P※LCJS_COM-PLC-)技.术_网
End IfWWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
ed:P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
End SubWWW_P※LCJS_COM-PLC-)技.术_网
Private Sub cmdDisConnect_Click()WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
On Error GoTo edWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
tmrRun.Enabled = False——可——编——程——控-制-器-技——术——门——户
opcSvr.OPCGroups.RemoveAllWWW_PLCJS@_COM%-PLC-技.术_网
opcSvr.DisconnectWWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
Set opcSvr = NothingWWW_P※LCJS_COM-PLC-)技.术_网
cmdDisConnect.Enabled = FalseWW.W_PLC※JS_C,OM-PL,C-技.术_网
cmdConnect.Enabled = TrueWWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
ed:WW.W_PLCJS_COM-PLC-技.术_网
End SubWW.W_PLCJS_COM-PLC-技.术_网
Private Sub Form_Unload(Cancel As Integer)WWW_P※LCJS_CO※M-PLC-技-.术_网
On Error GoTo edWWcW_PLCJS_COM-PLC-技.术_网
cmdDisConnect_ClickWWW_PLCJS_COM-PLC-技.术_网
ed:W1WW_P4LCJS_COM-PLC-技.术_网
EndWWW_PLCJS@_COM%-PLC-技.术_网
End SubP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
Private Sub tmrRun_Timer()WWW_P※LCJS_COM-PLC-)技.术_网
On Error GoTo edWWW_P※LCJS_CO※M-PLC-技-.术_网
tmrRun.Enabled = FalseWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
If opcSvr.ServerState ThenP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
opcItm(0).Read 1, v, q, tWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
txtInt.Text = v WWW_PL※CJS_COM-PLC-技.术_网