C#opc-client .net api

时间:2010-09-16 13:50:58

标签: c# opc

我正在使用opc基础的.NET API编写opc客户端。

在样本中,我只看到,项目的名称是硬编码的,如:

items[0] = new Opc.Da.Item();
items[0].ItemName = "blahblahblah";

我想要的不是用手写下所有物品的名字。 我想从服务器加载所有项目,例如树。 我该怎么办?

5 个答案:

答案 0 :(得分:6)

您可以使用以下构造浏览服务器:

using Opc.Da;
using Server=Opc.Da.Server;
using Factory=OpcCom.Factory;

string urlstring = string.Format("opcda://{0}/{1}/{{{2}}}", _hostName, _serverName, serverid);
Server s = new Server(new Factory(), new URL(urlstring));
s.Connect();
ItemIdentifier itemId = null;
BrowsePosition position;
BrowseFilters filters = new BrowseFilters() {BrowseFilter = browseFilter.item};
BrowseElement[] elements = s.Browse(itemId, filters, out position);

标签位于元素[i] .Name。

答案 1 :(得分:1)

您从XML文件加载项目。您可以根据需要使用任意数量的项目创建一次XML文件,然后只在需要时编辑它。要解析它,您可以使用MSXML DOM。 VB.NET中有一个解析器Parsing XML file in VB.NET using DOM。但是你可以在C#中搜索实现。

答案 2 :(得分:0)

好吧,我不熟悉您的opc客户端库,但您应该能够浏览服务器项目。这是许多独立OPC客户端使用的常见功能。

答案 3 :(得分:0)

Public Function Browse(ByRef node As TreeNode, Optional id As Opc.ItemIdentifier = Nothing) As Integer
    Try
        Dim clone As Opc.Da.Server = your_connected_server
        Dim filters As New Opc.Da.BrowseFilters
        filters.BrowseFilter = Opc.Da.browseFilter.all
        Dim pos As Opc.Da.BrowsePosition = Nothing
        Dim elements() As Opc.Da.BrowseElement = clone.Browse(id, filters, pos)
        If (elements IsNot Nothing) Then
            For Each element As Opc.Da.BrowseElement In elements
                Console.WriteLine(element.ItemName)
                AddBrowseElement(node, element)
                If (element.HasChildren = True) Then
                    id = New Opc.ItemIdentifier(element.ItemPath, element.ItemName)
                    Browse(node.Nodes.Item(node.Nodes.Count - 1), id)
                End If
            Next
        End If
        Return 0
    Catch ex As Exception
        RaiseEvent OnException(GetCurrentMethod, ex)
        Return -1
    End Try
End Function

Private Sub AddBrowseElement(ByRef parent As TreeNode, element As Opc.Da.BrowseElement)
    Dim node As TreeNode = New TreeNode(element.Name)
    node.Text = element.Name
    node.Tag = element

    ' add properties
    If (element.Properties IsNot Nothing) Then
        For Each [property] As Opc.Da.ItemProperty In element.Properties
            AddItemProperty(node, [property])
        Next
    End If
    ' add to parent.
    parent.Nodes.Add(node)
End Sub

答案 4 :(得分:0)

使用XML或NLOG或log4NET文件加载标记项。

使用opcdaauto.dll.Its为OPC Foundation会员提供免费的dll