OPCWare DA 自动化封装器 - VB.NET






2.55/5 (9投票s)
本文提供了 OPC (用于过程和控制的 OLE) 的基本技术概述,以及一个示例 VB.NET OPC 客户端,用于使用 OPCware DA 自动化封装器组件访问数据。它描述了 VB.NET 客户端如何与 OPC 服务器通信。
OPCWare DA 自动化封装器 - VB.NET
摘要
本文提供了 OPC (用于过程和控制的 OLE) 的基本技术概述,以及一个示例 VB.NET OPC 客户端,用于使用 OPCware DA 自动化封装器组件访问数据。它描述了 VB.NET 客户端如何与 OPC 服务器通信。本文的目标读者是软件开发人员。(本文假设读者具有 OPC 和 VB.NET 的基本知识)引言
OPC (用于过程和控制的 OLE) 是一种从过程控制设备访问数据的工业标准。 它是一种在系统之间交换数据的标准。它有一组规范,用于连接不同的多厂商设备和控制应用程序。 OPC 规范由 OPC 基金会维护。 以下章节将解释 OPC 的需求和 OPC 基金会的目标。
为什么需要 OPC 和 OPC 基金会
过去,制造商有许多不同的数据源,例如 PLC、DCS、数据库和其他设备。 供应商将使用自己的设备接口在其应用程序中捕获此数据。 只能通过供应商特定的专有接口访问数据。 因此,为了访问数据,制造商应始终被迫依赖供应商。 因此,制造商希望能够使用一种使制造商能够超越专有解决方案的赋能技术。 引入 OPC 来解决这个问题,它通过提供一种工业通信标准来实现多媒体设备之间的数据交换,而没有任何专有限制。
OPC 为多厂商之间的通信提供了开放标准,以实现多厂商设备之间的通信。 这些开放标准由“OPC 基金会”组织形成和维护。
OPC 基金会的主要目标是消除供应商特定的限制。 因此,硬件制造商只需要为其设备提供一个 OPC 服务器,即可与任何 OPC 客户端通信。 软件供应商只需在其产品中包含 OPC 客户端功能,即可立即与其他数千个硬件设备兼容。
以下章节将解释 OPC 的基本概述和客户端通信。
OPC 的工作原理
示例 OPC 客户端程序
本节包含一个示例代码片段,该片段充当 OPC 客户端程序,用于向 OPC 服务器读取和写入数据。 此代码使用“Matrikon.OPC.Simulation”作为 OPC 服务器。 (可以从 Internet 下载模拟服务器)
图 Matrikon.OPC.Simulation 服务器 示例 OPCClient 项目
Option Strict Off
Option Explicit On
'########## Include the reference "OPCWare DA Automation Wrapper"
Imports OPCAutomation
Imports System.Runtime.InteropServices
Public Class Form1
Dim WithEvents ObjOPCServer As OPCAutomation.OPCServer
Dim WithEvents ObjOPCGroups As OPCAutomation.OPCGroups
Dim WithEvents ObjOPCGroup As OPCAutomation.OPCGroup
Dim ObjOPCItems As OPCAutomation.OPCItems
Dim ObjOPCItem As OPCAutomation.OPCItem
Const NoOfItems = 2
Dim Array_Items(NoOfItems) As String
Dim Array_ClientHanlers(NoOfItems) As Integer
Dim Array_ServerHandlers(NoOfItems) As Integer
Dim Array_Values(NoOfItems) As Object
'########## Form Load Event ###################################
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Call StartOPCClient("Matrikon.OPC.Simulation.1")
Call ReadData()
Call WriteData()
End Sub
'################################################################
'########## Sub procedure to read OPC Item values ##############
Private Sub ReadData()
Try
Dim ObjOPCItem As OPCAutomation.OPCItem
For Each ObjOPCItem In ObjOPCGroup.OPCItems
ObjOPCItem.Read(OPCAutomation.OPCDataSource.OPCDevice)
Array_Values(ObjOPCItem.ClientHandle) = ObjOPCItem.Value
MsgBox(ObjOPCItem.ItemID & ":-> " & vbCrLf & "Value:" & ObjOPCItem.Value &_
vbCrLf & "TimeStamp:" & ObjOPCItem.TimeStamp & vbCrLf &_
"Quality:" & ObjOPCItem.Quality)
Next
ObjOPCItem = Nothing
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "OPC Client")
End Try
End Sub
'################ Sub procedure to initialize OPC Server ######
Private Sub StartOPCClient(ByVal OPCServerName As String)
Dim liCounter As Integer
Dim gpServerHandlers As Array
Dim gsErrors As Array
Try
ObjOPCServer = New OPCAutomation.OPCServer
'##### Initialize OPC Server ################################
ObjOPCServer.Connect(OPCServerName, "")
ObjOPCGroups = ObjOPCServer.OPCGroups
ObjOPCGroup = ObjOPCGroups.Add("OPCGroup1")
'Add OPCGroup
ObjOPCGroup.UpdateRate = 1000
ObjOPCGroup.IsActive = False
ObjOPCGroup.IsSubscribed = ObjOPCGroup.IsActive
ObjOPCItems = ObjOPCGroup.OPCItems
'Build OPCItems Array
For liCounter = 1 To NoOfItems
Array_Items(liCounter) = "OPCClient.Device" & liCounter
Array_ClientHanlers(liCounter) = liCounter
Next
'Add OPCItems
ObjOPCItems.AddItems(NoOfItems, Array_Items,Array_ClientHanlers, _
gpServerHandlers, gsErrors)
'Get the server handlers
For liCounter = 1 To NoOfItems
If gsErrors(liCounter) = 0 Then
Array_ServerHandlers(liCounter) = gpServerHandlers(liCounter)
Else
MsgBox("Item" & liCounter & "has problem", _
MsgBoxStyle.Critical, "OPC Client")
End If
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "OPC Client")
End Try
End Sub
'#################### Sub procedure to write OPC Item data
Private Sub WriteData()
Try
Dim liCounter As Integer
Dim Errors As Array
'##### Assign new values
For liCounter = 1 To NoOfItems
Array_Values(liCounter) = CStr(liCounter * Rnd() * 100)
Next
'Write back to OPC Server
ObjOPCGroup.SyncWrite(NoOfItems, Array_ServerHandlers, _
Array_Values, Errors)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "OPC Client")
End Try
End Sub
End
Class
结论
借助 OPC,工业自动化在集成和可扩展性方面得到了改进。 不同的自动化系统供应商将不会花钱开发与其他供应商产品兼容的软件组件。OPC 使跨供应商、设备、软件和系统的即插即用软件和硬件成为可能,制造可以轻松地将其集成到公司范围内的自动化和业务系统中。